Change affinity

This commit is contained in:
2025-01-19 12:59:24 -08:00
parent f3a51de28a
commit 4910ff7770
20 changed files with 272 additions and 89 deletions

View File

@@ -4,8 +4,10 @@ namespace GameJamDungeon;
using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using Chickensoft.SaveFileBuilder;
using GameJamDungeon.src.item_rescue;
using Godot;
using System;
public interface IGame : IProvide<IGameRepo>, IProvide<IGameEventDepot>, IProvide<IGame>, INode3D
{
@@ -24,6 +26,8 @@ public interface IGame : IProvide<IGameRepo>, IProvide<IGameEventDepot>, IProvid
public void HealVT(int amountToRaise);
public void RaiseVT(int amountToRaise);
public void DoubleEXP(TimeSpan lengthOfEffect);
}
[Meta(typeof(IAutoNode))]
@@ -66,6 +70,8 @@ public partial class Game : Node3D, IGame
[Node] public IPauseMenu PauseMenu { get; set; } = default!;
[Node] public InGameAudio InGameAudio { get; set; } = default!;
[Node] public Timer DoubleEXPTimer { get; set; } = default!;
#endregion
public RescuedItemDatabase RescuedItems { get; set; } = default!;
@@ -138,7 +144,7 @@ public partial class Game : Node3D, IGame
GameRepo.PlayerData.Inventory.PickedUpItem += Inventory_PickedUpItem;
GameRepo.PlayerData.Inventory.RaiseStatRequest += Inventory_RaiseStatRequest;
FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor;
FloorClearMenu.ReturnToHubWorld += ReturnToHubWorld;
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
Player.InventoryButtonPressed += Player_InventoryButtonPressed;
@@ -147,11 +153,13 @@ public partial class Game : Node3D, IGame
GameEventDepot.EnemyDefeated += OnEnemyDefeated;
GameEventDepot.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
}
private void Inventory_PickedUpItem(string pickedUpItemName)
{
InGameUI.PlayerInfoUI.DisplayPickedUpMessage(pickedUpItemName);
InGameUI.PlayerInfoUI.DisplayMessage($"{pickedUpItemName} picked up.");
}
public void DropItem(IInventoryItem item)
@@ -174,7 +182,7 @@ public partial class Game : Node3D, IGame
private void OnEnemyDefeated(Vector3 vector, EnemyStatResource resource)
{
GameRepo.PlayerData.SetCurrentExp(GameRepo.PlayerData.CurrentExp.Value + resource.ExpFromDefeat);
GameRepo.PlayerData.SetCurrentExp(GameRepo.PlayerData.CurrentExp.Value + (resource.ExpFromDefeat * GameRepo.EXPRate));
DropRestorative(vector);
}
@@ -234,15 +242,15 @@ public partial class Game : Node3D, IGame
GameLogic.Input(new GameLogic.Input.GoToNextFloor());
}
private void ReturnToHubWorld()
private void FloorClearMenu_SaveAndExit()
{
// Implement a return to overworld state
// Don't carry over stats/equipment but we'll need to persist the overworld state
// Which may include rescued items and npc/questline state
// Save
GameLogic.Input(new GameLogic.Input.HideFloorClearMenu());
GameLogic.Input(new GameLogic.Input.SaveGame());
}
private void GameEventDepot_RestorativePickedUp(Restorative obj) => GameRepo.PlayerData.SetCurrentVT(GameRepo.PlayerData.CurrentVT.Value + obj.VTRestoreAmount);
private void GameEventDepot_RestorativePickedUp(Restorative obj)
=> GameRepo.PlayerData.SetCurrentVT(GameRepo.PlayerData.CurrentVT.Value + obj.VTRestoreAmount);
private void Inventory_RaiseStatRequest(InventoryItemStats itemStats)
{
@@ -290,12 +298,25 @@ public partial class Game : Node3D, IGame
EmitSignal(SignalName.StatRaisedAlert, $"{raiseString}VT Restored.");
}
private void PlayerInventory_InventoryAtCapacity(string rejectedItem)
public async void DoubleEXP(TimeSpan lengthOfEffect)
{
InGameUI.PlayerInfoUI.DisplayInventoryFullMessage(rejectedItem);
InventoryMenu_CloseInventory();
InGameUI.PlayerInfoUI.DisplayMessage("Experience points temporarily doubled.");
DoubleEXPTimer.Start(lengthOfEffect.Seconds);
GameRepo.EXPRate = 2;
}
private void OnInventoryAtCapacity(string rejectedItemName) => InGameUI.PlayerInfoUI.DisplayInventoryFullMessage(rejectedItemName);
private void DoubleEXPTimer_Timeout()
{
DoubleEXPTimer.Stop();
GameRepo.EXPRate = 1;
InGameUI.PlayerInfoUI.DisplayMessage("Experience points effect wore off.");
}
private void PlayerInventory_InventoryAtCapacity(string rejectedItem)
{
InGameUI.PlayerInfoUI.DisplayMessage($"Could not pick up {rejectedItem}.");
}
private void InventoryMenu_CloseInventory() => GameLogic.Input(new GameLogic.Input.CloseInventory());