From 286c2215306c199378b5c7b9cace4808b56bc0be Mon Sep 17 00:00:00 2001 From: Zenny Date: Fri, 24 Oct 2025 01:33:18 -0700 Subject: [PATCH] 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 --- .../Save/ISaveFileManager.cs | 4 +- .../Save/SaveFileManager.cs | 43 ++++--- .../Components/IHealthComponent.cs | 3 - .../Entity/ElementalResistanceSet.cs | 5 +- .../Equipment/EquipableItem.cs | 12 +- .../Item/RescuedItemDatabase.cs | 2 - .../JsonConverters/EnumConverters.cs | 23 +--- .../Quest/QuestData.cs | 11 ++ .../Save/MaSaveFileManager.cs | 6 +- .../DungeonFloorLayout.cs | 68 ----------- .../DungeonFloorLayout.cs.uid | 1 - .../DungeonFloorLayoutNode.cs | 22 ---- .../DungeonFloorLayoutNode.cs.uid | 1 - .../addons/dungeon_floor_layout/icon.png | Bin 161 -> 0 bytes .../dungeon_floor_layout/icon.png.import | 34 ------ .../addons/dungeon_floor_layout/plugin.cfg | 7 -- .../SpecialFloorLayout.cs | 25 ---- .../SpecialFloorLayout.cs.uid | 1 - .../SpecialFloorLayoutNode.cs | 23 ---- .../SpecialFloorLayoutNode.cs.uid | 1 - .../addons/special_floor_layout_node/icon.png | Bin 158 -> 0 bytes .../special_floor_layout_node/icon.png.import | 34 ------ .../special_floor_layout_node/plugin.cfg | 7 -- .../src/Components/HealthComponent.cs | 3 - Zennysoft.Game.Ma/src/app/App.cs | 8 +- .../src/data_viewer/DataViewer.tscn | 2 +- Zennysoft.Game.Ma/src/enemy/Enemy.cs | 6 +- Zennysoft.Game.Ma/src/enemy/Enemy2D.cs | 2 +- Zennysoft.Game.Ma/src/enemy/EnemyModelView.cs | 18 ++- .../src/enemy/IEnemyModelView.cs | 2 + .../WalkingStateMachine.tres | 2 +- .../enemy/enemy_types/07. chinthe/Chinthe.cs | 20 +++- .../enemy_types/07. chinthe/Chinthe.tscn | 5 +- ...teModelView.tscn => ChintheModelView.tscn} | 112 ++++++++++-------- .../src/enemy/state/EnemyLogic.cs | 2 +- .../states/EnemyLogic.State.Activated.cs | 13 +- .../state/states/EnemyLogic.State.Alive.cs | 10 -- .../states/EnemyLogic.State.EngagePlayer.cs | 3 +- .../states/EnemyLogic.State.FollowPlayer.cs | 2 +- .../state/states/EnemyLogic.State.Idle.cs | 2 +- .../states/EnemyLogic.State.Patrolling.cs | 2 +- .../states/EnemyLogic.State.Unactivated.cs | 16 +++ Zennysoft.Game.Ma/src/game/Game.cs | 37 +++--- Zennysoft.Game.Ma/src/game/GameData.cs | 34 +----- Zennysoft.Game.Ma/src/game/IGame.cs | 5 +- .../src/item_rescue/ItemRescue.cs | 2 + .../src/items/accessory/Accessory.cs | 1 + Zennysoft.Game.Ma/src/items/armor/Armor.cs | 1 + .../src/items/consumable/ConsumableItem.cs | 7 +- .../src/items/effect/EffectItem.cs | 1 + .../src/items/throwable/ThrowableItem.cs | 7 +- Zennysoft.Game.Ma/src/items/weapons/Weapon.cs | 14 +-- Zennysoft.Game.Ma/src/map/DungeonFloorNode.cs | 45 +++++++ .../src/map/DungeonFloorNode.cs.uid | 1 + Zennysoft.Game.Ma/src/map/FloorNode.cs | 6 + Zennysoft.Game.Ma/src/map/FloorNode.cs.uid | 1 + Zennysoft.Game.Ma/src/map/IMap.cs | 6 +- .../src/map/LayoutToScenePathConverter.cs | 76 ++++++------ Zennysoft.Game.Ma/src/map/LayoutType.cs | 7 -- Zennysoft.Game.Ma/src/map/Map.cs | 18 +-- Zennysoft.Game.Ma/src/map/Map.tscn | 21 ++-- Zennysoft.Game.Ma/src/map/MapInfo.cs | 10 -- Zennysoft.Game.Ma/src/map/SpecialFloorNode.cs | 9 ++ .../src/map/SpecialFloorNode.cs.uid | 1 + Zennysoft.Game.Ma/src/map/SpecialFloorType.cs | 12 ++ .../src/map/dungeon/code/DungeonFloor.cs | 22 +++- .../src/map/dungeon/code/MonsterRoom.cs | 6 +- .../dungeon/floors/SetAFloors/test_floor.tscn | 41 ++++++- .../Special Floors/15. Boss Floor A.tscn | 16 +-- .../Special Floors/34. Boss Floor B.tscn | 7 +- .../rooms/Set A/03. Antechamber A.tscn | 6 +- .../rooms/Set A/04. Tree Antechamber.tscn | 6 +- .../dungeon/rooms/Set A/05. Pit Room A.tscn | 6 +- .../rooms/Set A/06. Balcony Room A.tscn | 6 +- .../Set A/07. CornerBlock Antechamber.tscn | 6 +- .../dungeon/rooms/Set A/08. Basin Room.tscn | 6 +- .../dungeon/rooms/Set A/09. Column Room.tscn | 6 +- .../dungeon/rooms/Set A/11. Long Room.tscn | 6 +- .../dungeon/rooms/Set A/13. Water Room.tscn | 6 +- .../rooms/Set B/20. Antechamber 3.tscn | 6 +- .../dungeon/rooms/Set B/21. Gallery Room.tscn | 6 +- .../dungeon/rooms/Set B/22. Pit Room B.tscn | 6 +- .../rooms/Set B/23. Fountain Antechamber.tscn | 6 +- .../rooms/Set B/24. Balcony Room 2.tscn | 6 +- .../rooms/Set B/25. Pedestal Room.tscn | 6 +- .../dungeon/rooms/Set B/27. Water Room B.tscn | 6 +- .../dungeon/rooms/Set B/28. Long Room B.tscn | 6 +- .../rooms/Set B/29. Column Circle Room.tscn | 6 +- Zennysoft.Game.Ma/src/menu/MainMenu.cs | 25 ++-- Zennysoft.Game.Ma/src/menu/MainMenu.tscn | 14 +-- Zennysoft.Game.Ma/src/player/Player.cs | 26 +--- Zennysoft.Game.Ma/src/quest/QuestTest.cs | 24 ++++ Zennysoft.Game.Ma/src/quest/QuestTest.cs.uid | 1 + 93 files changed, 497 insertions(+), 678 deletions(-) create mode 100644 Zennysoft.Game.Ma.Implementation/Quest/QuestData.cs delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs.uid delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayoutNode.cs delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayoutNode.cs.uid delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/icon.png delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/icon.png.import delete mode 100644 Zennysoft.Game.Ma/addons/dungeon_floor_layout/plugin.cfg delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/SpecialFloorLayout.cs delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/SpecialFloorLayout.cs.uid delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/SpecialFloorLayoutNode.cs delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/SpecialFloorLayoutNode.cs.uid delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/icon.png delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/icon.png.import delete mode 100644 Zennysoft.Game.Ma/addons/special_floor_layout_node/plugin.cfg rename Zennysoft.Game.Ma/src/enemy/enemy_types/07. chinthe/{ChinteModelView.tscn => ChintheModelView.tscn} (97%) create mode 100644 Zennysoft.Game.Ma/src/enemy/state/states/EnemyLogic.State.Unactivated.cs create mode 100644 Zennysoft.Game.Ma/src/map/DungeonFloorNode.cs create mode 100644 Zennysoft.Game.Ma/src/map/DungeonFloorNode.cs.uid create mode 100644 Zennysoft.Game.Ma/src/map/FloorNode.cs create mode 100644 Zennysoft.Game.Ma/src/map/FloorNode.cs.uid delete mode 100644 Zennysoft.Game.Ma/src/map/LayoutType.cs delete mode 100644 Zennysoft.Game.Ma/src/map/MapInfo.cs create mode 100644 Zennysoft.Game.Ma/src/map/SpecialFloorNode.cs create mode 100644 Zennysoft.Game.Ma/src/map/SpecialFloorNode.cs.uid create mode 100644 Zennysoft.Game.Ma/src/map/SpecialFloorType.cs create mode 100644 Zennysoft.Game.Ma/src/quest/QuestTest.cs create mode 100644 Zennysoft.Game.Ma/src/quest/QuestTest.cs.uid diff --git a/Zennysoft.Game.Abstractions/Save/ISaveFileManager.cs b/Zennysoft.Game.Abstractions/Save/ISaveFileManager.cs index a6651487..d193fd65 100644 --- a/Zennysoft.Game.Abstractions/Save/ISaveFileManager.cs +++ b/Zennysoft.Game.Abstractions/Save/ISaveFileManager.cs @@ -8,7 +8,7 @@ public interface ISaveFileManager public Task WriteToFile(T gameData, string filePath, params IJsonTypeInfoResolver?[] resolvers); - public Task ReadFromFile(params IJsonTypeInfoResolver?[] resolvers); + public Task ReadFromFile(params IJsonTypeInfoResolver?[] resolvers); - public Task ReadFromFile(string filePath, params IJsonTypeInfoResolver?[] resolvers); + public Task ReadFromFile(string filePath, params IJsonTypeInfoResolver?[] resolvers); } diff --git a/Zennysoft.Game.Godot.Implementation/Save/SaveFileManager.cs b/Zennysoft.Game.Godot.Implementation/Save/SaveFileManager.cs index 03ea774e..12bd0fc9 100644 --- a/Zennysoft.Game.Godot.Implementation/Save/SaveFileManager.cs +++ b/Zennysoft.Game.Godot.Implementation/Save/SaveFileManager.cs @@ -12,7 +12,6 @@ namespace Zennysoft.Game.Implementation; public class SaveFileManager : ISaveFileManager { private readonly IFileSystem _fileSystem; - private readonly JsonSerializerOptions _jsonOptions; private string _defaultSaveLocation; public const string DEFAULT_SAVE_FILE_NAME = "game.json"; @@ -23,27 +22,17 @@ public class SaveFileManager : ISaveFileManager GodotSerialization.Setup(); Serializer.AddConverter(new Texture2DConverter()); - - var upgradeDependencies = new Blackboard(); - - _jsonOptions = new JsonSerializerOptions - { - Converters = { - new SerializableTypeConverter(upgradeDependencies) - }, - WriteIndented = true - }; } - public Task ReadFromFile(params IJsonTypeInfoResolver?[] resolvers) + public Task ReadFromFile(params IJsonTypeInfoResolver?[] resolvers) { if (!_fileSystem.File.Exists(_defaultSaveLocation)) throw new FileNotFoundException(); - return ReadFromFile(_defaultSaveLocation, resolvers); + return ReadFromFile(_defaultSaveLocation, resolvers); } - public async Task ReadFromFile(string filePath, params IJsonTypeInfoResolver?[] resolvers) + public async Task ReadFromFile(string filePath, params IJsonTypeInfoResolver?[] resolvers) { if (!_fileSystem.File.Exists(filePath)) throw new FileNotFoundException(); @@ -51,8 +40,17 @@ public class SaveFileManager : ISaveFileManager var json = await _fileSystem.File.ReadAllTextAsync(filePath); var resolver = new SerializableTypeResolver(); - _jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]); - return JsonSerializer.Deserialize(json, _jsonOptions); + var upgradeDependencies = new Blackboard(); + + var jsonOptions = new JsonSerializerOptions + { + Converters = { + new SerializableTypeConverter(upgradeDependencies) + }, + WriteIndented = true + }; + jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]); + return JsonSerializer.Deserialize(json, jsonOptions); } public Task WriteToFile(T gameData, params IJsonTypeInfoResolver?[] resolvers) @@ -63,8 +61,17 @@ public class SaveFileManager : ISaveFileManager public async Task WriteToFile(T gameData, string filePath, params IJsonTypeInfoResolver?[] resolvers) { var resolver = new SerializableTypeResolver(); - _jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]); - var json = JsonSerializer.Serialize(gameData, _jsonOptions); + var upgradeDependencies = new Blackboard(); + + var jsonOptions = new JsonSerializerOptions + { + Converters = { + new SerializableTypeConverter(upgradeDependencies) + }, + WriteIndented = true + }; + jsonOptions.TypeInfoResolver = JsonTypeInfoResolver.Combine([resolver, .. resolvers]); + var json = JsonSerializer.Serialize(gameData, jsonOptions); await _fileSystem.File.WriteAllTextAsync(filePath, json); } } diff --git a/Zennysoft.Game.Ma.Implementation/Components/IHealthComponent.cs b/Zennysoft.Game.Ma.Implementation/Components/IHealthComponent.cs index fa1f2e5b..b202ad2b 100644 --- a/Zennysoft.Game.Ma.Implementation/Components/IHealthComponent.cs +++ b/Zennysoft.Game.Ma.Implementation/Components/IHealthComponent.cs @@ -1,14 +1,11 @@ using Chickensoft.Collections; -using Chickensoft.Serialization; namespace Zennysoft.Ma.Adapter; public interface IHealthComponent { - [Save("current_hp")] public IAutoProp CurrentHP { get; } - [Save("maximum_hp")] public IAutoProp MaximumHP { get; } public event Action? HealthReachedZero; diff --git a/Zennysoft.Game.Ma.Implementation/Entity/ElementalResistanceSet.cs b/Zennysoft.Game.Ma.Implementation/Entity/ElementalResistanceSet.cs index 6a076275..fa497dab 100644 --- a/Zennysoft.Game.Ma.Implementation/Entity/ElementalResistanceSet.cs +++ b/Zennysoft.Game.Ma.Implementation/Entity/ElementalResistanceSet.cs @@ -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 ElementalResistance { get; } public static ElementalResistanceSet None => new ElementalResistanceSet(0, 0, 0, 0, 0); diff --git a/Zennysoft.Game.Ma.Implementation/Equipment/EquipableItem.cs b/Zennysoft.Game.Ma.Implementation/Equipment/EquipableItem.cs index a97cb8d4..a4d9bf26 100644 --- a/Zennysoft.Game.Ma.Implementation/Equipment/EquipableItem.cs +++ b/Zennysoft.Game.Ma.Implementation/Equipment/EquipableItem.cs @@ -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); } diff --git a/Zennysoft.Game.Ma.Implementation/Item/RescuedItemDatabase.cs b/Zennysoft.Game.Ma.Implementation/Item/RescuedItemDatabase.cs index 4967ab36..17864dae 100644 --- a/Zennysoft.Game.Ma.Implementation/Item/RescuedItemDatabase.cs +++ b/Zennysoft.Game.Ma.Implementation/Item/RescuedItemDatabase.cs @@ -1,7 +1,5 @@ using Chickensoft.Introspection; using Chickensoft.Serialization; -using Zennysoft.Game.Abstractions; -using Zennysoft.Game.Implementation; namespace Zennysoft.Ma.Adapter; diff --git a/Zennysoft.Game.Ma.Implementation/JsonConverters/EnumConverters.cs b/Zennysoft.Game.Ma.Implementation/JsonConverters/EnumConverters.cs index 251f2e40..5732f1d9 100644 --- a/Zennysoft.Game.Ma.Implementation/JsonConverters/EnumConverters.cs +++ b/Zennysoft.Game.Ma.Implementation/JsonConverters/EnumConverters.cs @@ -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; \ No newline at end of file +public partial class ElementTypeEnumContext : JsonSerializerContext; \ No newline at end of file diff --git a/Zennysoft.Game.Ma.Implementation/Quest/QuestData.cs b/Zennysoft.Game.Ma.Implementation/Quest/QuestData.cs new file mode 100644 index 00000000..b139076b --- /dev/null +++ b/Zennysoft.Game.Ma.Implementation/Quest/QuestData.cs @@ -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; +} diff --git a/Zennysoft.Game.Ma.Implementation/Save/MaSaveFileManager.cs b/Zennysoft.Game.Ma.Implementation/Save/MaSaveFileManager.cs index df7af0d8..71e33a25 100644 --- a/Zennysoft.Game.Ma.Implementation/Save/MaSaveFileManager.cs +++ b/Zennysoft.Game.Ma.Implementation/Save/MaSaveFileManager.cs @@ -8,7 +8,7 @@ public interface IMaSaveFileManager { Task Save(T gameData); - Task Load(); + Task Load(); } 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 gameData) @@ -27,5 +27,5 @@ public sealed class MaSaveFileManager : IMaSaveFileManager await _saveFileManager.WriteToFile(gameData, [.. _converters]); } - public async Task Load() => await _saveFileManager.ReadFromFile([.. _converters]); + public async Task Load() => await _saveFileManager.ReadFromFile([.. _converters]); } diff --git a/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs b/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs deleted file mode 100644 index 32727212..00000000 --- a/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs +++ /dev/null @@ -1,68 +0,0 @@ -using Godot; -using Godot.Collections; -using System.Linq; -using Zennysoft.Game.Ma; - -[Tool] -public partial class DungeonFloorLayout : LayoutType -{ - [Export] - public DungeonFloorSetType SetType - { - get => _setType; - set - { - _setType = value; - LayoutWithSpawnRate = []; - NotifyPropertyListChanged(); - } - } - - [ExportToolButton("Populate Map Data")] - public Callable PopulateMapList => Callable.From(() => PopulateDictionary(SetType)); - - [Export] - public Dictionary LayoutWithSpawnRate; - - [Export] - public Dictionary EnemySpawnRates; - - private string _floorPath = "res://src/map/dungeon/floors/"; - private DungeonFloorSetType _setType; - - private void PopulateDictionary(DungeonFloorSetType setType) - { - var floorPath = _floorPath; - var floorType = string.Empty; - if (setType == DungeonFloorSetType.SetA) - floorType = "SetAFloors"; - else if (setType == DungeonFloorSetType.SetB) - floorType = "SetBFloors"; - - var pathToScenes = $"{floorPath}/{floorType}"; - - var files = DirAccess.GetFilesAt(pathToScenes).Where(x => x.EndsWith(".tscn")); - - var newMaps = new Dictionary(); - foreach (var file in files) - { - if (LayoutWithSpawnRate.ContainsKey($"{floorType}/{file}")) - { - var spawnRate = LayoutWithSpawnRate.TryGetValue($"{floorType}/{file}", out var currentSpawnRate); - newMaps.Add($"{floorType}/{file}", currentSpawnRate); - } - else - newMaps.Add($"{floorType}/{file}", 1.0f); - } - - LayoutWithSpawnRate = newMaps; - - NotifyPropertyListChanged(); - } - - public enum DungeonFloorSetType - { - SetA, - SetB - } -} diff --git a/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs.uid b/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs.uid deleted file mode 100644 index d70e47ef..00000000 --- a/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayout.cs.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ci7o3nn4mdo8o diff --git a/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayoutNode.cs b/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayoutNode.cs deleted file mode 100644 index 82849e80..00000000 --- a/Zennysoft.Game.Ma/addons/dungeon_floor_layout/DungeonFloorLayoutNode.cs +++ /dev/null @@ -1,22 +0,0 @@ -#if TOOLS -using Godot; -using Zennysoft.Game.Ma; - -[Tool] -public partial class DungeonFloorLayoutNode : EditorPlugin -{ - public override void _EnterTree() - { - // Initialization of the plugin goes here. - var script = GD.Load