Working pause menu

This commit is contained in:
2024-09-11 15:55:47 -07:00
parent 4d47a7586e
commit 149c8d9571
9 changed files with 1156 additions and 1115 deletions

View File

@@ -174,6 +174,12 @@ StrafeRight={
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null)
] ]
} }
Pause={
"deadzone": 0.5,
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[internationalization] [internationalization]

View File

@@ -55,6 +55,7 @@ public partial class Game : Node3D, IGame
Instantiator = new Instantiator(GetTree()); Instantiator = new Instantiator(GetTree());
FloorClearMenu.TransitionCompleted += OnFloorClearTransitionCompleted; FloorClearMenu.TransitionCompleted += OnFloorClearTransitionCompleted;
PauseMenu.TransitionCompleted += OnPauseMenuTransitioned;
} }
private void OnFloorClearTransitionCompleted() private void OnFloorClearTransitionCompleted()
@@ -62,6 +63,11 @@ public partial class Game : Node3D, IGame
GameLogic.Input(new GameLogic.Input.FloorClearTransitioned()); GameLogic.Input(new GameLogic.Input.FloorClearTransitioned());
} }
private void OnPauseMenuTransitioned()
{
GameLogic.Input(new GameLogic.Input.PauseMenuTransitioned());
}
public void Exit() public void Exit()
{ {
GameLogic.Input(new GameLogic.Input.LoadNextFloor()); GameLogic.Input(new GameLogic.Input.LoadNextFloor());
@@ -123,6 +129,12 @@ public partial class Game : Node3D, IGame
GD.Print("MiniMap button released"); GD.Print("MiniMap button released");
GameLogic.Input(new GameLogic.Input.MiniMapButtonReleased()); GameLogic.Input(new GameLogic.Input.MiniMapButtonReleased());
} }
if (@event.IsActionPressed(GameInputs.Pause))
{
GD.Print("Pause button pressed");
GameLogic.Input(new GameLogic.Input.PauseButtonPressed());
}
} }
private void SetPauseMode(bool isPaused) private void SetPauseMode(bool isPaused)

View File

@@ -14,9 +14,11 @@ GameJamDungeon_GameLogic_State_InventoryOpened --> GameJamDungeon_GameLogic_Stat
GameJamDungeon_GameLogic_State_MenuBackdrop --> GameJamDungeon_GameLogic_State_MenuBackdrop : Initialize GameJamDungeon_GameLogic_State_MenuBackdrop --> GameJamDungeon_GameLogic_State_MenuBackdrop : Initialize
GameJamDungeon_GameLogic_State_MenuBackdrop --> GameJamDungeon_GameLogic_State_Playing : Start GameJamDungeon_GameLogic_State_MenuBackdrop --> GameJamDungeon_GameLogic_State_Playing : Start
GameJamDungeon_GameLogic_State_MinimapOpen --> GameJamDungeon_GameLogic_State_Playing : MiniMapButtonReleased GameJamDungeon_GameLogic_State_MinimapOpen --> GameJamDungeon_GameLogic_State_Playing : MiniMapButtonReleased
GameJamDungeon_GameLogic_State_Paused --> GameJamDungeon_GameLogic_State_Resuming : PauseButtonPressed
GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_FloorCleared : FloorExitReached GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_FloorCleared : FloorExitReached
GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_InventoryOpened : InventoryMenuToggle GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_InventoryOpened : InventoryMenuToggle
GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_MinimapOpen : MiniMapButtonPressed GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_MinimapOpen : MiniMapButtonPressed
GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_Paused : PauseButtonPressed
GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_Quit : GameOver GameJamDungeon_GameLogic_State_Playing --> GameJamDungeon_GameLogic_State_Quit : GameOver
GameJamDungeon_GameLogic_State_Resuming --> GameJamDungeon_GameLogic_State_Playing : PauseMenuTransitioned GameJamDungeon_GameLogic_State_Resuming --> GameJamDungeon_GameLogic_State_Playing : PauseMenuTransitioned
@@ -27,6 +29,7 @@ GameJamDungeon_GameLogic_State_InventoryOpened : OnEnter → SetInventoryMode
GameJamDungeon_GameLogic_State_InventoryOpened : OnExit → HideInventory GameJamDungeon_GameLogic_State_InventoryOpened : OnExit → HideInventory
GameJamDungeon_GameLogic_State_MinimapOpen : OnEnter → ShowMiniMap GameJamDungeon_GameLogic_State_MinimapOpen : OnEnter → ShowMiniMap
GameJamDungeon_GameLogic_State_MinimapOpen : OnExit → HideMiniMap GameJamDungeon_GameLogic_State_MinimapOpen : OnExit → HideMiniMap
GameJamDungeon_GameLogic_State_Paused : OnEnter → ShowPauseMenu
GameJamDungeon_GameLogic_State_Paused : OnExit → ExitPauseMenu GameJamDungeon_GameLogic_State_Paused : OnExit → ExitPauseMenu
GameJamDungeon_GameLogic_State_Playing : OnEnter → StartGame GameJamDungeon_GameLogic_State_Playing : OnEnter → StartGame
GameJamDungeon_GameLogic_State_Quit : OnEnter → ShowLostScreen GameJamDungeon_GameLogic_State_Quit : OnEnter → ShowLostScreen

View File

@@ -8,11 +8,15 @@ namespace GameJamDungeon
public partial record State public partial record State
{ {
[Meta] [Meta]
public partial record Paused : State public partial record Paused : State, IGet<Input.PauseButtonPressed>
{ {
public Paused() public Paused()
{ {
this.OnEnter(() => Get<IGameRepo>().Pause()); this.OnEnter(() =>
{
Get<IGameRepo>().Pause();
Output(new Output.ShowPauseMenu());
});
this.OnExit(() => Output(new Output.ExitPauseMenu())); this.OnExit(() => Output(new Output.ExitPauseMenu()));
} }

View File

@@ -12,7 +12,8 @@ namespace GameJamDungeon
IGet<Input.InventoryMenuToggle>, IGet<Input.InventoryMenuToggle>,
IGet<Input.MiniMapButtonPressed>, IGet<Input.MiniMapButtonPressed>,
IGet<Input.GameOver>, IGet<Input.GameOver>,
IGet<Input.FloorExitReached> IGet<Input.FloorExitReached>,
IGet<Input.PauseButtonPressed>
{ {
public Playing() public Playing()
{ {
@@ -31,6 +32,8 @@ namespace GameJamDungeon
public Transition On(in Input.GameOver input) => To<Quit>(); public Transition On(in Input.GameOver input) => To<Quit>();
public Transition On(in Input.FloorExitReached input) => To<FloorCleared>(); public Transition On(in Input.FloorExitReached input) => To<FloorCleared>();
public Transition On(in Input.PauseButtonPressed input) => To<Paused>();
} }
} }
} }

View File

@@ -23,21 +23,13 @@ public partial class Map : Node3D, IMap
[Node] public Area3D Teleport { get; set; } = default!; [Node] public Area3D Teleport { get; set; } = default!;
[Node] public IDungeonFloor Overworld { get; set; } = default!;
[Node] public IDungeonFloor Floor1 { get; set; } = default!;
[Node] public IDungeonFloor Floor2 { get; set; } = default!;
[Node] public IDungeonFloor Floor3 { get; set; } = default!;
public List<IDungeonFloor> Floors { get; set; } = default!; public List<IDungeonFloor> Floors { get; set; } = default!;
private IDungeonFloor _currentFloor; private IDungeonFloor _currentFloor;
public void Setup() public void Setup()
{ {
Floors = [Overworld, Floor1, Floor2, Floor3]; Floors = GetChildren().OfType<IDungeonFloor>().ToList();
_currentFloor = Floors.ElementAt(0); _currentFloor = Floors.ElementAt(0);
Teleport.BodyEntered += OnTeleportEntered; Teleport.BodyEntered += OnTeleportEntered;
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -2,12 +2,13 @@ using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces; using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection; using Chickensoft.Introspection;
using Godot; using Godot;
using System;
public interface IPauseMenu : IControl public interface IPauseMenu : IControl
{ {
void FadeIn(); void FadeIn();
void FadeOut(); void FadeOut();
event PauseMenu.TransitionCompletedEventHandler TransitionCompleted;
} }
[Meta(typeof(IAutoNode))] [Meta(typeof(IAutoNode))]
@@ -15,9 +16,20 @@ public partial class PauseMenu : Control, IPauseMenu
{ {
public override void _Notification(int what) => this.Notify(what); public override void _Notification(int what) => this.Notify(what);
[Signal]
public delegate void TransitionCompletedEventHandler();
[Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!; [Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!;
public void OnReady()
{
AnimationPlayer.AnimationFinished += OnAnimationFinished;
}
public void FadeIn() => AnimationPlayer.Play("fade_in"); public void FadeIn() => AnimationPlayer.Play("fade_in");
public void FadeOut() => AnimationPlayer.Play("fade_out"); public void FadeOut() => AnimationPlayer.Play("fade_out");
public void OnAnimationFinished(StringName name)
=> EmitSignal(SignalName.TransitionCompleted);
} }