From 0f849f11dc4ab98cd8f645c760f83430ec5986a6 Mon Sep 17 00:00:00 2001 From: Zenny Date: Sat, 6 Jun 2026 10:52:08 -0700 Subject: [PATCH] In progress changes for saving enemy defeated data --- .../Entity/IEnemy.cs | 4 ++++ .../Quest/SarcoData.cs | 7 +++++++ Zennysoft.Game.Ma/src/enemy/Enemy.cs | 16 +++++++++++++++- .../enemy/enemy_types/01. sproingy/Sproingy.cs | 2 ++ Zennysoft.Game.Ma/src/game/Game.cs | 7 +++++++ Zennysoft.Game.Ma/src/game/GameData.cs | 3 +++ Zennysoft.Game.Ma/src/game/IGame.cs | 2 ++ Zennysoft.Game.Ma/src/player/Player.cs | 2 +- 8 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Zennysoft.Game.Ma.Implementation/Entity/IEnemy.cs b/Zennysoft.Game.Ma.Implementation/Entity/IEnemy.cs index 9384ac5b..fa232a50 100644 --- a/Zennysoft.Game.Ma.Implementation/Entity/IEnemy.cs +++ b/Zennysoft.Game.Ma.Implementation/Entity/IEnemy.cs @@ -21,6 +21,10 @@ namespace Zennysoft.Ma.Adapter.Entity public void OnMorph(); + public void IncrementDefeatCount(); + + public int GetDefeatCount(IEnemy enemyType); + public IDungeonRoom GetCurrentRoom(ImmutableList dungeonRooms); public void MoveEnemyToNewRoom(IDungeonRoom newRoom); diff --git a/Zennysoft.Game.Ma.Implementation/Quest/SarcoData.cs b/Zennysoft.Game.Ma.Implementation/Quest/SarcoData.cs index 6cba89dd..f2f420ac 100644 --- a/Zennysoft.Game.Ma.Implementation/Quest/SarcoData.cs +++ b/Zennysoft.Game.Ma.Implementation/Quest/SarcoData.cs @@ -34,3 +34,10 @@ public partial record NpcData [Save("stele_list")] public required List SteleDiscovered { get; set; } } + +[Meta, Id("stat_data")] +public partial record StatData +{ + [Save("sproingy_defeated")] + public int SproingyDefeated { get; set; } = 0; +} diff --git a/Zennysoft.Game.Ma/src/enemy/Enemy.cs b/Zennysoft.Game.Ma/src/enemy/Enemy.cs index 8e02ef07..ad532b12 100644 --- a/Zennysoft.Game.Ma/src/enemy/Enemy.cs +++ b/Zennysoft.Game.Ma/src/enemy/Enemy.cs @@ -26,6 +26,8 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide this.DependOn(() => GetParent().GetChildren().OfType().Single()); [Dependency] protected IGameRepo _gameRepo => this.DependOn(); + + [Dependency] public IGame _game => this.DependOn(); #endregion public IHealthComponent HealthComponent { get; private set; } @@ -177,7 +179,7 @@ public abstract partial class Enemy : CharacterBody3D, IEnemy, IProvide EnemyModelView.PlayIdleAnimation(); + public override void IncrementDefeatCount() => _game.StatData.SproingyDefeated += 1; + public override void _ExitTree() { PatrolBehavior.OnVelocityComputed -= OnVelocityComputed; diff --git a/Zennysoft.Game.Ma/src/game/Game.cs b/Zennysoft.Game.Ma/src/game/Game.cs index c03daaf1..e7ab3d08 100644 --- a/Zennysoft.Game.Ma/src/game/Game.cs +++ b/Zennysoft.Game.Ma/src/game/Game.cs @@ -74,6 +74,8 @@ public partial class Game : Node3D, IGame public NpcData NpcData { get; private set; } + public StatData StatData { get; private set; } + public ItemRescueMenu ItemRescueMenu { get => InGameUI.ItemRescueMenu; } private EffectService _effectService; @@ -129,6 +131,10 @@ public partial class Game : Node3D, IGame NpcData = new NpcData() { SteleDiscovered = NpcData.SteleDiscovered + }, + StatData = new StatData() + { + SproingyDefeated = StatData.SproingyDefeated } }; return gameData; @@ -140,6 +146,7 @@ public partial class Game : Node3D, IGame QuestData = data.QuestData ?? new QuestData(); SarcoData = data.SarcoData ?? new SarcoData(); NpcData = data.NpcData ?? new NpcData() { SteleDiscovered = [] }; + StatData = data.StatData ?? new StatData(); } ); diff --git a/Zennysoft.Game.Ma/src/game/GameData.cs b/Zennysoft.Game.Ma/src/game/GameData.cs index 0d19e189..83202d0e 100644 --- a/Zennysoft.Game.Ma/src/game/GameData.cs +++ b/Zennysoft.Game.Ma/src/game/GameData.cs @@ -17,5 +17,8 @@ public partial record GameData [Save("npc_data")] public required NpcData NpcData { get; init; } + + [Save("stat_data")] + public required StatData StatData { get; init; } } diff --git a/Zennysoft.Game.Ma/src/game/IGame.cs b/Zennysoft.Game.Ma/src/game/IGame.cs index 3bf1974b..dfa365cd 100644 --- a/Zennysoft.Game.Ma/src/game/IGame.cs +++ b/Zennysoft.Game.Ma/src/game/IGame.cs @@ -50,6 +50,8 @@ public interface IGame : IProvide, IProvide, IProvide public NpcData NpcData { get; } + public StatData StatData { get; } + public event Action GameExitRequested; public event Action GameLoaded; diff --git a/Zennysoft.Game.Ma/src/player/Player.cs b/Zennysoft.Game.Ma/src/player/Player.cs index 52821919..4bd34f6b 100644 --- a/Zennysoft.Game.Ma/src/player/Player.cs +++ b/Zennysoft.Game.Ma/src/player/Player.cs @@ -916,7 +916,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide if (SigilComponent.Sigil.ElementType == weapon.WeaponElement) totalDamage = Mathf.RoundToInt(totalDamage * 1.15f); - totalDamage = Mathf.RoundToInt(totalDamage * SigilComponent.Sigil.AttackModifier); + totalDamage = Mathf.RoundToInt(totalDamage * (1 + SigilComponent.Sigil.AttackModifier)); if (isCriticalHit) {