From d30fa35546342299696375326310784cf016d801 Mon Sep 17 00:00:00 2001 From: Zenny Date: Fri, 7 Mar 2025 19:43:27 -0800 Subject: [PATCH] Refactor minimap --- .../Game/GameLogic.Input.cs | 4 ---- .../states/GameLogic.State.MiniMapOpen.cs | 22 ------------------- .../state/states/GameLogic.State.Playing.cs | 2 -- .../UI/InGameUI/state/InGameUILogic.Input.cs | 9 ++++++++ .../UI/InGameUI/state/InGameUILogic.Output.cs | 2 ++ .../state/States/InGameUI.State.Active.cs | 4 ++-- .../States/InGameUI.State.MinimapOpen.cs | 22 +++++++++++++++++++ .../enemy_types/01. sproingy/Sproingy.cs | 4 ++-- .../enemy_types/01. sproingy/Sproingy.tscn | 4 ++-- Zennysoft.Game.Ma/src/game/Game.cs | 13 ----------- Zennysoft.Game.Ma/src/game/IGame.cs | 2 -- Zennysoft.Game.Ma/src/map/Map.tscn | 10 +++++++-- Zennysoft.Game.Ma/src/player/IPlayer.cs | 2 -- Zennysoft.Game.Ma/src/player/Player.cs | 8 ------- .../src/ui/in_game_ui/InGameUI.cs | 16 +++++++++++++- 15 files changed, 62 insertions(+), 62 deletions(-) delete mode 100644 Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.MiniMapOpen.cs create mode 100644 Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Input.cs create mode 100644 Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.MinimapOpen.cs diff --git a/Zennysoft.Game.Ma.Implementation/Game/GameLogic.Input.cs b/Zennysoft.Game.Ma.Implementation/Game/GameLogic.Input.cs index fe302b1d..518750cf 100644 --- a/Zennysoft.Game.Ma.Implementation/Game/GameLogic.Input.cs +++ b/Zennysoft.Game.Ma.Implementation/Game/GameLogic.Input.cs @@ -16,10 +16,6 @@ public partial class GameLogic public readonly record struct CloseInventory; - public readonly record struct MiniMapButtonPressed; - - public readonly record struct MiniMapButtonReleased; - public readonly record struct FloorExitReached; public readonly record struct HideFloorClearMenu; diff --git a/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.MiniMapOpen.cs b/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.MiniMapOpen.cs deleted file mode 100644 index 9cae582f..00000000 --- a/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.MiniMapOpen.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Chickensoft.Introspection; -using Chickensoft.LogicBlocks; - -namespace Zennysoft.Game.Ma.Implementation; - -public partial class GameLogic -{ - public partial record State - { - [Meta] - public partial record MinimapOpen : Playing, IGet - { - public MinimapOpen() - { - this.OnEnter(() => { Get().Pause(); Output(new Output.ShowMiniMap()); }); - this.OnExit(() => { Get().Resume(); Output(new Output.HideMiniMap()); }); - } - - public Transition On(in Input.MiniMapButtonReleased input) => To(); - } - } -} diff --git a/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.Playing.cs b/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.Playing.cs index 91058bb3..40ba2d2c 100644 --- a/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.Playing.cs +++ b/Zennysoft.Game.Ma.Implementation/Game/state/states/GameLogic.State.Playing.cs @@ -10,7 +10,6 @@ public partial class GameLogic [Meta] public partial record Playing : State, IGet, - IGet, IGet, IGet, IGet, @@ -25,7 +24,6 @@ public partial class GameLogic public Transition On(in Input.OpenInventory input) => To(); - public Transition On(in Input.MiniMapButtonPressed input) => To(); public Transition On(in Input.GameOver input) => To(); diff --git a/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Input.cs b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Input.cs new file mode 100644 index 00000000..a65c3cc1 --- /dev/null +++ b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Input.cs @@ -0,0 +1,9 @@ +namespace Zennysoft.Game.Ma.Implementation; +public partial class InGameUILogic +{ + public static class Input + { + public readonly record struct ShowMinimap; + public readonly record struct HideMinimap; + } +} diff --git a/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Output.cs b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Output.cs index 994e6ae7..dc43b2b6 100644 --- a/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Output.cs +++ b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/InGameUILogic.Output.cs @@ -8,5 +8,7 @@ public partial class InGameUILogic public readonly record struct AnnounceMessageOnMainScreen(string Message); public readonly record struct AnnounceMessageInInventory(string Message); public readonly record struct RemoveItemFromInventory(IInventoryItem Item); + public readonly record struct DisplayMinimap(); + public readonly record struct HideMinimap(); } } diff --git a/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.Active.cs b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.Active.cs index c18d4753..5fc1f26f 100644 --- a/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.Active.cs +++ b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.Active.cs @@ -7,9 +7,9 @@ public partial class InGameUILogic public partial record State { [Meta] - public partial record Active : State + public partial record Active : State, IGet { - + public Transition On(in Input.ShowMinimap input) => To(); } } } diff --git a/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.MinimapOpen.cs b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.MinimapOpen.cs new file mode 100644 index 00000000..8774204d --- /dev/null +++ b/Zennysoft.Game.Ma.Implementation/UI/InGameUI/state/States/InGameUI.State.MinimapOpen.cs @@ -0,0 +1,22 @@ +using Chickensoft.Introspection; +using Chickensoft.LogicBlocks; + +namespace Zennysoft.Game.Ma.Implementation; + +public partial class InGameUILogic +{ + public partial record State + { + [Meta] + public partial record MinimapOpen : State, IGet + { + public MinimapOpen() + { + OnAttach(() => { Get().Pause(); Output(new Output.DisplayMinimap()); }); + OnDetach(() => { Get().Resume(); Output(new Output.HideMinimap()); }); + } + + public Transition On(in Input.HideMinimap input) => To(); + } + } +} diff --git a/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.cs b/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.cs index 98ca1699..b6173ed1 100644 --- a/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.cs +++ b/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.cs @@ -31,11 +31,11 @@ public partial class Sproingy : Enemy, IHasPrimaryAttack, ICanPatrol if (_enemyLogic.Value is not EnemyLogic.State.Activated) return; - if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 3.5f) + if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) < 1.5f) _enemyLogic.Input(new EnemyLogic.Input.StartAttacking()); if (_enemyLogic.Value is EnemyLogic.State.FollowPlayer && GlobalPosition.DistanceTo(_player.CurrentPosition) > 30f) _enemyLogic.Input(new EnemyLogic.Input.LostPlayer()); - if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 5f) + if (_enemyLogic.Value is EnemyLogic.State.Attacking && GlobalPosition.DistanceTo(_player.CurrentPosition) > 3f) _enemyLogic.Input(new EnemyLogic.Input.Alerted()); _navigationAgentClient.CalculateVelocity(GlobalPosition, true); diff --git a/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.tscn b/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.tscn index 592008c4..810bd263 100644 --- a/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.tscn +++ b/Zennysoft.Game.Ma/src/enemy/enemy_types/01. sproingy/Sproingy.tscn @@ -8,7 +8,7 @@ [sub_resource type="Resource" id="Resource_oln85"] script = ExtResource("2_oln85") CurrentHP = 30.0 -MaximumHP = 30.0 +MaximumHP = 0 CurrentAttack = 12 CurrentDefense = 7 MaxAttack = 12 @@ -32,7 +32,7 @@ height = 5.0 radius = 1.0 [sub_resource type="SphereShape3D" id="SphereShape3D_8vcnq"] -radius = 0.762524 +radius = 0.57308 [node name="Sproingy" type="CharacterBody3D"] process_mode = 1 diff --git a/Zennysoft.Game.Ma/src/game/Game.cs b/Zennysoft.Game.Ma/src/game/Game.cs index 7c1a3e20..e1ca487c 100644 --- a/Zennysoft.Game.Ma/src/game/Game.cs +++ b/Zennysoft.Game.Ma/src/game/Game.cs @@ -195,8 +195,6 @@ public partial class Game : Node3D, IGame .Handle((in GameLogic.Output.ExitFloorClearMenu _) => { FloorClearMenu.FadeOut(); }) .Handle((in GameLogic.Output.OpenInventory _) => { InGameUI.ShowInventoryScreen(); InGameUI.InventoryMenu.SetProcessInput(true); }) .Handle((in GameLogic.Output.CloseInventory _) => { InGameUI.HideInventoryScreen(); InGameUI.InventoryMenu.SetProcessInput(false); }) - .Handle((in GameLogic.Output.ShowMiniMap _) => { InGameUI.ShowMiniMap(); }) - .Handle((in GameLogic.Output.HideMiniMap _) => { InGameUI.HideMiniMap(); }) .Handle((in GameLogic.Output.ShowAskForTeleport _) => { GameRepo.Pause(); InGameUI.UseTeleportPrompt.FadeIn(); InGameUI.SetProcessInput(true); }) .Handle((in GameLogic.Output.HideAskForTeleport _) => { GameRepo.Resume(); InGameUI.UseTeleportPrompt.FadeOut(); InGameUI.SetProcessInput(false); }) .Handle((in GameLogic.Output.ShowLostScreen _) => { DeathMenu.Show(); DeathMenu.FadeIn(); }) @@ -218,7 +216,6 @@ public partial class Game : Node3D, IGame PauseMenu.TransitionCompleted += OnPauseMenuTransitioned; PauseMenu.UnpauseButtonPressed += PauseMenu_UnpauseButtonPressed; InGameUI.InventoryMenu.ClosedMenu += InventoryMenu_CloseInventory; - InGameUI.MinimapButtonReleased += Player_MinimapButtonReleased; InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor; InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt; @@ -256,11 +253,6 @@ public partial class Game : Node3D, IGame GameLogic.Input(new GameLogic.Input.OpenInventory()); } - public void ToggleMinimap() - { - GameLogic.Input(new GameLogic.Input.MiniMapButtonPressed()); - } - public void FloorExitReached() { GameLogic.Input(new GameLogic.Input.AskForTeleport()); @@ -399,11 +391,6 @@ public partial class Game : Node3D, IGame GameLogic.Input(new GameLogic.Input.PauseGame()); } - private void Player_MinimapButtonReleased() - { - GameLogic.Input(new GameLogic.Input.MiniMapButtonReleased()); - } - private void FloorClearMenu_TransitionCompleted() { GameRepo.Resume(); diff --git a/Zennysoft.Game.Ma/src/game/IGame.cs b/Zennysoft.Game.Ma/src/game/IGame.cs index 02dd0299..2e326439 100644 --- a/Zennysoft.Game.Ma/src/game/IGame.cs +++ b/Zennysoft.Game.Ma/src/game/IGame.cs @@ -29,8 +29,6 @@ public interface IGame : IProvide, IProvide, IProvid public void ToggleInventory(); - public void ToggleMinimap(); - public void FloorExitReached(); public void NextFloorLoaded(); diff --git a/Zennysoft.Game.Ma/src/map/Map.tscn b/Zennysoft.Game.Ma/src/map/Map.tscn index df7e975e..155ac271 100644 --- a/Zennysoft.Game.Ma/src/map/Map.tscn +++ b/Zennysoft.Game.Ma/src/map/Map.tscn @@ -1,13 +1,19 @@ -[gd_scene load_steps=6 format=3 uid="uid://by67pn7fdsg1m"] +[gd_scene load_steps=12 format=3 uid="uid://by67pn7fdsg1m"] [ext_resource type="Script" uid="uid://14e8mu48ed4" path="res://src/map/Map.cs" id="1_bw70o"] [ext_resource type="PackedScene" uid="uid://dl6h1djc27ddl" path="res://src/map/dungeon/floors/Floor00.tscn" id="2_0m8h8"] [ext_resource type="PackedScene" uid="uid://bc1sp6xwe0j65" path="res://src/map/dungeon/floors/Floor01.tscn" id="2_merfv"] [ext_resource type="PackedScene" uid="uid://dmiqwmivkjgmq" path="res://src/map/dungeon/floors/Floor02.tscn" id="4_8y0oy"] [ext_resource type="PackedScene" uid="uid://dl1scvkp8r5sw" path="res://src/map/dungeon/floors/Floor03.tscn" id="5_uag72"] +[ext_resource type="PackedScene" uid="uid://cikq7vuorlpbl" path="res://src/map/dungeon/floors/Floor04.tscn" id="6_55rmo"] +[ext_resource type="PackedScene" uid="uid://t7cac7801bnk" path="res://src/map/dungeon/floors/Floor05.tscn" id="7_f6kwn"] +[ext_resource type="PackedScene" uid="uid://da107mywg18x1" path="res://src/map/dungeon/floors/Floor06.tscn" id="8_ne2vg"] +[ext_resource type="PackedScene" uid="uid://cgtqjgh1f5fqi" path="res://src/map/dungeon/floors/Floor07.tscn" id="9_abpbr"] +[ext_resource type="PackedScene" uid="uid://dg20ovvj2m2lp" path="res://src/map/dungeon/floors/Floor08.tscn" id="10_caf7v"] +[ext_resource type="PackedScene" uid="uid://b5jk743ng6fqg" path="res://src/map/dungeon/floors/Floor09.tscn" id="11_y74f3"] [node name="Map" type="Node3D"] script = ExtResource("1_bw70o") -_floors = Array[PackedScene]([ExtResource("2_0m8h8"), ExtResource("2_merfv"), ExtResource("4_8y0oy"), ExtResource("5_uag72")]) +_floors = Array[PackedScene]([ExtResource("2_0m8h8"), ExtResource("2_merfv"), ExtResource("4_8y0oy"), ExtResource("5_uag72"), ExtResource("6_55rmo"), ExtResource("7_f6kwn"), ExtResource("8_ne2vg"), ExtResource("9_abpbr"), ExtResource("10_caf7v"), ExtResource("11_y74f3")]) [node name="WorldEnvironment" type="WorldEnvironment" parent="."] diff --git a/Zennysoft.Game.Ma/src/player/IPlayer.cs b/Zennysoft.Game.Ma/src/player/IPlayer.cs index 494c982c..5388e6a7 100644 --- a/Zennysoft.Game.Ma/src/player/IPlayer.cs +++ b/Zennysoft.Game.Ma/src/player/IPlayer.cs @@ -12,8 +12,6 @@ public interface IPlayer : IKillable, IProvide> public void ToggleInventory(); - public void ToggleMinimap(); - public void PlayerPause(); public void TakeDamage(double damage, ElementType elementType = ElementType.None, bool isCriticalHit = false); diff --git a/Zennysoft.Game.Ma/src/player/Player.cs b/Zennysoft.Game.Ma/src/player/Player.cs index 5df26224..ee07f88a 100644 --- a/Zennysoft.Game.Ma/src/player/Player.cs +++ b/Zennysoft.Game.Ma/src/player/Player.cs @@ -271,11 +271,6 @@ public partial class Player : CharacterBody3D, IPlayer Game.ToggleInventory(); } - public void ToggleMinimap() - { - Game.ToggleMinimap(); - } - public void PlayerPause() { Game.TogglePause(); @@ -404,9 +399,6 @@ public partial class Player : CharacterBody3D, IPlayer if (@event.IsActionPressed(GameInputs.Inventory)) ToggleInventory(); - if (@event.IsActionPressed(GameInputs.MiniMap)) - ToggleMinimap(); - if (@event.IsActionPressed(GameInputs.Pause)) PlayerPause(); diff --git a/Zennysoft.Game.Ma/src/ui/in_game_ui/InGameUI.cs b/Zennysoft.Game.Ma/src/ui/in_game_ui/InGameUI.cs index 5ecd45b5..7ed68fcd 100644 --- a/Zennysoft.Game.Ma/src/ui/in_game_ui/InGameUI.cs +++ b/Zennysoft.Game.Ma/src/ui/in_game_ui/InGameUI.cs @@ -64,17 +64,31 @@ public partial class InGameUI : Control, IInGameUI .Handle((in InGameUILogic.Output.RemoveItemFromInventory output) => { InventoryMenu.RemoveItem(output.Item); + }) + .Handle((in InGameUILogic.Output.DisplayMinimap _) => + { + ShowMiniMap(); + }) + .Handle((in InGameUILogic.Output.HideMinimap _) => + { + HideMiniMap(); }); + ; InGameUILogic.Start(); } public override void _UnhandledInput(InputEvent @event) { + if (@event.IsActionPressed(GameInputs.MiniMap)) + { + GD.Print("MiniMap button pressed"); + InGameUILogic.Input(new InGameUILogic.Input.ShowMinimap()); + } if (@event.IsActionReleased(GameInputs.MiniMap)) { GD.Print("MiniMap button released"); - EmitSignal(SignalName.MinimapButtonReleased); + InGameUILogic.Input(new InGameUILogic.Input.HideMinimap()); } }