211 lines
6.5 KiB
C#
211 lines
6.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
public class TrafficLightsPuzzleController : MonoBehaviour
|
|
{
|
|
public Transform medeaTrafficLightsStartPos;
|
|
|
|
public bool lightsAreGreenOnStart;
|
|
public bool useOrangeLight; // New optional orange light setting
|
|
|
|
public float greenLightsTimerMin = 1f;
|
|
public float greenLightsTimerMax = 1.5f;
|
|
|
|
public float redLightsTimerMin = 1f;
|
|
public float redLightsTimerMax = 1.5f;
|
|
|
|
public float orangeLightsTimerMin = 0.5f; // Shorter transition time
|
|
public float orangeLightsTimerMax = 0.7f;
|
|
|
|
public List<ChangeLightColour> changeLightColourToGreen;
|
|
public List<ChangeLightColour> changeLightColourToRed;
|
|
public List<ChangeLightColour> changeLightColourToDefault;
|
|
public List<ChangeLightColour> changeLightColourToOrange; // Added for orange light
|
|
|
|
public EventTrigger OrangeLightEvent;
|
|
private bool orangleLightEventExecuted;
|
|
|
|
public bool sanityShouldBeDecreasingWhileInPuzzle;
|
|
public GameObject lightsGroupWithSanity;
|
|
private SanityActivation[] sanity;
|
|
|
|
private static TrafficLightsPuzzleController _instance;
|
|
public static TrafficLightsPuzzleController GetInstance() { return _instance; }
|
|
|
|
void Awake()
|
|
{
|
|
if (!_instance)
|
|
{
|
|
_instance = this;
|
|
}
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (lightsAreGreenOnStart)
|
|
{
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreGreen = true;
|
|
}
|
|
|
|
if (sanityShouldBeDecreasingWhileInPuzzle)
|
|
{
|
|
sanity = lightsGroupWithSanity.GetComponentsInChildren<SanityActivation>();
|
|
}
|
|
}
|
|
|
|
private void SanityEnable()
|
|
{
|
|
if (sanityShouldBeDecreasingWhileInPuzzle)
|
|
{
|
|
foreach (var _sanity in sanity)
|
|
{
|
|
_sanity.EnableSanityTrigger();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SanityDisable()
|
|
{
|
|
if (sanityShouldBeDecreasingWhileInPuzzle)
|
|
{
|
|
foreach (var _sanity in sanity)
|
|
{
|
|
_sanity.DisableSanityTrigger();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void StartRedTrafficLights()
|
|
{
|
|
print("Started red traffic lights");
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.medeaTrafficLightsStartPos = medeaTrafficLightsStartPos;
|
|
StartCoroutine(LightsAreRed());
|
|
SanityDisable();
|
|
}
|
|
|
|
public void StartGreenTrafficLights()
|
|
{
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.medeaTrafficLightsStartPos = medeaTrafficLightsStartPos;
|
|
StartCoroutine(LightsAreGreen());
|
|
SanityDisable();
|
|
}
|
|
|
|
public void StopTrafficLights()
|
|
{
|
|
StopAllCoroutines();
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreGreen = true;
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreOrange = false;
|
|
ChangeLampLightColorToDefault();
|
|
SanityEnable();
|
|
if (MedeaDemonicEnemyBehaviour.GetInstance() != null)
|
|
{
|
|
MedeaDemonicEnemyBehaviour.GetInstance().TrafficLightPuzzleSolved();
|
|
}
|
|
}
|
|
|
|
IEnumerator LightsAreGreen()
|
|
{
|
|
print("Lights Are Green Coroutine runs");
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreGreen = true;
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreOrange = false;
|
|
ChangeLampLightColorToGreen();
|
|
float waitTime = Random.Range(greenLightsTimerMin, greenLightsTimerMax);
|
|
Debug.Log("Wait time for green light is: " + waitTime);
|
|
yield return new WaitForSeconds(waitTime);
|
|
|
|
if (useOrangeLight)
|
|
{
|
|
StartCoroutine(LightsAreOrange(false)); // Transition from green to red
|
|
}
|
|
else
|
|
{
|
|
StartCoroutine(LightsAreRed());
|
|
}
|
|
}
|
|
|
|
IEnumerator LightsAreRed()
|
|
{
|
|
print("Lights Are Red Coroutine runs");
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreGreen = false;
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreOrange = false;
|
|
ChangeLampLightColorToRed();
|
|
float waitTime = Random.Range(redLightsTimerMin, redLightsTimerMax);
|
|
Debug.Log("Wait time for red light is: " + waitTime);
|
|
yield return new WaitForSeconds(waitTime);
|
|
|
|
if (useOrangeLight)
|
|
{
|
|
StartCoroutine(LightsAreOrange(true)); // Transition from red to green
|
|
}
|
|
else
|
|
{
|
|
StartCoroutine(LightsAreGreen());
|
|
}
|
|
}
|
|
|
|
IEnumerator LightsAreOrange(bool transitioningToGreen)
|
|
{
|
|
print("Lights Are Orange Coroutine runs");
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreGreen = false;
|
|
PuzzlesManager.GetInstance().trafficLightsPuzzleData.lightsAreOrange = true;
|
|
ChangeLampLightColorToOrange();
|
|
float waitTime = Random.Range(orangeLightsTimerMin, orangeLightsTimerMax);
|
|
Debug.Log("Wait time for orange light is: " + waitTime);
|
|
if (OrangeLightEvent != null)
|
|
{
|
|
if (orangleLightEventExecuted == false)
|
|
{
|
|
OrangeLightEvent.Invoke();
|
|
orangleLightEventExecuted = true;
|
|
}
|
|
}
|
|
yield return new WaitForSeconds(waitTime);
|
|
orangleLightEventExecuted = false;
|
|
if (transitioningToGreen)
|
|
{
|
|
StartCoroutine(LightsAreGreen());
|
|
}
|
|
else
|
|
{
|
|
StartCoroutine(LightsAreRed());
|
|
}
|
|
}
|
|
|
|
public void ChangeLampLightColorToGreen()
|
|
{
|
|
foreach (var _changeLightColourToGreen in changeLightColourToGreen)
|
|
{
|
|
_changeLightColourToGreen.ChangeColour();
|
|
print("Changing lamp renderers to Green");
|
|
}
|
|
}
|
|
|
|
public void ChangeLampLightColorToRed()
|
|
{
|
|
foreach (var _changeLightColourToRed in changeLightColourToRed)
|
|
{
|
|
_changeLightColourToRed.ChangeColour();
|
|
print("Changing lamp renderers to Red");
|
|
}
|
|
}
|
|
|
|
public void ChangeLampLightColorToDefault()
|
|
{
|
|
foreach (var _changeLightColourToDefault in changeLightColourToDefault)
|
|
{
|
|
_changeLightColourToDefault.ChangeColour();
|
|
print("Changing lamp renderers to Default");
|
|
}
|
|
}
|
|
|
|
public void ChangeLampLightColorToOrange()
|
|
{
|
|
foreach (var _changeLightColourToOrange in changeLightColourToOrange)
|
|
{
|
|
_changeLightColourToOrange.ChangeColour();
|
|
print("Changing lamp renderers to Orange");
|
|
}
|
|
}
|
|
} |