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:
@@ -60,12 +60,19 @@ public partial class Game : Node3D, IGame
|
||||
|
||||
public RescuedItemDatabase RescuedItems { get; set; } = default!;
|
||||
|
||||
public QuestData QuestData { get; private set; }
|
||||
|
||||
private EffectService _effectService;
|
||||
|
||||
private IInstantiator _instantiator;
|
||||
private Player _player;
|
||||
private Map _map;
|
||||
|
||||
public Game()
|
||||
{
|
||||
QuestData = new QuestData();
|
||||
}
|
||||
|
||||
public void Setup()
|
||||
{
|
||||
_container = new SimpleInjector.Container();
|
||||
@@ -91,30 +98,24 @@ public partial class Game : Node3D, IGame
|
||||
{
|
||||
var gameData = new GameData()
|
||||
{
|
||||
|
||||
PlayerData = new PlayerData()
|
||||
{
|
||||
Inventory = (Inventory)_player.Inventory,
|
||||
HealthComponent = (HealthComponent)_player.HealthComponent,
|
||||
},
|
||||
MapData = new MapData()
|
||||
{
|
||||
},
|
||||
RescuedItems = new RescuedItemDatabase()
|
||||
{
|
||||
Items = RescuedItems.Items
|
||||
},
|
||||
QuestData = new QuestData()
|
||||
{
|
||||
QuestMarker1 = QuestData.QuestMarker1
|
||||
}
|
||||
};
|
||||
return gameData;
|
||||
},
|
||||
onLoad:
|
||||
(chunk, data) =>
|
||||
{
|
||||
RescuedItems = data.RescuedItems;
|
||||
chunk.LoadChunkSaveData(data.PlayerData);
|
||||
chunk.LoadChunkSaveData(data.MapData);
|
||||
}
|
||||
);
|
||||
{
|
||||
RescuedItems = data.RescuedItems;
|
||||
QuestData = data.QuestData;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public void OnResolved()
|
||||
@@ -127,7 +128,7 @@ public partial class Game : Node3D, IGame
|
||||
{
|
||||
try
|
||||
{
|
||||
var gameData = await saveFileManager.Load() as GameData;
|
||||
var gameData = await saveFileManager.Load<GameData>();
|
||||
return gameData;
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
@@ -200,6 +201,7 @@ public partial class Game : Node3D, IGame
|
||||
{
|
||||
FloorClearMenu.FadeOut();
|
||||
Task.Run(() => _map.LoadFloor());
|
||||
Task.Run(() => Save());
|
||||
if (_player.EquipmentComponent.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||
{
|
||||
var itemToDestroy = _player.EquipmentComponent.EquippedWeapon.Value;
|
||||
@@ -248,6 +250,7 @@ public partial class Game : Node3D, IGame
|
||||
public void OnReady()
|
||||
{
|
||||
InitializeGame();
|
||||
SaveFile.Load();
|
||||
_map.LoadFloor();
|
||||
GameRepo.Resume();
|
||||
InGameUI.Show();
|
||||
@@ -272,6 +275,8 @@ public partial class Game : Node3D, IGame
|
||||
_map.InitializeMapData();
|
||||
}
|
||||
|
||||
public async Task Save() => await SaveFile.Save();
|
||||
|
||||
public void FloorExitReached()
|
||||
{
|
||||
GameState.Input(new GameState.Input.FloorExitEntered());
|
||||
|
||||
@@ -1,43 +1,15 @@
|
||||
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; }
|
||||
|
||||
[Save("quest_data")]
|
||||
public required QuestData QuestData { 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
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ using Chickensoft.AutoInject;
|
||||
using Chickensoft.GodotNodeInterfaces;
|
||||
using Chickensoft.SaveFileBuilder;
|
||||
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
|
||||
@@ -29,4 +28,8 @@ public interface IGame : IProvide<IGame>, IProvide<IGameRepo>, IProvide<IPlayer>
|
||||
public InventoryItem RerollItem(InventoryItem itemToReroll, bool insertIntoInventory = true);
|
||||
|
||||
public void GameOver();
|
||||
|
||||
public Task Save();
|
||||
|
||||
public QuestData QuestData { get; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user