Files
2026-03-17 18:10:00 +02:00

147 lines
4.2 KiB
C#

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<HeroTrigger>()?.Reset();
FindObjectOfType<DroneTrigger>()?.Reset();
FindObjectOfType<RestartManager>()?.HideRestart();
FindObjectOfType<RewindManager>()?.FullReset();
LightWave[] waves = FindObjectsOfType<LightWave>(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<HeroMovement>();
if (hm != null) hm.ResumeMoving();
var anim = david.GetComponent<Animator>();
if (anim != null)
{
anim.Rebind();
anim.Play("FastRun", 0, 0f);
anim.Update(0f);
}
}
if (drone != null && drone.activeInHierarchy)
{
var dm = drone.GetComponentInChildren<DroneMovement>();
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;
}
}
}
}