In progress changes for saving enemy defeated data

This commit is contained in:
2026-06-06 10:52:08 -07:00
parent bb46f0dcd9
commit 0f849f11dc
8 changed files with 41 additions and 2 deletions
@@ -21,6 +21,10 @@ namespace Zennysoft.Ma.Adapter.Entity
public void OnMorph(); public void OnMorph();
public void IncrementDefeatCount();
public int GetDefeatCount(IEnemy enemyType);
public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> dungeonRooms); public IDungeonRoom GetCurrentRoom(ImmutableList<IDungeonRoom> dungeonRooms);
public void MoveEnemyToNewRoom(IDungeonRoom newRoom); public void MoveEnemyToNewRoom(IDungeonRoom newRoom);
@@ -34,3 +34,10 @@ public partial record NpcData
[Save("stele_list")] [Save("stele_list")]
public required List<int> SteleDiscovered { get; set; } public required List<int> SteleDiscovered { get; set; }
} }
[Meta, Id("stat_data")]
public partial record StatData
{
[Save("sproingy_defeated")]
public int SproingyDefeated { get; set; } = 0;
}
+15 -1
View File
@@ -26,6 +26,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
[Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single()); [Dependency] protected IPlayer _player => this.DependOn(() => GetParent().GetChildren().OfType<IPlayer>().Single());
[Dependency] protected IGameRepo _gameRepo => this.DependOn<IGameRepo>(); [Dependency] protected IGameRepo _gameRepo => this.DependOn<IGameRepo>();
[Dependency] public IGame _game => this.DependOn<IGame>();
#endregion #endregion
public IHealthComponent HealthComponent { get; private set; } public IHealthComponent HealthComponent { get; private set; }
@@ -177,7 +179,7 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
_hitSFX.Play(); _hitSFX.Play();
} }
public virtual void Die() public virtual async void Die()
{ {
SetPhysicsProcess(false); SetPhysicsProcess(false);
_rustDuration.Stop(); _rustDuration.Stop();
@@ -188,6 +190,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
_hitSFX.Play(); _hitSFX.Play();
_dieSFX.Play(); _dieSFX.Play();
_gameRepo.OnEnemyDied(this); _gameRepo.OnEnemyDied(this);
IncrementDefeatCount();
await _game.Save();
var tweener = CreateTween(); var tweener = CreateTween();
tweener.TweenInterval(1.0f); tweener.TweenInterval(1.0f);
tweener.TweenCallback(Callable.From(QueueFree)); tweener.TweenCallback(Callable.From(QueueFree));
@@ -290,4 +294,14 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLo
{ {
StatusEffectComponent.Rust.OnNext(false); StatusEffectComponent.Rust.OnNext(false);
} }
public virtual void IncrementDefeatCount()
{
}
public int GetDefeatCount(IEnemy enemyType)
{
return 0;
}
} }
@@ -38,6 +38,8 @@ public partial class Sproingy : Enemy2D, IHavePatrolBehavior, IHaveEngagePlayerB
public override void Move() => EnemyModelView.PlayIdleAnimation(); public override void Move() => EnemyModelView.PlayIdleAnimation();
public override void IncrementDefeatCount() => _game.StatData.SproingyDefeated += 1;
public override void _ExitTree() public override void _ExitTree()
{ {
PatrolBehavior.OnVelocityComputed -= OnVelocityComputed; PatrolBehavior.OnVelocityComputed -= OnVelocityComputed;
+7
View File
@@ -74,6 +74,8 @@ public partial class Game : Node3D, IGame
public NpcData NpcData { get; private set; } public NpcData NpcData { get; private set; }
public StatData StatData { get; private set; }
public ItemRescueMenu ItemRescueMenu { get => InGameUI.ItemRescueMenu; } public ItemRescueMenu ItemRescueMenu { get => InGameUI.ItemRescueMenu; }
private EffectService _effectService; private EffectService _effectService;
@@ -129,6 +131,10 @@ public partial class Game : Node3D, IGame
NpcData = new NpcData() NpcData = new NpcData()
{ {
SteleDiscovered = NpcData.SteleDiscovered SteleDiscovered = NpcData.SteleDiscovered
},
StatData = new StatData()
{
SproingyDefeated = StatData.SproingyDefeated
} }
}; };
return gameData; return gameData;
@@ -140,6 +146,7 @@ public partial class Game : Node3D, IGame
QuestData = data.QuestData ?? new QuestData(); QuestData = data.QuestData ?? new QuestData();
SarcoData = data.SarcoData ?? new SarcoData(); SarcoData = data.SarcoData ?? new SarcoData();
NpcData = data.NpcData ?? new NpcData() { SteleDiscovered = [] }; NpcData = data.NpcData ?? new NpcData() { SteleDiscovered = [] };
StatData = data.StatData ?? new StatData();
} }
); );
+3
View File
@@ -17,5 +17,8 @@ public partial record GameData
[Save("npc_data")] [Save("npc_data")]
public required NpcData NpcData { get; init; } public required NpcData NpcData { get; init; }
[Save("stat_data")]
public required StatData StatData { get; init; }
} }
+2
View File
@@ -50,6 +50,8 @@ public interface IGame : IProvide<IGame>, IProvide<IGameRepo>, IProvide<IPlayer>
public NpcData NpcData { get; } public NpcData NpcData { get; }
public StatData StatData { get; }
public event Action GameExitRequested; public event Action GameExitRequested;
public event Action GameLoaded; public event Action GameLoaded;
+1 -1
View File
@@ -916,7 +916,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
if (SigilComponent.Sigil.ElementType == weapon.WeaponElement) if (SigilComponent.Sigil.ElementType == weapon.WeaponElement)
totalDamage = Mathf.RoundToInt(totalDamage * 1.15f); totalDamage = Mathf.RoundToInt(totalDamage * 1.15f);
totalDamage = Mathf.RoundToInt(totalDamage * SigilComponent.Sigil.AttackModifier); totalDamage = Mathf.RoundToInt(totalDamage * (1 + SigilComponent.Sigil.AttackModifier));
if (isCriticalHit) if (isCriticalHit)
{ {