Improvements to save and loading

Improvements to Chinthe animation logic
Fix broken Godot Tool system and just use a more manual approach to setting map nodes
Remove ItemDatabase from individual room scenes
This commit is contained in:
2025-10-24 01:33:18 -07:00
parent f5360adbf1
commit 286c221530
93 changed files with 497 additions and 678 deletions

View File

@@ -1,14 +1,11 @@
using Chickensoft.Collections;
using Chickensoft.Serialization;
namespace Zennysoft.Ma.Adapter;
public interface IHealthComponent
{
[Save("current_hp")]
public IAutoProp<int> CurrentHP { get; }
[Save("maximum_hp")]
public IAutoProp<int> MaximumHP { get; }
public event Action? HealthReachedZero;

View File

@@ -1,7 +1,10 @@
namespace Zennysoft.Ma.Adapter.Entity
using Chickensoft.Serialization;
namespace Zennysoft.Ma.Adapter.Entity
{
public record ElementalResistanceSet
{
[Save("elemental_resist_set")]
public Dictionary<ElementType, double> ElementalResistance { get; }
public static ElementalResistanceSet None => new ElementalResistanceSet(0, 0, 0, 0, 0);

View File

@@ -1,4 +1,5 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
using Zennysoft.Ma.Adapter.Entity;
namespace Zennysoft.Ma.Adapter;
@@ -6,15 +7,16 @@ namespace Zennysoft.Ma.Adapter;
[Meta, Id("equipable_item")]
public abstract partial class EquipableItem : InventoryItem
{
[Save("bonus_attack_stats")]
public virtual int BonusAttack { get; }
[Save("bonus_defense_stats")]
public virtual int BonusDefense { get; }
[Save("bonus_hp_stats")]
public virtual int BonusHP { get; }
[Save("bonus_vt_stats")]
public virtual int BonusVT { get; }
[Save("bonus_luck_stats")]
public virtual int BonusLuck { get; }
[Save("bonus_elemental_resist_stats")]
public virtual ElementalResistanceSet ElementalResistance { get; } = new ElementalResistanceSet(0, 0, 0, 0, 0);
}

View File

@@ -1,7 +1,5 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
using Zennysoft.Game.Abstractions;
using Zennysoft.Game.Implementation;
namespace Zennysoft.Ma.Adapter;

View File

@@ -21,25 +21,4 @@ public partial class UsableItemTagEnumContext : JsonSerializerContext;
public partial class BoxItemTagEnumContext : JsonSerializerContext;
[JsonSerializable(typeof(ElementType))]
public partial class ElementTypeEnumContext : JsonSerializerContext;
[JsonSerializable(typeof(IHealthComponent))]
public partial class HealthComponentContext : JsonSerializerContext;
[JsonSerializable(typeof(IVTComponent))]
public partial class VTComponentContext : JsonSerializerContext;
[JsonSerializable(typeof(IAttackComponent))]
public partial class AttackComponentContext : JsonSerializerContext;
[JsonSerializable(typeof(IDefenseComponent))]
public partial class DefenseComponentContext : JsonSerializerContext;
[JsonSerializable(typeof(IExperiencePointsComponent))]
public partial class ExperiencePointsComponentContext : JsonSerializerContext;
[JsonSerializable(typeof(ILuckComponent))]
public partial class LuckComponentContext : JsonSerializerContext;
[JsonSerializable(typeof(IEquipmentComponent))]
public partial class EquipmentComponentContext : JsonSerializerContext;
public partial class ElementTypeEnumContext : JsonSerializerContext;

View File

@@ -0,0 +1,11 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
namespace Zennysoft.Ma.Adapter;
[Meta, Id("quest_data")]
public partial record QuestData
{
[Save("quest_data_1")]
public bool QuestMarker1 { get; set; } = false;
}

View File

@@ -8,7 +8,7 @@ public interface IMaSaveFileManager
{
Task Save<T>(T gameData);
Task<object?> Load();
Task<T?> Load<T>();
}
public sealed class MaSaveFileManager : IMaSaveFileManager
@@ -19,7 +19,7 @@ public sealed class MaSaveFileManager : IMaSaveFileManager
public MaSaveFileManager(ISaveFileManager saveFileManager)
{
_saveFileManager = saveFileManager;
_converters = [HealthComponentContext.Default, WeaponTagEnumContext.Default, ItemTagEnumContext.Default, ElementTypeEnumContext.Default, AccessoryTagEnumContext.Default, ThrowableItemTagEnumContext.Default, UsableItemTagEnumContext.Default, BoxItemTagEnumContext.Default];
_converters = [WeaponTagEnumContext.Default, ItemTagEnumContext.Default, ElementTypeEnumContext.Default, AccessoryTagEnumContext.Default, ThrowableItemTagEnumContext.Default, UsableItemTagEnumContext.Default, BoxItemTagEnumContext.Default];
}
public async Task Save<T>(T gameData)
@@ -27,5 +27,5 @@ public sealed class MaSaveFileManager : IMaSaveFileManager
await _saveFileManager.WriteToFile(gameData, [.. _converters]);
}
public async Task<object?> Load() => await _saveFileManager.ReadFromFile([.. _converters]);
public async Task<T?> Load<T>() => await _saveFileManager.ReadFromFile<T>([.. _converters]);
}