diff --git a/Zennysoft.Game.Ma/src/game/Game.cs b/Zennysoft.Game.Ma/src/game/Game.cs index e0b84df1..b1e41094 100644 --- a/Zennysoft.Game.Ma/src/game/Game.cs +++ b/Zennysoft.Game.Ma/src/game/Game.cs @@ -74,202 +74,202 @@ public partial class Game : Node3D, IGame public void Setup() { - _container = new SimpleInjector.Container(); - Module.Bootstrap(_container); + _container = new SimpleInjector.Container(); + Module.Bootstrap(_container); - GameRepo = _container.GetInstance(); - GameState = _container.GetInstance(); - GameState.Set(GameRepo); - GameState.Set(AppRepo); - GameState.Set(Player); - GameState.Set(Map); - GameState.Set(InGameUI); - Instantiator = new Instantiator(GetTree()); - RescuedItems = new RescuedItemDatabase(); + GameRepo = _container.GetInstance(); + GameState = _container.GetInstance(); + GameState.Set(GameRepo); + GameState.Set(AppRepo); + GameState.Set(Player); + GameState.Set(Map); + GameState.Set(InGameUI); + Instantiator = new Instantiator(GetTree()); + RescuedItems = new RescuedItemDatabase(); - GameChunk = new SaveChunk( - (chunk) => - { - var gameData = new GameData() - { + GameChunk = new SaveChunk( + (chunk) => + { + var gameData = new GameData() + { - PlayerData = new PlayerData() - { - PlayerStats = Player.Stats, - Inventory = Player.Inventory - }, - MapData = new MapData() - { - FloorScenes = Map.FloorScenes - }, - RescuedItems = new RescuedItemDatabase() - { - Items = RescuedItems.Items - } - }; - return gameData; - }, - onLoad: - (chunk, data) => - { - RescuedItems = data.RescuedItems; - chunk.LoadChunkSaveData(data.PlayerData); - chunk.LoadChunkSaveData(data.MapData); - } - ); + PlayerData = new PlayerData() + { + PlayerStats = Player.Stats, + Inventory = Player.Inventory + }, + MapData = new MapData() + { + FloorScenes = Map.FloorScenes + }, + RescuedItems = new RescuedItemDatabase() + { + Items = RescuedItems.Items + } + }; + return gameData; + }, + onLoad: + (chunk, data) => + { + RescuedItems = data.RescuedItems; + chunk.LoadChunkSaveData(data.PlayerData); + chunk.LoadChunkSaveData(data.MapData); + } + ); } public void OnResolved() { - var saveFileManager = _container.GetInstance>(); - SaveFile = new SaveFile( - root: GameChunk, - onSave: saveFileManager.Save, - onLoad: async () => - { - try - { - var gameData = await saveFileManager.Load(); - return gameData; - } - catch (FileNotFoundException) - { - GD.Print("No save file found."); - } + var saveFileManager = _container.GetInstance>(); + SaveFile = new SaveFile( + root: GameChunk, + onSave: saveFileManager.Save, + onLoad: async () => + { + try + { + var gameData = await saveFileManager.Load(); + return gameData; + } + catch (FileNotFoundException) + { + GD.Print("No save file found."); + } - return null; - } - ); + return null; + } + ); - GameBinding = GameState.Bind(); - GameBinding - .Handle((in GameState.Output.InitializeGame _) => - { - InitializeGame(); - Map.LoadMap(); - GameRepo.Resume(); - InGameUI.Show(); - InGameUI.PlayerInfoUI.Activate(); - Player.TeleportPlayer(Map.CurrentFloor.GetPlayerSpawnPoint()); - Player.Activate(); - Autoload.BgmPlayer.Play(BackgroundMusic.CrossingTheGate); - }) - .Handle((in GameState.Output.LoadGameFromFile _) => - { - LoadExistingGame(); - }) - .Handle((in GameState.Output.OpenPauseScreen _) => - { - GameRepo.Pause(); - PauseMenu.Show(); - PauseMenu.FadeIn(); - Input.MouseMode = Input.MouseModeEnum.Visible; - PauseMenu.SetProcessUnhandledInput(true); - }) - .Handle((in GameState.Output.ClosePauseScreen _) => - { - PauseMenu.FadeOut(); - Input.MouseMode = Input.MouseModeEnum.Visible; - PauseMenu.SetProcessUnhandledInput(false); - GameRepo.Resume(); - }) - .Handle((in GameState.Output.OpenInventoryMenu _) => - { - InGameUI.InventoryMenu.RefreshInventoryScreen(); - InGameUI.InventoryMenu.Show(); - InGameUI.InventoryMenu.SetProcessInput(true); - }) - .Handle((in GameState.Output.CloseInventoryMenu _) => - { - InGameUI.InventoryMenu.Hide(); - InGameUI.InventoryMenu.SetProcessInput(false); - }) - .Handle((in GameState.Output.OpenDebugMenu _) => - { - InGameUI.DebugMenu.Show(); - InGameUI.PlayerInfoUI.Hide(); - GameRepo.Pause(); - }) - .Handle((in GameState.Output.CloseDebugMenu _) => - { - InGameUI.DebugMenu.Hide(); - InGameUI.PlayerInfoUI.Show(); - GameRepo.Resume(); - }) - .Handle((in GameState.Output.OpenTeleportScreen _) => - { - InGameUI.UseTeleportPrompt.Show(); - InGameUI.UseTeleportPrompt.FadeIn(); - }) - .Handle((in GameState.Output.OpenFloorExitScreen _) => - { - InGameUI.UseTeleportPrompt.FadeOut(); - FloorClearMenu.Show(); - FloorClearMenu.FadeIn(); - }) - .Handle((in GameState.Output.LoadNextFloor _) => - { - FloorClearMenu.FadeOut(); - 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); - } - FloorClearMenu.FadeOut(); - }) - .Handle((in GameState.Output.GameOver _) => - { - GameRepo.Pause(); - DeathMenu.FadeIn(); - }); + GameBinding = GameState.Bind(); + GameBinding + .Handle((in GameState.Output.InitializeGame _) => + { + InitializeGame(); + Map.LoadMap(); + GameRepo.Resume(); + InGameUI.Show(); + InGameUI.PlayerInfoUI.Activate(); + Player.TeleportPlayer(Map.CurrentFloor.GetPlayerSpawnPoint()); + Player.Activate(); + Autoload.BgmPlayer.Play(BackgroundMusic.CrossingTheGate); + }) + .Handle((in GameState.Output.LoadGameFromFile _) => + { + LoadExistingGame(); + }) + .Handle((in GameState.Output.OpenPauseScreen _) => + { + GameRepo.Pause(); + PauseMenu.Show(); + PauseMenu.FadeIn(); + Input.MouseMode = Input.MouseModeEnum.Visible; + PauseMenu.SetProcessUnhandledInput(true); + }) + .Handle((in GameState.Output.ClosePauseScreen _) => + { + PauseMenu.FadeOut(); + Input.MouseMode = Input.MouseModeEnum.Visible; + PauseMenu.SetProcessUnhandledInput(false); + GameRepo.Resume(); + }) + .Handle((in GameState.Output.OpenInventoryMenu _) => + { + InGameUI.InventoryMenu.RefreshInventoryScreen(); + InGameUI.InventoryMenu.Show(); + InGameUI.InventoryMenu.SetProcessInput(true); + }) + .Handle((in GameState.Output.CloseInventoryMenu _) => + { + InGameUI.InventoryMenu.Hide(); + InGameUI.InventoryMenu.SetProcessInput(false); + }) + .Handle((in GameState.Output.OpenDebugMenu _) => + { + InGameUI.DebugMenu.Show(); + InGameUI.PlayerInfoUI.Hide(); + GameRepo.Pause(); + }) + .Handle((in GameState.Output.CloseDebugMenu _) => + { + InGameUI.DebugMenu.Hide(); + InGameUI.PlayerInfoUI.Show(); + GameRepo.Resume(); + }) + .Handle((in GameState.Output.OpenTeleportScreen _) => + { + InGameUI.UseTeleportPrompt.Show(); + InGameUI.UseTeleportPrompt.FadeIn(); + }) + .Handle((in GameState.Output.OpenFloorExitScreen _) => + { + InGameUI.UseTeleportPrompt.FadeOut(); + FloorClearMenu.Show(); + FloorClearMenu.FadeIn(); + }) + .Handle((in GameState.Output.LoadNextFloor _) => + { + FloorClearMenu.FadeOut(); + 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); + } + FloorClearMenu.FadeOut(); + }) + .Handle((in GameState.Output.GameOver _) => + { + GameRepo.Pause(); + DeathMenu.FadeIn(); + }); - GameState.Start(); - this.Provide(); - InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor; - InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt; - FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor; - FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit; - FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted; + GameState.Start(); + this.Provide(); + InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor; + InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt; + FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor; + FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit; + FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted; - GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp; + GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp; - DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout; + DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout; - MainMenu.NewGame += OnNewGame; - MainMenu.LoadGame += OnLoadGame; - MainMenu.Quit += OnQuit; + MainMenu.NewGame += OnNewGame; + MainMenu.LoadGame += OnLoadGame; + MainMenu.Quit += OnQuit; - DeathMenu.NewGame += OnContinueGame; - DeathMenu.QuitGame += OnQuit; + DeathMenu.NewGame += OnContinueGame; + DeathMenu.QuitGame += OnQuit; - GameRepo.IsPaused.Sync += IsPaused_Sync; + GameRepo.IsPaused.Sync += IsPaused_Sync; - _effectService = new EffectService(this, Player, Map); + _effectService = new EffectService(this, Player, Map); - MainMenu.Show(); + MainMenu.Show(); } private void FloorClearMenu_SaveAndExit() { - //SaveFile.Save(); - Player.Deactivate(); - GameState.Input(new GameState.Input.ReturnToMainMenu()); - InGameUI.Hide(); - MainMenu.FadeIn(); + //SaveFile.Save(); + Player.Deactivate(); + GameState.Input(new GameState.Input.ReturnToMainMenu()); + InGameUI.Hide(); + MainMenu.FadeIn(); } private void FloorClearMenu_GoToNextFloor() => GameState.Input(new GameState.Input.LoadNextFloor()); @@ -277,126 +277,126 @@ public partial class Game : Node3D, IGame public void InitializeGame() { - Map.InitializeMapData(); - Player.InitializePlayerState(); + Map.InitializeMapData(); + Player.InitializePlayerState(); } public void FloorExitReached() { - GameState.Input(new GameState.Input.FloorExitEntered()); + GameState.Input(new GameState.Input.FloorExitEntered()); } public async Task UseItem(InventoryItem item) { - if (item.ItemTag == ItemTag.MysteryItem) - item = RerollItem(item); + if (item.ItemTag == ItemTag.MysteryItem) + item = RerollItem(item); - switch (item) - { - case ConsumableItem consumableItem: - EnactConsumableItemEffects(consumableItem); - break; - case EffectItem effectItem: - EnactEffectItemEffects(effectItem); - break; - case ThrowableItem throwableItem: - EnactThrowableItemEffects(throwableItem); - break; - } + switch (item) + { + case ConsumableItem consumableItem: + EnactConsumableItemEffects(consumableItem); + break; + case EffectItem effectItem: + EnactEffectItemEffects(effectItem); + break; + case ThrowableItem throwableItem: + EnactThrowableItemEffects(throwableItem); + break; + } - await ToSignal(GetTree().CreateTimer(0.3f), "timeout"); + await ToSignal(GetTree().CreateTimer(0.3f), "timeout"); - RemoveItemOrSubtractFromItemCount(item); + RemoveItemOrSubtractFromItemCount(item); } public void DropItem(InventoryItem item) { - var droppedScene = GD.Load("res://src/items/dropped/DroppedItem.tscn"); - var dropped = droppedScene.Instantiate(); - dropped.Item = item; - AddChild(dropped); - dropped.Drop(); + var droppedScene = GD.Load("res://src/items/dropped/DroppedItem.tscn"); + var dropped = droppedScene.Instantiate(); + dropped.Item = item; + AddChild(dropped); + dropped.Drop(); } public void ThrowItem(InventoryItem item) { - var thrownScene = GD.Load("res://src/items/thrown/ThrownItem.tscn"); - var thrown = thrownScene.Instantiate(); - thrown.ItemThatIsThrown = item; - AddChild(thrown); - thrown.Position += new Vector3(0, 1.5f, 0); - thrown.Throw(_effectService); + var thrownScene = GD.Load("res://src/items/thrown/ThrownItem.tscn"); + var thrown = thrownScene.Instantiate(); + thrown.ItemThatIsThrown = item; + AddChild(thrown); + thrown.Position += new Vector3(0, 1.5f, 0); + thrown.Throw(_effectService); } public IDungeonFloor CurrentFloor => Map.CurrentFloor; public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource) { - Player.GainExp(resource.ExpFromDefeat * GameRepo.ExpRate); - DropRestorative(defeatedLocation); + Player.GainExp(resource.ExpFromDefeat * GameRepo.ExpRate); + DropRestorative(defeatedLocation); } public InventoryItem RerollItem(InventoryItem itemToReroll, bool insertIntoInventory = true) { - var itemDb = new ItemDatabase(); + var itemDb = new ItemDatabase(); - var currentIndex = Player.Inventory.Items.IndexOf(itemToReroll); + var currentIndex = Player.Inventory.Items.IndexOf(itemToReroll); - if (insertIntoInventory) - Player.Inventory.Remove(itemToReroll); + if (insertIntoInventory) + Player.Inventory.Remove(itemToReroll); - InventoryItem rolledItem = null; + 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); + 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); - if (insertIntoInventory) - Player.Inventory.TryInsert(rolledItem, currentIndex); + if (insertIntoInventory) + Player.Inventory.TryInsert(rolledItem, currentIndex); - return rolledItem; + return rolledItem; } public void GameOver() { - GameState.Input(new GameState.Input.GameOver()); + GameState.Input(new GameState.Input.GameOver()); } public override void _Input(InputEvent @event) { - if (@event.IsActionPressed(GameInputs.Debug)) - GameState.Input(new GameState.Input.DebugButtonPressed()); + if (@event.IsActionPressed(GameInputs.Debug)) + GameState.Input(new GameState.Input.DebugButtonPressed()); } private void DropRestorative(Vector3 vector) { - var restorativeScene = GD.Load("res://src/items/restorative/Restorative.tscn"); - var restorative = restorativeScene.Instantiate(); - AddChild(restorative); - restorative.GlobalPosition = vector; + var restorativeScene = GD.Load("res://src/items/restorative/Restorative.tscn"); + var restorative = restorativeScene.Instantiate(); + AddChild(restorative); + restorative.GlobalPosition = vector; } private void UseTeleportPrompt_CloseTeleportPrompt() { - GameState.Input(new GameState.Input.CloseTeleport()); - InGameUI.UseTeleportPrompt.FadeOut(); - GameRepo.Resume(); + GameState.Input(new GameState.Input.CloseTeleport()); + InGameUI.UseTeleportPrompt.FadeOut(); + GameRepo.Resume(); } private void UseTeleportPrompt_TeleportToNextFloor() => GameState.Input(new GameState.Input.UseTeleport()); private void FloorClearMenu_TransitionCompleted() { - GameRepo.Resume(); + GameRepo.Resume(); } private void GameEventDepot_RestorativePickedUp(IHealthPack obj) => Player.Stats.SetCurrentVT(Player.Stats.CurrentVT.Value + (int)obj.RestoreAmount); @@ -409,118 +409,118 @@ public partial class Game : Node3D, IGame private void EnactConsumableItemEffects(ConsumableItem consumableItem) { - if (Player.Stats.CurrentHP == Player.Stats.MaximumHP && consumableItem.RaiseHPAmount > 0) - Player.RaiseHP(consumableItem.RaiseHPAmount); - if (Player.Stats.CurrentVT == Player.Stats.MaximumVT && consumableItem.RaiseVTAmount > 0) - Player.RaiseVT(consumableItem.RaiseVTAmount); + if (Player.Stats.CurrentHP == Player.Stats.MaximumHP && consumableItem.RaiseHPAmount > 0) + Player.RaiseHP(consumableItem.RaiseHPAmount); + if (Player.Stats.CurrentVT == Player.Stats.MaximumVT && consumableItem.RaiseVTAmount > 0) + Player.RaiseVT(consumableItem.RaiseVTAmount); - if (consumableItem.HealHPAmount > 0 && Player.Stats.CurrentHP != Player.Stats.MaximumHP) - Player.HealHP(consumableItem.HealHPAmount); - if (consumableItem.HealVTAmount > 0 && Player.Stats.CurrentVT != Player.Stats.MaximumVT) - Player.HealVT(consumableItem.HealVTAmount); + if (consumableItem.HealHPAmount > 0 && Player.Stats.CurrentHP != Player.Stats.MaximumHP) + Player.HealHP(consumableItem.HealHPAmount); + if (consumableItem.HealVTAmount > 0 && Player.Stats.CurrentVT != Player.Stats.MaximumVT) + Player.HealVT(consumableItem.HealVTAmount); } private void EnactEffectItemEffects(EffectItem effectItem) { - switch (effectItem.UsableItemTag) - { - case UsableItemTag.TeleportAllEnemiesToRoom: - _effectService.TeleportEnemiesToCurrentRoom(); - GameRepo.CloseInventory(); - break; - case UsableItemTag.KillHalfEnemiesInRoom: - _effectService.KillHalfEnemiesInRoom(); - GameRepo.CloseInventory(); - break; - case UsableItemTag.TurnAllEnemiesIntoHealingItem: - _effectService.TurnAllEnemiesInRoomIntoHealingItem(); - GameRepo.CloseInventory(); - break; - case UsableItemTag.HealsAllInRoomToMaxHP: - _effectService.HealAllEnemiesAndPlayerInRoomToFull(); - GameRepo.CloseInventory(); - break; - case UsableItemTag.AbsorbHPFromAllEnemiesInRoom: - _effectService.AbsorbHPFromAllEnemiesInRoom(); - GameRepo.CloseInventory(); - break; - case UsableItemTag.DealElementalDamageToAllEnemiesInRoom: - _effectService.DealElementalDamageToAllEnemiesInRoom(effectItem.Stats.ElementalDamageType); - GameRepo.CloseInventory(); - break; - case UsableItemTag.SwapHPAndVT: - _effectService.SwapHPandVT(); - GameRepo.CloseInventory(); - break; - case UsableItemTag.RaiseCurrentWeaponAttack: - _effectService.RaiseCurrentWeaponAttack(); - break; - case UsableItemTag.RaiseCurrentDefenseArmor: - _effectService.RaiseCurrentArmorDefense(); - break; - case UsableItemTag.RaiseLevel: - _effectService.RaiseLevel(); - break; - case UsableItemTag.RandomEffect: - _effectService.RandomEffect(effectItem); - break; - } + switch (effectItem.UsableItemTag) + { + case UsableItemTag.TeleportAllEnemiesToRoom: + _effectService.TeleportEnemiesToCurrentRoom(); + GameRepo.CloseInventory(); + break; + case UsableItemTag.KillHalfEnemiesInRoom: + _effectService.KillHalfEnemiesInRoom(); + GameRepo.CloseInventory(); + break; + case UsableItemTag.TurnAllEnemiesIntoHealingItem: + _effectService.TurnAllEnemiesInRoomIntoHealingItem(); + GameRepo.CloseInventory(); + break; + case UsableItemTag.HealsAllInRoomToMaxHP: + _effectService.HealAllEnemiesAndPlayerInRoomToFull(); + GameRepo.CloseInventory(); + break; + case UsableItemTag.AbsorbHPFromAllEnemiesInRoom: + _effectService.AbsorbHPFromAllEnemiesInRoom(); + GameRepo.CloseInventory(); + break; + case UsableItemTag.DealElementalDamageToAllEnemiesInRoom: + _effectService.DealElementalDamageToAllEnemiesInRoom(effectItem.Stats.ElementalDamageType); + GameRepo.CloseInventory(); + break; + case UsableItemTag.SwapHPAndVT: + _effectService.SwapHPandVT(); + GameRepo.CloseInventory(); + break; + case UsableItemTag.RaiseCurrentWeaponAttack: + _effectService.RaiseCurrentWeaponAttack(); + break; + case UsableItemTag.RaiseCurrentDefenseArmor: + _effectService.RaiseCurrentArmorDefense(); + break; + case UsableItemTag.RaiseLevel: + _effectService.RaiseLevel(); + break; + case UsableItemTag.RandomEffect: + _effectService.RandomEffect(effectItem); + break; + } } private void EnactThrowableItemEffects(ThrowableItem throwableItem) { - switch (throwableItem.ThrowableItemTag) - { - case ThrowableItemTag.DoubleExp: - GameRepo.StartDoubleEXP(TimeSpan.FromSeconds(30)); - GameRepo.CloseInventory(); - break; - case ThrowableItemTag.TeleportToRandomLocation: - _effectService.TeleportToRandomRoom(Player); - GameRepo.CloseInventory(); - break; - case ThrowableItemTag.CanChangeAffinity: - _effectService.ChangeAffinity(throwableItem); - break; - case ThrowableItemTag.WarpToExitIfFound: - _effectService.WarpToExit(Player); - GameRepo.CloseInventory(); - break; - } + switch (throwableItem.ThrowableItemTag) + { + case ThrowableItemTag.DoubleExp: + GameRepo.StartDoubleEXP(TimeSpan.FromSeconds(30)); + GameRepo.CloseInventory(); + break; + case ThrowableItemTag.TeleportToRandomLocation: + _effectService.TeleportToRandomRoom(Player); + GameRepo.CloseInventory(); + break; + case ThrowableItemTag.CanChangeAffinity: + _effectService.ChangeAffinity(throwableItem); + break; + case ThrowableItemTag.WarpToExitIfFound: + _effectService.WarpToExit(Player); + GameRepo.CloseInventory(); + break; + } - if (throwableItem.HealHPAmount > 0) - Player.HealHP(throwableItem.HealHPAmount); - if (throwableItem.HealVTAmount > 0) - Player.HealVT(throwableItem.HealVTAmount); + if (throwableItem.HealHPAmount > 0) + Player.HealHP(throwableItem.HealHPAmount); + if (throwableItem.HealVTAmount > 0) + Player.HealVT(throwableItem.HealVTAmount); } private void RemoveItemOrSubtractFromItemCount(InventoryItem item) { - if (item is IStackable stackableItem && stackableItem.Count > 1) - stackableItem.SetCount(stackableItem.Count - 1); - else - GameRepo.RemoveItemFromInventory(item); + if (item is IStackable stackableItem && stackableItem.Count > 1) + stackableItem.SetCount(stackableItem.Count - 1); + else + GameRepo.RemoveItemFromInventory(item); } private void OnNewGame() { - GameState.Input(new GameState.Input.NewGame()); - MainMenu.Hide(); + GameState.Input(new GameState.Input.NewGame()); + MainMenu.Hide(); } private void OnContinueGame() { - GameState.Input(new GameState.Input.ContinueGame()); + GameState.Input(new GameState.Input.ContinueGame()); } private void OnLoadGame() { - GameState.Input(new GameState.Input.LoadGame()); - MainMenu.Hide(); + GameState.Input(new GameState.Input.LoadGame()); + MainMenu.Hide(); } private void OnQuit() { - MainMenu.Hide(); + MainMenu.Hide(); } } diff --git a/Zennysoft.Game.Ma/src/game/Game.tscn b/Zennysoft.Game.Ma/src/game/Game.tscn index 4c73475a..fc79a788 100644 --- a/Zennysoft.Game.Ma/src/game/Game.tscn +++ b/Zennysoft.Game.Ma/src/game/Game.tscn @@ -106,6 +106,7 @@ stretch = true [node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] handle_input_locally = false +audio_listener_enable_3d = true size = Vector2i(1440, 1080) render_target_update_mode = 4 diff --git a/Zennysoft.Game.Ma/src/map/dungeon/rooms/Set A/15. Boss Floor A.tscn b/Zennysoft.Game.Ma/src/map/dungeon/rooms/Set A/15. Boss Floor A.tscn index a8a1570f..60884325 100644 --- a/Zennysoft.Game.Ma/src/map/dungeon/rooms/Set A/15. Boss Floor A.tscn +++ b/Zennysoft.Game.Ma/src/map/dungeon/rooms/Set A/15. Boss Floor A.tscn @@ -4885,22 +4885,22 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -240.071, 36.4279, 34.624) visible = false shape = SubResource("BoxShape3D_pkvyy") -[node name="Horse Head Statue" parent="Room" instance=ExtResource("24_r1rk5")] +[node name="HorseHeadStatue" parent="Room" instance=ExtResource("24_r1rk5")] unique_name_in_owner = true transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -102.157, -2.30863, 13.0139) -[node name="Horse Head Active" parent="Room" instance=ExtResource("25_a482y")] +[node name="HorseFace" parent="Room" instance=ExtResource("25_a482y")] unique_name_in_owner = true transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.0139) visible = false PrimaryAttackElementalType = 0 PrimaryAttackElementalDamageBonus = 1.0 -[node name="Ox Face Statue" parent="Room" instance=ExtResource("26_futcf")] +[node name="OxFaceStatue" parent="Room" instance=ExtResource("26_futcf")] unique_name_in_owner = true transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -101.555, -2.30863, 21.5833) -[node name="OxFace Active" parent="Room" instance=ExtResource("27_g6y6v")] +[node name="OxFace" parent="Room" instance=ExtResource("27_g6y6v")] unique_name_in_owner = true transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -101.703, -0.479859, 22.0955) visible = false diff --git a/Zennysoft.Game.Ma/src/map/overworld/Overworld.tscn b/Zennysoft.Game.Ma/src/map/overworld/Overworld.tscn index 4d4bcd1c..8f5b0be1 100644 --- a/Zennysoft.Game.Ma/src/map/overworld/Overworld.tscn +++ b/Zennysoft.Game.Ma/src/map/overworld/Overworld.tscn @@ -8119,6 +8119,7 @@ root_node = NodePath("Overworld_CLOUD_RINGS_INNER") libraries = { &"": SubResource("AnimationLibrary_q2pi3") } +autoplay = "Cloud Rotation 1" [node name="Overworld_CLOUD_RINGS_INNER" type="Node3D" parent="Model/AnimationPlayer"] transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 485.326, 0) @@ -8608,6 +8609,7 @@ volume_db = 5.275 unit_size = 10.55 max_db = -3.264 autoplay = true +stream_paused = true max_distance = 100.0 bus = &"AMBIENT"