Refactor stats

This commit is contained in:
2025-10-22 16:24:07 -07:00
parent 6ec45c4805
commit f0c4e65783
77 changed files with 565 additions and 372 deletions

View File

@@ -11,7 +11,6 @@ using Zennysoft.Game.Abstractions;
using Zennysoft.Ma.Adapter;
using System.IO;
using System.Threading.Tasks;
using Zennysoft.Game.Implementation.Components;
[Meta(typeof(IAutoNode))]
public partial class Game : Node3D, IGame
@@ -95,7 +94,8 @@ public partial class Game : Node3D, IGame
PlayerData = new PlayerData()
{
Inventory = _player.Inventory
Inventory = (Inventory)_player.Inventory,
HealthComponent = (HealthComponent)_player.HealthComponent,
},
MapData = new MapData()
{
@@ -119,7 +119,7 @@ public partial class Game : Node3D, IGame
public void OnResolved()
{
var saveFileManager = _container.GetInstance<IMaSaveFileManager<GameData>>();
var saveFileManager = _container.GetInstance<IMaSaveFileManager>();
SaveFile = new SaveFile<GameData>(
root: GameChunk,
onSave: saveFileManager.Save,
@@ -127,7 +127,7 @@ public partial class Game : Node3D, IGame
{
try
{
var gameData = await saveFileManager.Load();
var gameData = await saveFileManager.Load() as GameData;
return gameData;
}
catch (FileNotFoundException)
@@ -138,7 +138,6 @@ public partial class Game : Node3D, IGame
return null;
}
);
GameBinding = GameState.Bind();
GameBinding
.Handle((in GameState.Output.InitializeGame _) =>
@@ -200,22 +199,22 @@ public partial class Game : Node3D, IGame
.Handle((in GameState.Output.LoadNextFloor _) =>
{
FloorClearMenu.FadeOut();
_map.LoadFloor();
if (_player.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
Task.Run(() => _map.LoadFloor());
if (_player.EquipmentComponent.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
{
var itemToDestroy = _player.EquippedWeapon.Value;
var itemToDestroy = _player.EquipmentComponent.EquippedWeapon.Value;
_player.Unequip(itemToDestroy);
_player.Inventory.Remove(itemToDestroy);
}
if (_player.EquippedArmor.Value.ItemTag == ItemTag.BreaksOnChange)
if (_player.EquipmentComponent.EquippedArmor.Value.ItemTag == ItemTag.BreaksOnChange)
{
var itemToDestroy = _player.EquippedArmor.Value;
var itemToDestroy = _player.EquipmentComponent.EquippedArmor.Value;
_player.Unequip(itemToDestroy);
_player.Inventory.Remove(itemToDestroy);
}
if (_player.EquippedAccessory.Value.ItemTag == ItemTag.BreaksOnChange)
if (_player.EquipmentComponent.EquippedAccessory.Value.ItemTag == ItemTag.BreaksOnChange)
{
var itemToDestroy = _player.EquippedAccessory.Value;
var itemToDestroy = _player.EquipmentComponent.EquippedAccessory.Value;
_player.Unequip(itemToDestroy);
_player.Inventory.Remove(itemToDestroy);
}
@@ -245,6 +244,7 @@ public partial class Game : Node3D, IGame
_effectService = new EffectService(this, _player, _map);
}
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
public void OnReady()
{
InitializeGame();
@@ -254,22 +254,22 @@ public partial class Game : Node3D, IGame
InGameUI.PlayerInfoUI.Activate();
_player.Activate();
}
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
private void FloorClearMenu_SaveAndExit()
{
//SaveFile.Save();
_player.Deactivate();
GameState.Input(new GameState.Input.ReturnToMainMenu());
InGameUI.Hide();
}
private void FloorClearMenu_GoToNextFloor() => GameState.Input(new GameState.Input.LoadNextFloor());
public void LoadExistingGame() => SaveFile.Load().ContinueWith((_) => CallDeferred(nameof(FinishedLoadingSaveFile)));
public void InitializeGame()
{
_map.InitializeMapData();
_player.InitializePlayerState();
}
public void FloorExitReached()

View File

@@ -0,0 +1,43 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
using Zennysoft.Game.Ma;
namespace Zennysoft.Ma.Adapter;
[Meta, Id("game_data")]
public partial record GameData
{
[Save("player_data")]
public required PlayerData PlayerData { get; init; }
[Save("map_data")]
public required MapData MapData { get; init; }
[Save("rescued_items")]
public required RescuedItemDatabase RescuedItems { get; init; }
}
public partial record PlayerData
{
[Save("inventory")]
public required Inventory Inventory { get; init; }
[Save("health_component")]
public required HealthComponent HealthComponent { get; init; }
[Save("vt_component")]
public VTComponent VTComponent { get; init; }
[Save("attack_component")]
public AttackComponent AttackComponent { get; init; }
[Save("defense_component")]
public DefenseComponent DefenseComponent { get; init; }
[Save("experience_points_component")]
public ExperiencePointsComponent ExperiencePointsComponent { get; init; }
[Save("luck_component")]
public LuckComponent LuckComponent { get; init; }
[Save("equipment_component")]
public EquipmentComponent EquipmentComponent { get; init; }
}
public partial record MapData
{
}

View File

@@ -4,8 +4,8 @@ namespace Zennysoft.Game.Ma;
using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.SaveFileBuilder;
using Godot;
using System.Threading.Tasks;
using Zennysoft.Game.Implementation;
using Zennysoft.Ma.Adapter;
public interface IGame : IProvide<IGame>, IProvide<IGameRepo>, IProvide<IPlayer>, IProvide<IMap>, IProvide<ISaveChunk<GameData>>, INode3D