using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { public static GameManager Instance { get; private set; } [Header("Обери тип симуляції")] public bool isSimulation = true; [Header("Вид")] public bool isView2 = false; [Header("Герой")] public bool useDrone = false; [Header("Камери")] public Camera davidCamera; public Camera droneCamera; public Camera droneInnerCamera; public Camera mainCamera; [Header("Об'єкти")] public GameObject david; public GameObject drone; [HideInInspector] public double simV = 2000.0; [HideInInspector] public double simVDrone = 8000.0; [HideInInspector] public double view2Jitter = 0.0; private bool _lastIsView2; private bool _lastUseDrone; private Vector3 _davidStartPos; private Vector3 _droneStartPos; void Awake() { if (Instance == null) Instance = this; else Destroy(gameObject); GenerateSimV(); } public void GenerateSimV() { simV = 500.0 + Random.Range(0f, 1000f); simVDrone = 2000.0 + Random.Range(0f, 2000f); view2Jitter = Random.Range(-5.0f, 5.0f); } void Start() { if (david != null) _davidStartPos = david.transform.position; if (drone != null) _droneStartPos = drone.transform.position; _lastIsView2 = isView2; _lastUseDrone = useDrone; ApplySettings(); } void Update() { if (_lastIsView2 != isView2 || _lastUseDrone != useDrone) { _lastIsView2 = isView2; _lastUseDrone = useDrone; ResetAll(); } } void ResetAll() { GenerateSimV(); FindObjectOfType()?.Reset(); FindObjectOfType()?.Reset(); FindObjectOfType()?.HideRestart(); FindObjectOfType()?.FullReset(); LightWave[] waves = FindObjectsOfType(true); foreach (var wave in waves) { wave.ResetSize(); wave.ResetText(); wave.gameObject.SetActive(false); } if (david != null) david.transform.position = _davidStartPos; if (drone != null) drone.transform.position = _droneStartPos; ApplySettings(); if (david != null && david.activeInHierarchy) { var hm = david.GetComponentInChildren(); if (hm != null) hm.ResumeMoving(); var anim = david.GetComponent(); if (anim != null) { anim.Rebind(); anim.Play("FastRun", 0, 0f); anim.Update(0f); } } if (drone != null && drone.activeInHierarchy) { var dm = drone.GetComponentInChildren(); if (dm != null) dm.ResumeMoving(); } } #if UNITY_EDITOR void OnValidate() { UnityEditor.EditorApplication.delayCall += () => { if (this == null) return; ApplySettings(); }; } #endif void ApplySettings() { if (david != null) david.SetActive(!useDrone); if (drone != null) drone.SetActive(useDrone); if (isView2) { if (mainCamera != null) mainCamera.enabled = true; if (davidCamera != null) davidCamera.enabled = false; if (droneCamera != null) droneCamera.enabled = false; if (droneInnerCamera != null) droneInnerCamera.enabled = false; } else { if (mainCamera != null) mainCamera.enabled = false; if (useDrone) { if (droneCamera != null) droneCamera.enabled = true; if (droneInnerCamera != null) droneInnerCamera.enabled = true; if (davidCamera != null) davidCamera.enabled = false; } else { if (davidCamera != null) davidCamera.enabled = true; if (droneCamera != null) droneCamera.enabled = false; if (droneInnerCamera != null) droneInnerCamera.enabled = false; } } } }