using Cinemachine; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Moloch { public class CameraManager : MonoBehaviour { [SerializeField] public List m_VirtualCameras = new List(); private CinemachineBrain m_Brain; private CinemachineBlend m_DefaultBlend; private int m_CameraWaitPeriod; [Range(1, 30)] [SerializeField] public int m_MinWaitPeriod; [Range(1, 30)] [SerializeField] public int m_MaxWaitPeriod; private void OnEnable() { m_Brain = GetComponent(); if (m_VirtualCameras.Count == 0) Debug.LogError("No virtual cameras found"); } private void Start() { SetInitialCameraState(); SetNewWaitPeriod(); StartCoroutine(StartCameraCycle()); } private IEnumerator StartCameraCycle() { yield return new WaitForSecondsRealtime(m_CameraWaitPeriod); SetNewWaitPeriod(); SetNewCamera(); StartCoroutine(StartCameraCycle()); } private void SetInitialCameraState() { // Sets all cameras to false, bar the first one in the list foreach (var cam in m_VirtualCameras) { cam.Priority = 2; } m_VirtualCameras[0].Priority = 1; } private void SetNewWaitPeriod() { m_CameraWaitPeriod = (int)Random.Range(m_MinWaitPeriod, m_MaxWaitPeriod); } private void SetNewCamera() { // Logic to set new camera // List to store inactive cameras List inactiveCameras = new List(); // Find inactive cameras foreach (var cam in m_VirtualCameras) { if (cam.Priority == 2) { inactiveCameras.Add(cam); } } // If there are inactive cameras, choose one randomly and activate it if (inactiveCameras.Count > 0) { // Select a random index from the list of inactive cameras int randomIndex = Random.Range(0, inactiveCameras.Count); // Deactivate the currently active camera foreach (var cam in m_VirtualCameras) { if (cam.Priority == 1) { cam.Priority = 2; break; // Stop iterating once we deactivate one camera } } // Activate the randomly chosen inactive camera inactiveCameras[randomIndex].Priority = 1; } else { // If all cameras are active, log a warning Debug.LogWarning("All cameras are already active."); } } } }