using UnityEngine; using GeoSus.Client; using Subsystems; using System.Collections; using System; using TMPro; using System.Collections.Generic; /* GameManager - hlavní třida pro správu hry GameManager_Network - subsystém pro správu komunikace se serverem GameManager_Game - subsystém pro správu logiky hry (sabotáže, tasky, atd.) GameManager_Map - subsystém pro správu mapy a prostředí GameManager_Input - subsystém pro správu vstupu od hráče GameManager_UI - subsystém pro správu uživatelského rozhraní GamaManager_Stats - subsystém pro správu statistik pro server */ public class GameManager : MonoBehaviour { [Header("Subsystems")] protected GameManager_Network networkSubsystem; protected GameManager_UI uiSubsystem; protected GameManager_Map mapSubsystem; protected GameManager_Input inputSubsystem; protected GameManager_Game gameSubsystem; protected GameClient gameClient; [Header("Player Info")] public string displayName; [Header("UI Elements")] public Canvas JoinCreateLobby; public Canvas InLobby; public Canvas LoadingScreen; public Canvas GameScreen; [Header("Map")] public GameObject MapCenterPoint; public BuildingSettings buildingSettings; public PathwaySettings pathwaySettings; public AreaSettings areaSettings; [Header("GPS")] public GameObject Player; [Header("Debug")] public bool testMode = false; private GameClient _secondClient; private GameClient _thirdClient; private GameManager_Network _secondNetwork; private GameManager_Network _thirdNetwork; [Header("Tasks")] public List AvailableTasks = new List(); public StationSettings settings = new StationSettings(); void Start() { DontDestroyOnLoad(this); if (displayName == null || displayName == "") { displayName = GenerateUsername(); } if (testMode) { _secondClient = new GameClient(GenerateUUID(), GenerateUsername()); _secondNetwork = new GameManager_Network(_secondClient); _thirdClient = new GameClient(GenerateUUID(), GenerateUsername()); _thirdNetwork = new GameManager_Network(_thirdClient); _secondNetwork.OpenConection(); _thirdNetwork.OpenConection(); } gameClient = new GameClient(GenerateUUID(), displayName); uiSubsystem = new GameManager_UI(gameClient, JoinCreateLobby, InLobby, LoadingScreen, GameScreen); networkSubsystem = new GameManager_Network(gameClient); mapSubsystem = new GameManager_Map(gameClient, MapCenterPoint, buildingSettings, pathwaySettings, areaSettings); inputSubsystem = new GameManager_Input(gameClient, Player, testMode); gameSubsystem = new GameManager_Game(gameClient, Player, MapCenterPoint, AvailableTasks); networkSubsystem.OpenConection(); } private void Update() { if (gameClient.CurrentLobbyState != null) { uiSubsystem.UpdateLobbyUI(); } try { if (gameClient.CurrentLobbyState.MapDataReady) { mapSubsystem.BuildMap(); gameClient.CurrentLobbyState.MapDataReady = false; } } catch (NullReferenceException ex) { } inputSubsystem.positionCheck(); } protected string GenerateUUID() { string UUID = System.Guid.NewGuid().ToString(); Debug.Log(UUID); return UUID; } protected string GenerateUsername() { string Username = UnityEngine.Random.Range(0,10).ToString() + UnityEngine.Random.Range(0, 10).ToString() + UnityEngine.Random.Range(0, 10).ToString() + UnityEngine.Random.Range(0, 10).ToString(); Debug.Log(Username); return Username; } public void CreateLobbyButton() { networkSubsystem.CrateLobby(50.7727264, 15.0719876); if (testMode) { StartCoroutine(ConnectTestClients()); } } public void JoinLobbyButton() { TMP_InputField joinCode = JoinCreateLobby.transform.Find("InputCode").GetComponent(); if (joinCode.text != null && joinCode.text != "") { networkSubsystem.JoinLobby(joinCode.text); } else { Debug.Log("Join code is empty!"); } } public void LeaveLobbyButton() { networkSubsystem.LeaveLobby(); } public void StartGameButton() { networkSubsystem.StartGame(); } public void Interact() { //TODO: Interakce s úkoly } void OnApplicationQuit() { gameClient.Disconnect(); _secondClient?.Disconnect(); _thirdClient?.Disconnect(); } IEnumerator ConnectTestClients() { yield return new WaitForSeconds(2f); _secondNetwork.JoinLobby(gameClient.CurrentLobbyState.JoinCode); _thirdNetwork.JoinLobby(gameClient.CurrentLobbyState.JoinCode); } }