In progress changes for saving enemy defeated data
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user