Mystery item implementation
This commit is contained in:
@@ -179,7 +179,28 @@ public partial class Game : Node3D, IGame
|
||||
})
|
||||
.Handle((in GameLogic.Output.HidePauseMenu _) => { PauseMenu.Hide(); })
|
||||
.Handle((in GameLogic.Output.ExitPauseMenu _) => { PauseMenu.FadeOut(); Input.MouseMode = Input.MouseModeEnum.Visible; PauseMenu.SetProcessUnhandledInput(false); })
|
||||
.Handle((in GameLogic.Output.LoadNextFloor _) => { Map.SpawnNextFloor(); })
|
||||
.Handle((in GameLogic.Output.LoadNextFloor _) =>
|
||||
{
|
||||
Map.SpawnNextFloor();
|
||||
if (Player.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||
{
|
||||
var itemToDestroy = Player.EquippedWeapon.Value;
|
||||
Player.Unequip(itemToDestroy);
|
||||
Player.Inventory.Remove(itemToDestroy);
|
||||
}
|
||||
if (Player.EquippedArmor.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||
{
|
||||
var itemToDestroy = Player.EquippedArmor.Value;
|
||||
Player.Unequip(itemToDestroy);
|
||||
Player.Inventory.Remove(itemToDestroy);
|
||||
}
|
||||
if (Player.EquippedAccessory.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||
{
|
||||
var itemToDestroy = Player.EquippedAccessory.Value;
|
||||
Player.Unequip(itemToDestroy);
|
||||
Player.Inventory.Remove(itemToDestroy);
|
||||
}
|
||||
})
|
||||
.Handle((in GameLogic.Output.LoadMap _) => { Map.LoadMap(); })
|
||||
.Handle((in GameLogic.Output.ShowFloorClearMenu _) => { FloorClearMenu.Show(); FloorClearMenu.FadeIn(); })
|
||||
.Handle((in GameLogic.Output.ExitFloorClearMenu _) => { FloorClearMenu.FadeOut(); })
|
||||
@@ -211,7 +232,7 @@ public partial class Game : Node3D, IGame
|
||||
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
|
||||
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
|
||||
|
||||
GameEventDepot.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
||||
GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
||||
|
||||
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
|
||||
|
||||
@@ -236,6 +257,9 @@ public partial class Game : Node3D, IGame
|
||||
|
||||
public async Task UseItem(InventoryItem item)
|
||||
{
|
||||
if (item.ItemTag == ItemTag.MysteryItem)
|
||||
item = RerollItem(item);
|
||||
|
||||
switch (item)
|
||||
{
|
||||
case ConsumableItem consumableItem:
|
||||
@@ -267,7 +291,7 @@ public partial class Game : Node3D, IGame
|
||||
{
|
||||
var thrownScene = GD.Load<PackedScene>("res://src/items/thrown/ThrownItem.tscn");
|
||||
var thrown = thrownScene.Instantiate<ThrownItem>();
|
||||
thrown.ItemThatIsThrown = (InventoryItem)item;
|
||||
thrown.ItemThatIsThrown = item;
|
||||
AddChild(thrown);
|
||||
thrown.Position += new Vector3(0, 1.5f, 0);
|
||||
thrown.Throw(_effectService);
|
||||
@@ -275,7 +299,37 @@ public partial class Game : Node3D, IGame
|
||||
|
||||
public IDungeonFloor CurrentFloor => Map.CurrentFloor;
|
||||
|
||||
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource) => Player.GainExp(resource.ExpFromDefeat * GameRepo.ExpRate);
|
||||
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource)
|
||||
{
|
||||
Player.GainExp(resource.ExpFromDefeat * GameRepo.ExpRate);
|
||||
DropRestorative(defeatedLocation);
|
||||
}
|
||||
|
||||
public InventoryItem RerollItem(InventoryItem itemToReroll)
|
||||
{
|
||||
var itemDb = new ItemDatabase();
|
||||
|
||||
var currentIndex = Player.Inventory.Items.IndexOf(itemToReroll);
|
||||
Player.Inventory.Remove(itemToReroll);
|
||||
InventoryItem rolledItem = null;
|
||||
|
||||
if (itemToReroll is Weapon weapon)
|
||||
rolledItem = itemDb.PickItem(weapon);
|
||||
if (itemToReroll is Armor armor)
|
||||
rolledItem = itemDb.PickItem(armor);
|
||||
if (itemToReroll is Accessory accessory)
|
||||
rolledItem = itemDb.PickItem(accessory);
|
||||
if (itemToReroll is ThrowableItem throwableItem)
|
||||
rolledItem = itemDb.PickItem(throwableItem);
|
||||
if (itemToReroll is EffectItem effectItem)
|
||||
rolledItem = itemDb.PickItem(effectItem);
|
||||
if (itemToReroll is ConsumableItem consumableItem)
|
||||
rolledItem = itemDb.PickItem(consumableItem);
|
||||
|
||||
Player.Inventory.TryInsert(rolledItem, currentIndex);
|
||||
|
||||
return rolledItem;
|
||||
}
|
||||
|
||||
private void DropRestorative(Vector3 vector)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user