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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
using Chickensoft.Introspection;
|
||||
using Chickensoft.Serialization;
|
||||
using Zennysoft.Game.Abstractions;
|
||||
using Zennysoft.Game.Implementation;
|
||||
|
||||
namespace Zennysoft.Ma.Adapter;
|
||||
|
||||
|
||||
@@ -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;
|
||||
11
Zennysoft.Game.Ma.Implementation/Quest/QuestData.cs
Normal file
11
Zennysoft.Game.Ma.Implementation/Quest/QuestData.cs
Normal 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;
|
||||
}
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user