Pauser Added + Fixed Bug

TODO: Stop Animations when Paused
This commit is contained in:
Syntriax 2022-02-26 19:53:47 +03:00
parent 33f81e5a1c
commit caab797e6d
10 changed files with 297 additions and 3 deletions

View File

@ -64,6 +64,15 @@ namespace Input
""processors"": """", ""processors"": """",
""interactions"": """", ""interactions"": """",
""initialStateCheck"": false ""initialStateCheck"": false
},
{
""name"": ""Pause"",
""type"": ""Button"",
""id"": ""b110facd-253d-41ce-9de7-b589dc48cfc6"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
} }
], ],
""bindings"": [ ""bindings"": [
@ -209,6 +218,28 @@ namespace Input
""action"": ""Climb"", ""action"": ""Climb"",
""isComposite"": false, ""isComposite"": false,
""isPartOfComposite"": false ""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""6a01ec66-e7a4-426a-8ee4-977d456b200c"",
""path"": ""<Gamepad>/start"",
""interactions"": """",
""processors"": """",
""groups"": ""Controller"",
""action"": ""Pause"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""279efb3d-768d-49fd-91f5-c74ebe08c880"",
""path"": ""<Keyboard>/escape"",
""interactions"": """",
""processors"": """",
""groups"": ""KeyBoard"",
""action"": ""Pause"",
""isComposite"": false,
""isPartOfComposite"": false
} }
] ]
} }
@ -244,6 +275,7 @@ namespace Input
m_PlayerControl_Jump = m_PlayerControl.FindAction("Jump", throwIfNotFound: true); m_PlayerControl_Jump = m_PlayerControl.FindAction("Jump", throwIfNotFound: true);
m_PlayerControl_Interact = m_PlayerControl.FindAction("Interact", throwIfNotFound: true); m_PlayerControl_Interact = m_PlayerControl.FindAction("Interact", throwIfNotFound: true);
m_PlayerControl_Climb = m_PlayerControl.FindAction("Climb", throwIfNotFound: true); m_PlayerControl_Climb = m_PlayerControl.FindAction("Climb", throwIfNotFound: true);
m_PlayerControl_Pause = m_PlayerControl.FindAction("Pause", throwIfNotFound: true);
} }
public void Dispose() public void Dispose()
@ -307,6 +339,7 @@ namespace Input
private readonly InputAction m_PlayerControl_Jump; private readonly InputAction m_PlayerControl_Jump;
private readonly InputAction m_PlayerControl_Interact; private readonly InputAction m_PlayerControl_Interact;
private readonly InputAction m_PlayerControl_Climb; private readonly InputAction m_PlayerControl_Climb;
private readonly InputAction m_PlayerControl_Pause;
public struct PlayerControlActions public struct PlayerControlActions
{ {
private @PlayerInput m_Wrapper; private @PlayerInput m_Wrapper;
@ -315,6 +348,7 @@ namespace Input
public InputAction @Jump => m_Wrapper.m_PlayerControl_Jump; public InputAction @Jump => m_Wrapper.m_PlayerControl_Jump;
public InputAction @Interact => m_Wrapper.m_PlayerControl_Interact; public InputAction @Interact => m_Wrapper.m_PlayerControl_Interact;
public InputAction @Climb => m_Wrapper.m_PlayerControl_Climb; public InputAction @Climb => m_Wrapper.m_PlayerControl_Climb;
public InputAction @Pause => m_Wrapper.m_PlayerControl_Pause;
public InputActionMap Get() { return m_Wrapper.m_PlayerControl; } public InputActionMap Get() { return m_Wrapper.m_PlayerControl; }
public void Enable() { Get().Enable(); } public void Enable() { Get().Enable(); }
public void Disable() { Get().Disable(); } public void Disable() { Get().Disable(); }
@ -336,6 +370,9 @@ namespace Input
@Climb.started -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnClimb; @Climb.started -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnClimb;
@Climb.performed -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnClimb; @Climb.performed -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnClimb;
@Climb.canceled -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnClimb; @Climb.canceled -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnClimb;
@Pause.started -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnPause;
@Pause.performed -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnPause;
@Pause.canceled -= m_Wrapper.m_PlayerControlActionsCallbackInterface.OnPause;
} }
m_Wrapper.m_PlayerControlActionsCallbackInterface = instance; m_Wrapper.m_PlayerControlActionsCallbackInterface = instance;
if (instance != null) if (instance != null)
@ -352,6 +389,9 @@ namespace Input
@Climb.started += instance.OnClimb; @Climb.started += instance.OnClimb;
@Climb.performed += instance.OnClimb; @Climb.performed += instance.OnClimb;
@Climb.canceled += instance.OnClimb; @Climb.canceled += instance.OnClimb;
@Pause.started += instance.OnPause;
@Pause.performed += instance.OnPause;
@Pause.canceled += instance.OnPause;
} }
} }
} }
@ -380,6 +420,7 @@ namespace Input
void OnJump(InputAction.CallbackContext context); void OnJump(InputAction.CallbackContext context);
void OnInteract(InputAction.CallbackContext context); void OnInteract(InputAction.CallbackContext context);
void OnClimb(InputAction.CallbackContext context); void OnClimb(InputAction.CallbackContext context);
void OnPause(InputAction.CallbackContext context);
} }
} }
} }

View File

@ -40,6 +40,15 @@
"processors": "", "processors": "",
"interactions": "", "interactions": "",
"initialStateCheck": false "initialStateCheck": false
},
{
"name": "Pause",
"type": "Button",
"id": "b110facd-253d-41ce-9de7-b589dc48cfc6",
"expectedControlType": "Button",
"processors": "",
"interactions": "",
"initialStateCheck": false
} }
], ],
"bindings": [ "bindings": [
@ -185,6 +194,28 @@
"action": "Climb", "action": "Climb",
"isComposite": false, "isComposite": false,
"isPartOfComposite": false "isPartOfComposite": false
},
{
"name": "",
"id": "6a01ec66-e7a4-426a-8ee4-977d456b200c",
"path": "<Gamepad>/start",
"interactions": "",
"processors": "",
"groups": "Controller",
"action": "Pause",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "279efb3d-768d-49fd-91f5-c74ebe08c880",
"path": "<Keyboard>/escape",
"interactions": "",
"processors": "",
"groups": "KeyBoard",
"action": "Pause",
"isComposite": false,
"isPartOfComposite": false
} }
] ]
} }

View File

@ -357,6 +357,23 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 3493594456440070957, guid: 16d5d75ef61cad14f9aba53761139517, type: 3} m_CorrespondingSourceObject: {fileID: 3493594456440070957, guid: 16d5d75ef61cad14f9aba53761139517, type: 3}
m_PrefabInstance: {fileID: 4238491769226202277} m_PrefabInstance: {fileID: 4238491769226202277}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1 &3858736020799332164 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1107566897619702753, guid: 16d5d75ef61cad14f9aba53761139517, type: 3}
m_PrefabInstance: {fileID: 4238491769226202277}
m_PrefabAsset: {fileID: 0}
--- !u!114 &3876120152542236901
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3858736020799332164}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5c8db5f2b097c0f4eaa1098c35e1bc0e, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &5352609509542677726 --- !u!1001 &5352609509542677726
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -452,6 +469,34 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3876120152542236901}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
value: MainMenu
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
value: UI.PauseMenu, Assembly-CSharp
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3} - target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_text propertyPath: m_text
value: Main Menu value: Main Menu
@ -562,6 +607,34 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3876120152542236901}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
value: Exit
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
value: UI.PauseMenu, Assembly-CSharp
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3} - target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_text propertyPath: m_text
value: Exit value: Exit
@ -672,6 +745,34 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3876120152542236901}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
value: Restart
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
value: UI.PauseMenu, Assembly-CSharp
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3} - target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_text propertyPath: m_text
value: Restart value: Restart
@ -782,6 +883,34 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 3876120152542236901}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
value: Resume
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
value: UI.PauseMenu, Assembly-CSharp
objectReference: {fileID: 0}
- target: {fileID: 3806988352586753806, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3} - target: {fileID: 8836694927704227170, guid: 5c04a1de900c1474c98622e4b3880522, type: 3}
propertyPath: m_text propertyPath: m_text
value: Resume value: Resume

View File

@ -94,7 +94,7 @@ namespace Level
UIManager.Instance.CloseAllCanvases(); UIManager.Instance.CloseAllCanvases();
} }
private void DisableAllLevels() public void DisableAllLevels()
{ {
Player.SetActive(false); Player.SetActive(false);
foreach (Level level in Levels.Values) foreach (Level level in Levels.Values)

View File

@ -0,0 +1,40 @@
using System;
using System.Linq;
using Level;
using UI;
using UnityEngine;
namespace Pausable
{
public class Pauser : MonoBehaviour
{
protected Input.PlayerInput playerInput = null;
protected bool isPaused = false;
protected void Start()
{
playerInput = new Input.PlayerInput();
playerInput.Enable();
playerInput.PlayerControl.Pause.performed += (context) => TogglePause();
}
public void TogglePause()
{
if (LevelManager.Instance.CurrentLevel == null)
return;
isPaused = !isPaused;
if (isPaused)
UIManager.Instance.SwitchToCanvas("Pause Menu");
else
UIManager.Instance.CloseAllCanvases();
foreach (IPausable pausable in FindObjectsOfType<MonoBehaviour>().OfType<IPausable>())
if (isPaused)
pausable.Pause();
else
pausable.Resume();
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1705d06bcf3cabe4d9e2614e86cd0561
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -102,6 +102,9 @@ namespace Player
private void FixedUpdate() private void FixedUpdate()
{ {
if (IsPaused)
return;
//Took from tutorial : https://www.youtube.com/watch?v=7KiK0Aqtmzc //Took from tutorial : https://www.youtube.com/watch?v=7KiK0Aqtmzc
switch (_playerRigidbody2D.velocity.y) switch (_playerRigidbody2D.velocity.y)
{ {
@ -136,6 +139,9 @@ namespace Player
private void Update() private void Update()
{ {
if (IsPaused)
return;
_isOnAir = !_playerGroundTrigger.IsCollided; _isOnAir = !_playerGroundTrigger.IsCollided;
RespawnCheck(); RespawnCheck();
@ -156,13 +162,13 @@ namespace Player
public void Pause() public void Pause()
{ {
IsPaused = true; IsPaused = true;
_playerRigidbody2D.simulated = IsPaused; _playerRigidbody2D.simulated = !IsPaused;
} }
public void Resume() public void Resume()
{ {
IsPaused = false; IsPaused = false;
_playerRigidbody2D.simulated = IsPaused; _playerRigidbody2D.simulated = !IsPaused;
} }
// MOVE METHODS // MOVE METHODS
@ -292,5 +298,9 @@ namespace Player
} }
public void Clop() => clop.PlayClop(); public void Clop() => clop.PlayClop();
public void OnPause(InputAction.CallbackContext context)
{
}
} }
} }

View File

@ -0,0 +1,17 @@
using Level;
using UnityEngine;
namespace UI
{
public class PauseMenu : MonoBehaviour
{
public void Resume() => UIManager.Instance.Pauser.TogglePause();
public void Restart() => LevelManager.Instance.CurrentLevel.Restart();
public void MainMenu()
{
LevelManager.Instance.DisableAllLevels();
UIManager.Instance.SwitchToCanvas("Main Menu");
}
public void Exit() => Application.Quit();
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5c8db5f2b097c0f4eaa1098c35e1bc0e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using Pausable;
using UnityEngine; using UnityEngine;
namespace UI namespace UI
@ -8,6 +9,7 @@ namespace UI
private static UIManager _instance = null; private static UIManager _instance = null;
public static UIManager Instance => _instance; public static UIManager Instance => _instance;
private Dictionary<string, Canvas> canvases = null; private Dictionary<string, Canvas> canvases = null;
public Pauser Pauser { get; private set; } = null;
private void Awake() private void Awake()
{ {
@ -18,6 +20,8 @@ namespace UI
Destroy(this); Destroy(this);
} }
private void Start() => Pauser = gameObject.AddComponent<Pauser>();
public void SwitchToCanvas(string canvasName) public void SwitchToCanvas(string canvasName)
{ {
Initialize(); Initialize();