Working pause menu
This commit is contained in:
@@ -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]
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
1104
src/map/overworld/OverworldMap.tscn
Normal file
1104
src/map/overworld/OverworldMap.tscn
Normal file
File diff suppressed because one or more lines are too long
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user