diff --git a/Assets/PlayerMovementAnimatorController.controller b/Assets/PlayerMovementAnimatorController.controller index 36654f5c..6da36e48 100644 --- a/Assets/PlayerMovementAnimatorController.controller +++ b/Assets/PlayerMovementAnimatorController.controller @@ -10,7 +10,7 @@ AnimatorStateTransition: m_Conditions: - m_ConditionMode: 3 m_ConditionEvent: MoveY - m_EventTreshold: -0.95 + m_EventTreshold: -0.2 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -6214595074649590134} m_Solo: 0 @@ -117,7 +117,7 @@ AnimatorStateTransition: m_Conditions: - m_ConditionMode: 4 m_ConditionEvent: MoveY - m_EventTreshold: 0.95 + m_EventTreshold: 0.2 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -6214595074649590134} m_Solo: 0 @@ -288,7 +288,7 @@ AnimatorStateTransition: m_Conditions: - m_ConditionMode: 3 m_ConditionEvent: MoveX - m_EventTreshold: -0.95 + m_EventTreshold: -0.7 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -6214595074649590134} m_Solo: 0 @@ -313,7 +313,7 @@ AnimatorStateTransition: m_Conditions: - m_ConditionMode: 4 m_ConditionEvent: MoveX - m_EventTreshold: 0.95 + m_EventTreshold: 0.7 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -6214595074649590134} m_Solo: 0 diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab index 112da2b0..7ead723c 100644 --- a/Assets/Prefabs/Player.prefab +++ b/Assets/Prefabs/Player.prefab @@ -14,7 +14,6 @@ GameObject: - component: {fileID: 1803017460098482366} - component: {fileID: 2136192976700920181} - component: {fileID: 2952415180134692435} - - component: {fileID: 7904266034163262073} m_Layer: 0 m_Name: Player m_TagString: Untagged @@ -213,15 +212,3 @@ PolygonCollider2D: - {x: 0.057479188, y: -0.12709153} - {x: 0.046700563, y: -0.12571843} m_UseDelaunayMesh: 0 ---- !u!114 &7904266034163262073 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1463738777561398421} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9d1d8695cfa6948278518a6a55e0b730, type: 3} - m_Name: - m_EditorClassIdentifier: diff --git a/Assets/Prefabs/RoomSystem/WaitingRoom.prefab b/Assets/Prefabs/RoomSystem/WaitingRoom.prefab new file mode 100644 index 00000000..0a82ebe1 --- /dev/null +++ b/Assets/Prefabs/RoomSystem/WaitingRoom.prefab @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6577988205983815687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4087357368593639579} + - component: {fileID: 8065234719190424100} + m_Layer: 0 + m_Name: WaitingRoom + m_TagString: Temporary + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4087357368593639579 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577988205983815687} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11.687407, y: 6.3912716, z: -0.07103652} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8065234719190424100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577988205983815687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 804016391dce0430d92408fa75348918, type: 3} + m_Name: + m_EditorClassIdentifier: + messageFont: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} diff --git a/Assets/Prefabs/RoomSystem/WaitingRoom.prefab.meta b/Assets/Prefabs/RoomSystem/WaitingRoom.prefab.meta new file mode 100644 index 00000000..90014f85 --- /dev/null +++ b/Assets/Prefabs/RoomSystem/WaitingRoom.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 56b8e144977b94114b4eb95ac32bfe84 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/UI/Menu.unity b/Assets/Scenes/UI/Menu.unity index 6bc4a72c..957fefe7 100644 --- a/Assets/Scenes/UI/Menu.unity +++ b/Assets/Scenes/UI/Menu.unity @@ -921,6 +921,50 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1245127443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1245127445} + - component: {fileID: 1245127444} + m_Layer: 0 + m_Name: Socket + m_TagString: Temporary + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1245127444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1245127443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d1d8695cfa6948278518a6a55e0b730, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1245127445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1245127443} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 893.28735, y: -14.503334, z: -12.123516} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1332151914 GameObject: m_ObjectHideFlags: 0 @@ -1070,7 +1114,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Option + m_Text: Options --- !u!222 &1333215637 CanvasRenderer: m_ObjectHideFlags: 0 @@ -1326,3 +1370,4 @@ SceneRoots: - {fileID: 1059973423} - {fileID: 2021776756} - {fileID: 1211020662} + - {fileID: 1245127445} diff --git a/Assets/Scripts/Map Control/PropsSystem.cs b/Assets/Scripts/Map Control/PropsSystem.cs index bb7175f8..8521ec97 100644 --- a/Assets/Scripts/Map Control/PropsSystem.cs +++ b/Assets/Scripts/Map Control/PropsSystem.cs @@ -108,7 +108,7 @@ private async Task EmitPropsToServer(List propsPositionsString) try { Debug.Log("Emitting props to server..."); - await clientSocket.EmitAsync("rooms:create", propsPositionsString); + await clientSocket.EmitAsync("props:send", propsPositionsString); PropsSent = true; Debug.Log("Props successfully sent to server."); } diff --git a/Assets/Scripts/Player/PlayerController.cs b/Assets/Scripts/Player/PlayerController.cs index 8b4d239c..f37f5552 100644 --- a/Assets/Scripts/Player/PlayerController.cs +++ b/Assets/Scripts/Player/PlayerController.cs @@ -132,7 +132,6 @@ async void SendData(string channel, string data) try { await clientSocket.EmitAsync(channel, data); - Debug.Log("Data sent: " + $"{channel}|{data}"); } catch (Exception e) { diff --git a/Assets/Scripts/UI/MainMenu.cs b/Assets/Scripts/UI/MainMenu.cs index a0d691e6..d0fe65b9 100644 --- a/Assets/Scripts/UI/MainMenu.cs +++ b/Assets/Scripts/UI/MainMenu.cs @@ -7,15 +7,24 @@ public class MainMenu : MonoBehaviour { public string selectedScene; - public void QuitGame(){ + private SocketIOUnity clientSocket; - Application.Quit(); + + void Start() + { + clientSocket = SocketManager.Instance.ClientSocket; } - public void StartRoom(){ + public void QuitGame() + { + + Application.Quit(); + } - - SceneManager.LoadScene(selectedScene); + public async void StartRoom() + { + await clientSocket.EmitAsync("rooms:create"); + SceneManager.LoadScene(selectedScene); } } diff --git a/Assets/Scripts/UI/PauseMenu.cs b/Assets/Scripts/UI/PauseMenu.cs index f3bdf5b9..4f764d19 100644 --- a/Assets/Scripts/UI/PauseMenu.cs +++ b/Assets/Scripts/UI/PauseMenu.cs @@ -8,7 +8,8 @@ public class PauseMenu : MonoBehaviour public static bool gameIsPaused = false; public GameObject pauseMenuUI; - void Update(){ + void Update() + { if (Input.GetKeyDown(KeyCode.Escape)) { @@ -25,7 +26,8 @@ void Paused() gameIsPaused = true; } - public void Resume(){ + public void Resume() + { pauseMenuUI.SetActive(false); Time.timeScale = 1; gameIsPaused = false; @@ -34,10 +36,10 @@ public void Resume(){ public void LoadMainMenu() { Resume(); - GameObject player = GameObject.FindWithTag("Player"); - if (player != null) Destroy(player.gameObject); + GameObject socket = GameObject.FindWithTag("Temporary"); + if (socket != null) Destroy(socket.gameObject); SceneManager.LoadScene("Menu"); - + } } diff --git a/Assets/Scripts/WaitingTrapper.cs b/Assets/Scripts/WaitingTrapper.cs new file mode 100644 index 00000000..130a5144 --- /dev/null +++ b/Assets/Scripts/WaitingTrapper.cs @@ -0,0 +1,178 @@ +using System; +using UnityEngine; +using UnityEngine.UI; +using SocketIOClient; +using CandyCoded.env; +using Newtonsoft.Json.Linq; +using System.Collections; + +public class WaitingTrapper : MonoBehaviour +{ + private SocketIOUnity clientSocket; + private bool gamePaused = true; + + private GameObject overlay; + private Text messageText; + private Text codeText; + + public Font messageFont; + public PlayerMovement playerMovement; + + private string roomCode; + private bool trapperJoined = false; + private bool codeChanged = false; + private bool coroutineStarted = false; + + void Start() + { + clientSocket = SocketManager.Instance.ClientSocket; + CreateOverlay(); + BlockPlayerMovement(); + RegisterSocketEvents(); + } + + private void RegisterSocketEvents() + { + clientSocket.On("trapper:join", _ => OnTrapperJoin()); + clientSocket.On("rooms:create", response => OnRoomCreate(response)); + } + + private void OnTrapperJoin() + { + Debug.Log("Trapper joined the room!"); + trapperJoined = true; + } + + private void OnRoomCreate(SocketIOResponse response) + { + Debug.Log("Room created!"); + JArray roomDataArray = JArray.Parse(response.ToString()); + roomCode = roomDataArray[0]["code"].Value(); + + if (!string.IsNullOrEmpty(roomCode)) + { + codeChanged = true; + } + } + + private void CopyRoomCodeToClipboard() + { + try + { + GUIUtility.systemCopyBuffer = roomCode; + Debug.Log("Room code copied to clipboard: " + roomCode); + } + catch (Exception e) + { + Debug.LogError("Failed to copy to clipboard: " + e.Message); + } + } + + private void CreateOverlay() + { + var canvasObject = CreateCanvas(); + overlay = CreateOverlayImage(canvasObject); + messageText = CreateTextObject(canvasObject, "Waiting for trapper to join...", 50, Color.red, new Vector2(0.5f, 0.5f)); + codeText = CreateTextObject(canvasObject, "Waiting for the room code...", 30, Color.white, new Vector2(0.5f, 0.1f)); + } + + private GameObject CreateCanvas() + { + var canvasObject = new GameObject("OverlayCanvas"); + var canvas = canvasObject.AddComponent(); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + canvasObject.AddComponent(); + return canvasObject; + } + + private GameObject CreateOverlayImage(GameObject parent) + { + var overlay = new GameObject("OverlayImage"); + overlay.transform.parent = parent.transform; + + var overlayImage = overlay.AddComponent(); + overlayImage.color = new Color(0, 0, 0, 0.8f); + + var overlayRect = overlay.GetComponent(); + overlayRect.anchorMin = Vector2.zero; + overlayRect.anchorMax = Vector2.one; + overlayRect.offsetMin = Vector2.zero; + overlayRect.offsetMax = Vector2.zero; + + return overlay; + } + + private Text CreateTextObject(GameObject parent, string text, int fontSize, Color color, Vector2 anchor) + { + var textObject = new GameObject(text + "Text"); + textObject.transform.parent = parent.transform; + var textComponent = textObject.AddComponent(); + textComponent.text = text; + textComponent.font = messageFont; + textComponent.fontSize = fontSize; + textComponent.color = color; + textComponent.alignment = TextAnchor.MiddleCenter; + + var textRect = textObject.GetComponent(); + textRect.anchorMin = anchor; + textRect.anchorMax = anchor; + textRect.sizeDelta = new Vector2(800, 200); + textRect.anchoredPosition = Vector2.zero; + + return textComponent; + } + + private void BlockPlayerMovement() + { + gamePaused = true; + if (playerMovement != null) + { + playerMovement.enabled = false; + } + } + + private void ResumePlayerMovement() + { + gamePaused = false; + if (playerMovement != null) + { + playerMovement.enabled = true; + } + Destroy(overlay.transform.parent.gameObject); + Destroy(this); + } + + private IEnumerator StartCountdown(int countdownTime) + { + while (countdownTime > 0) + { + Debug.Log("Countdown: " + countdownTime); + messageText.text = $"Trapper joined! Time to place traps: {countdownTime}s"; + yield return new WaitForSecondsRealtime(1); + countdownTime--; + } + ResumePlayerMovement(); + } + + void Update() + { + if (trapperJoined) + { + trapperJoined = false; // Reset the flag + coroutineStarted = true; + StartCoroutine(StartCountdown(5)); // Start countdown for traps + } + + if (gamePaused && !coroutineStarted) + { + messageText.text = "Waiting for trapper to join..."; + } + + if (codeChanged) + { + codeChanged = false; + codeText.text = $"Room Code: {roomCode} (copied to clipboard)"; + CopyRoomCodeToClipboard(); + } + } +} diff --git a/Assets/Scripts/WaitingTrapper.cs.meta b/Assets/Scripts/WaitingTrapper.cs.meta new file mode 100644 index 00000000..6154e7f6 --- /dev/null +++ b/Assets/Scripts/WaitingTrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 804016391dce0430d92408fa75348918 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index eed87517..76c2eac3 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -10,6 +10,7 @@ TagManager: - Map - Props - Dialogue + - Temporary layers: - Default - TransparentFX