Add unlock conditions for gallery

This commit is contained in:
2026-06-08 16:00:27 -07:00
parent 9b2e79dbd2
commit 5665e3306c
11 changed files with 268 additions and 70 deletions
+48 -1
View File
@@ -93,6 +93,9 @@ public partial class Game : Node3D, IGame
public event Action<string> InventoryEventNotification;
public event Action<string> UnlockGalleryItem;
public Game()
{
_container = new SimpleInjector.Container();
@@ -105,6 +108,7 @@ public partial class Game : Node3D, IGame
RescuedItems = new RescuedItemDatabase(20);
SarcoData = new SarcoData();
NpcData = new NpcData() { SteleDiscovered = [] };
StatData = new StatData();
ItemDatabase = ItemDatabase.Instance;
GameChunk = new SaveChunk<GameData>(
@@ -150,7 +154,7 @@ public partial class Game : Node3D, IGame
}
);
var saveFileManager = new MaSaveFileManager();
var saveFileManager = new MaSaveFileManager($"{OS.GetUserDataDir()}/game.json");
SaveFile = new SaveFile<GameData>(
root: GameChunk,
onSave: saveFileManager.Save,
@@ -956,6 +960,49 @@ public partial class Game : Node3D, IGame
public void NotifyInventory(string message) => InventoryEventNotification?.Invoke(message);
public async Task IncrementEnemyDefeatedCount(string enemyName)
{
if (StatData.EnemiesDefeated.ContainsKey(enemyName))
StatData.EnemiesDefeated[enemyName]++;
else
StatData.EnemiesDefeated.TryAdd(enemyName, 1);
if (StatData.EnemiesDefeated[enemyName] == 50)
UnlockGalleryItem.Invoke(enemyName + "Fifty");
if (StatData.EnemiesDefeated[enemyName] == 100)
UnlockGalleryItem.Invoke(enemyName + "Hundred");
await Save();
}
public async Task IncrementSteleCount(int steleId)
{
if (!NpcData.SteleDiscovered.Contains(steleId))
{
NpcData.SteleDiscovered.Add(steleId);
if (NpcData.SteleDiscovered.Count == 10)
UnlockGalleryItem.Invoke("StelesTen");
await Save();
}
}
public async Task OnReachNormalEnd()
{
UnlockGalleryItem.Invoke("NormalEnd");
}
public async Task OnReachBadEnd()
{
UnlockGalleryItem.Invoke("BadEnd");
}
public async Task OnReachTrueEnd()
{
UnlockGalleryItem.Invoke("TrueEnd");
}
private void OnQuit() => GameExitRequested?.Invoke();
private void GameOverMenuAppeared() => _map.ClearFloor();
+12
View File
@@ -42,6 +42,16 @@ public interface IGame : IProvide<IGame>, IProvide<IGameRepo>, IProvide<IPlayer>
public void NotifyInventory(string message);
public Task IncrementEnemyDefeatedCount(string enemyName);
public Task IncrementSteleCount(int steleId);
public Task OnReachNormalEnd();
public Task OnReachBadEnd();
public Task OnReachTrueEnd();
public ItemRescueMenu ItemRescueMenu { get; }
public QuestData QuestData { get; }
@@ -57,4 +67,6 @@ public interface IGame : IProvide<IGame>, IProvide<IGameRepo>, IProvide<IPlayer>
public event Action GameLoaded;
public event Action<string> InventoryEventNotification;
public event Action<string> UnlockGalleryItem;
}