Files
HauntedBloodlines/Assets/Scripts/Managers/StorylineManagers/DemoStorylineManager.cs
2025-05-29 22:31:40 +03:00

791 lines
48 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class DemoStorylineManager : MonoBehaviour
{
[Header("Mirror Library")]
[SerializeField] private Transform playerNewGameStartPosition;
[SerializeField] private GameObject sceneRoot_MirrorLibrary;
[SerializeField] private GameObject libraryRoot;
[SerializeField] private GameObject hallwayBeforeLibrary;
[SerializeField] private GameObject hallwayAfterLibrary;
[SerializeField] private GameObject sceneRoot_ChildrenLoops;
[Header("Children Loops")]
[SerializeField] ManageDoorsInRoom manageDoorsInMainHall;
[SerializeField] ManageDoorsInRoom manageDoorsInBedroomsLoop9;
[SerializeField] ManageWindowsInRoom manageWindowsInMainHall;
[SerializeField] ManageWindowsInRoom manageWindowsInBedroomsLoop9;
[SerializeField] ManageLightSwitchesInRoom manageLightSwitchesInMainHall;
[SerializeField] ManageLightSwitchesInRoom manageLightSwitchesInLoopedRoomBasement;
public bool demoBuild;
public GameObject[] eventTriggers;
[SerializeField]
GameObject SceneRoot_ChildrenLoops;
private void Start()
{
eventTriggers = GameObject.FindGameObjectsWithTag("Event");
StartCoroutine(CheckIfLoadIsCompleted());
}
IEnumerator CheckIfLoadIsCompleted()
{
while (LoadManager.GetInstance().LoadingGame || LoadManager.GetInstance().IsEnteringNewGame)
{
yield return null;
}
//When done loading:
string currentState = GameProgressManager.GetInstance().currentStorylineState;
if (Enum.IsDefined(typeof(ChildrenPastStorylineState), currentState))
{
childrenPastStorylineState = (ChildrenPastStorylineState)Enum.Parse(typeof(ChildrenPastStorylineState), GameProgressManager.GetInstance().currentStorylineState);
}
if (Enum.IsDefined(typeof(MirrorLibraryStorylineState), currentState))
{
mirrorLibraryStorylineState = (MirrorLibraryStorylineState)Enum.Parse(typeof(MirrorLibraryStorylineState), GameProgressManager.GetInstance().currentStorylineState);
}
UpdateStoryline();
}
public enum ChildrenPastStorylineState
{
None,
LoopedRoom0,
LoopedRoom1,
LoopedRoom2,
LoopedRoom3,
LoopedRoom4,
LoopedRoom5,
LoopedRoom6,
LoopedRoom6B,
LoopedRoom7,
LoopedRoom8,
LoopedRoom9,
LoopedRoom9_B,
LoopedRoom10,
LoopedRoom11,
LoopedRoom12,
LoopedRoom13,
LoopedRoom14,
LoopedRoom15,
LoopedRoom16,
LoopedRoom17,
LoopedRoom18
}
public ChildrenPastStorylineState childrenPastStorylineState = ChildrenPastStorylineState.LoopedRoom0;
public enum MirrorLibraryStorylineState
{
CheckLoad,
BeforeMirrorLibrary,
EnteredMirrorLibrary,
AfterMirrorLibrary,
MirrorLibrarySectionEnded
}
public MirrorLibraryStorylineState mirrorLibraryStorylineState = MirrorLibraryStorylineState.CheckLoad;
/// <summary>
/// Updates the storyline's gameplay. (For example what the current room the player is being in should do)
/// </summary>
public void UpdateStoryline()
{
#region Children Loops
bool stateChanged;
do
{
stateChanged = false;
print("Updating storyline! yas");
if (demoBuild == false)
{
switch (childrenPastStorylineState)
{
case ChildrenPastStorylineState.LoopedRoom0:
////Nothing needs to be set here. (Probably mhn to deneis kai kompo because we are talking about programming here [skull emoji])
////Kai telika eixa dikaio na mhn to desw kompo [skull emoji].
//MemorizeTemporarilyCurrentStorylineState();
//if (GameProgressManager.GetInstance().loadCurrentStorylineState) //If it should load the current storylinestate:
//{
// childrenPastStorylineState = (ChildrenPastStorylineState)Enum.Parse(typeof(ChildrenPastStorylineState), GameProgressManager.GetInstance().currentStorylineState);
// GameProgressManager.GetInstance().loadCurrentStorylineState = false;
//}
break;
case ChildrenPastStorylineState.LoopedRoom1:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
break;
case ChildrenPastStorylineState.LoopedRoom2:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//This event enables the trigger that when the player is going to pass through will make the planks fall from the balcony.
GameObject Loop2EventTrigger = GameObject.Find("Loop2EventTrigger");
Loop2EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom3:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//This event enables medea and plays her walking animation.
GameObject Loop3EventTrigger = GameObject.Find("Loop3EventTrigger");
Loop3EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom4:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Force the first (0 window) window to Open Pos when the player enters the loop.
manageWindowsInMainHall.window[0].ForceWindowToOpenPosition();
manageWindowsInMainHall.window[0].CanOpenWindow = true;
GameObject Loop4CloseWindowEvent = GameObject.Find("Loop4CloseWindow Event");
manageWindowsInMainHall.window[0].onWindowDown += () => Loop4CloseWindowEvent.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom5:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Light should break at the beggining of the hall.
GameObject Loop5EventTrigger = GameObject.Find("Loop5EventTrigger");
Loop5EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom6:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
GameObject Loop6EventTrigger = GameObject.Find("Loop6EventTrigger");
Loop6EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom7:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[5].LockDoor();
//Unlocks all windows at the beginning of the loop.
UnlockWindowsForBeginningOfLoop();
//Forces all the windows to open in the main loop hall.
ForceToOpenWindowsForBeginningOfLoop();
GameObject Loop7WindowPuzzle = GameObject.Find("Loop7WindowPuzzle");
//Checks the combination for every window the player is dragging down. If the combination is correct and all the windows are down then the basement door unlocks and all the windows are locking.
manageWindowsInMainHall.window[0].onWindowDown += () => Loop7WindowPuzzle.GetComponent<WindowPuzzle>().CheckPuzzleCombination();
manageWindowsInMainHall.window[1].onWindowDown += () => Loop7WindowPuzzle.GetComponent<WindowPuzzle>().CheckPuzzleCombination();
manageWindowsInMainHall.window[2].onWindowDown += () => Loop7WindowPuzzle.GetComponent<WindowPuzzle>().CheckPuzzleCombination();
break;
case ChildrenPastStorylineState.LoopedRoom8:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Unlock bedroom hall door.
manageDoorsInMainHall.door[3].UnlockDoor();
//Lock basmenet door because player needs to find the key from the bedroom hall's drawer.
manageDoorsInMainHall.door[5].LockDoor();
break;
case ChildrenPastStorylineState.LoopedRoom9:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
GameObject Loop9EventTrigger = GameObject.Find("Loop9EventTrigger");
//Invokes event in order to enable the trigger for the piano to start playing.
Loop9EventTrigger.GetComponent<EventTrigger>().Invoke();
//Opens the door for the bedroom hall:
manageDoorsInMainHall.door[3].UnlockDoor();
//Opens the door for the bedroom:
manageDoorsInBedroomsLoop9.door[0].UnlockDoor();
GameObject EventTriggerLoop9Bedroom = GameObject.Find("EventTrigger LoopedRoom (9) (Bedroom)");
//Invokes the event that disables the piano and unlocks the door to get to the bedroom hall again.
manageWindowsInBedroomsLoop9.window[0].onWindowDown += () => EventTriggerLoop9Bedroom.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom10:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
GameObject Loop10EventTrigger = GameObject.Find("Loop10EventTrigger");
//Invokes event in order to enable the triggers for this loop.
Loop10EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom11:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
GameObject loop11EventTriggerGO = GameObject.Find("Loop11EventTrigger");
EventTrigger loop11EventTrigger = loop11EventTriggerGO.GetComponent<EventTrigger>();
//Invokes event....
loop11EventTrigger.Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom12:
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
manageDoorsInMainHall.door[3].UnlockDoor();
//Opens the door for the bedroom:
manageDoorsInBedroomsLoop9.door[0].UnlockDoor();
GameObject Loop12EventTriggerGO = GameObject.Find("Loop12EventTrigger");
EventTrigger loop12EventTrigger = Loop12EventTriggerGO.GetComponent<EventTrigger>();
loop12EventTrigger.Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom13:
break;
case ChildrenPastStorylineState.LoopedRoom14:
break;
case ChildrenPastStorylineState.LoopedRoom15:
break;
case ChildrenPastStorylineState.LoopedRoom16:
break;
case ChildrenPastStorylineState.LoopedRoom17:
break;
case ChildrenPastStorylineState.LoopedRoom18:
break;
default:
break;
}
}
else
{
switch (childrenPastStorylineState)
{
case ChildrenPastStorylineState.None:
//Nothing neets to be set here. (Probably mhn to deneis kai kompo because we are talking about programming here [skull emoji])
//Kai telika eixa dikaio na mhn to desw kompo [skull emoji].
string currentState = GameProgressManager.GetInstance().currentStorylineState;
if (GameProgressManager.GetInstance().loadCurrentStorylineState) //If it should load the current storylinestate:
{
if (Enum.IsDefined(typeof(ChildrenPastStorylineState), currentState))
{
childrenPastStorylineState = (ChildrenPastStorylineState)Enum.Parse(typeof(ChildrenPastStorylineState), GameProgressManager.GetInstance().currentStorylineState);
GameProgressManager.GetInstance().loadCurrentStorylineState = false;
stateChanged = true;
}
else
{
print("Children loops state does not match!");
}
}
break;
case ChildrenPastStorylineState.LoopedRoom0:
SceneRoot_ChildrenLoops.SetActive(true);
//Nothing neets to be set here. (Probably mhn to deneis kai kompo because we are talking about programming here [skull emoji])
//Kai telika eixa dikaio na mhn to desw kompo [skull emoji].
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
//if (GameProgressManager.GetInstance().loadCurrentStorylineState) //If it should load the current storylinestate:
//{
// childrenPastStorylineState = (ChildrenPastStorylineState)Enum.Parse(typeof(ChildrenPastStorylineState), GameProgressManager.GetInstance().currentStorylineState);
// GameProgressManager.GetInstance().loadCurrentStorylineState = false;
//}
BackgroundSoundsManager.GetInstance().PlayHouseSounds();
CutscenesManager.GetInstance().AssignPlayerToTimelines();
manageDoorsInMainHall.door[0].LockDoor();
print("Is trying to assign player to the timelines of Children Loops scene");
break;
case ChildrenPastStorylineState.LoopedRoom1:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//GameObject Loop1EventTrigger = GameObject.Find("Loop1EventTrigger");
GameObject Loop1EventTrigger = FindEventTriggerGameObjectByName("Loop1EventTrigger");
Loop1EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom2:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//This event enables the trigger that when the player is going to pass through will make the planks fall from the balcony.
//GameObject Loop2EventTrigger = GameObject.Find("Loop2EventTrigger");
GameObject Loop2EventTrigger = FindEventTriggerGameObjectByName("Loop2EventTrigger");
Loop2EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom3:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//This event enables medea and plays her walking animation.
//GameObject Loop3EventTrigger = GameObject.Find("Loop3EventTrigger");
GameObject Loop3EventTrigger = FindEventTriggerGameObjectByName("Loop3EventTrigger");
Loop3EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom4:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
manageDoorsInMainHall.door[5].LockDoor();
//Force the first (0 window) window to Open Pos when the player enters the loop.
manageWindowsInMainHall.window[0].ForceWindowToOpenPosition();
manageWindowsInMainHall.window[0].CanOpenWindow = true;
//GameObject Loop4EventTrigger = GameObject.Find("Loop4EventTrigger");
GameObject Loop4EventTrigger = FindEventTriggerGameObjectByName("Loop4EventTrigger");
Loop4EventTrigger.GetComponent<EventTrigger>().Invoke();
//GameObject Loop4CloseWindowEvent = GameObject.Find("Loop4CloseWindow Event");
GameObject Loop4CloseWindowEvent = FindEventTriggerGameObjectByName("Loop4CloseWindow Event");
manageWindowsInMainHall.window[0].onWindowDown += () => Loop4CloseWindowEvent.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom5:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
//Light should break at the beggining of the hall.
//GameObject Loop5EventTrigger = GameObject.Find("Loop5EventTrigger");
GameObject Loop5EventTrigger = FindEventTriggerGameObjectByName("Loop5EventTrigger");
Loop5EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom6:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//GameObject Loop6EventTrigger = GameObject.Find("Loop6EventTrigger");
GameObject Loop6EventTrigger = FindEventTriggerGameObjectByName("Loop6EventTrigger");
Loop6EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom6B:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Lock basmenet door
manageDoorsInMainHall.door[5].LockDoor();
GameObject Loop6BEventTrigger = FindEventTriggerGameObjectByName("Loop6BEventTrigger");
Loop6BEventTrigger.GetComponent<EventTrigger>().Invoke();
#region Light Switch Puzzle
GameObject Loop6BLightSwitchesPuzzle = FindEventTriggerGameObjectByName("Loop6BLightSwitchesPuzzle");
manageLightSwitchesInMainHall.lightSwitch[0].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[1].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[2].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[3].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[4].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[5].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[6].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[7].onLightSwitchTurnedOn += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[0].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[1].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[2].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[3].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[4].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[5].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[6].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[7].onLightSwitchTurnedOff += Loop6BLightSwitchesPuzzle.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
#region Basement
GameObject Loop6BLightSwitchEventBasement_Basement = FindEventTriggerGameObjectByName("Loop6BLightSwitchEventBasement");
manageLightSwitchesInLoopedRoomBasement.lightSwitch[0].onLightSwitchTurnedOn += Loop6BLightSwitchEventBasement_Basement.GetComponent<LightSwitchEvent>().OnLightOn;
manageLightSwitchesInLoopedRoomBasement.lightSwitch[0].onLightSwitchTurnedOff += Loop6BLightSwitchEventBasement_Basement.GetComponent<LightSwitchEvent>().OnLightOff;
#endregion
#endregion
break;
case ChildrenPastStorylineState.LoopedRoom7:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
manageDoorsInMainHall.door[5].LockDoor();
//Unlocks all windows at the beginning of the loop.
UnlockWindowsForBeginningOfLoop();
//Forces all the windows to open in the main loop hall.
ForceToOpenWindowsForBeginningOfLoop();
//DELETE THIS!!!!!
#region UNDER CONSTRUCTION FOR 15/12/2023 BUILD (DELETE ME!!!)
//GameObject Loop7EventTrigger = GameObject.Find("Loop7EventTrigger");
GameObject Loop7EventTrigger = FindEventTriggerGameObjectByName("Loop7EventTrigger");
Loop7EventTrigger.GetComponent<EventTrigger>().Invoke();
#endregion
//--------------------------------------------------------
//GameObject Loop7WindowPuzzle = GameObject.Find("Loop7WindowPuzzle");
GameObject Loop7WindowPuzzle = FindEventTriggerGameObjectByName("Loop7WindowPuzzle");
//Checks the combination for every window the player is dragging down. If the combination is correct and all the windows are down then the basement door unlocks and all the windows are locking.
manageWindowsInMainHall.window[0].onWindowDown += () => Loop7WindowPuzzle.GetComponent<WindowPuzzle>().CheckPuzzleCombination();
manageWindowsInMainHall.window[1].onWindowDown += () => Loop7WindowPuzzle.GetComponent<WindowPuzzle>().CheckPuzzleCombination();
manageWindowsInMainHall.window[2].onWindowDown += () => Loop7WindowPuzzle.GetComponent<WindowPuzzle>().CheckPuzzleCombination();
#region Unsubscribe Light Switches from last puzzle
GameObject Loop6BLightSwitchesPuzzleUnsubscribe = FindEventTriggerGameObjectByName("Loop6BLightSwitchesPuzzle");
manageLightSwitchesInMainHall.lightSwitch[0].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[1].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[2].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[3].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[4].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[5].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[6].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[7].onLightSwitchTurnedOn -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[0].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[1].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[2].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[3].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[4].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[5].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[6].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
manageLightSwitchesInMainHall.lightSwitch[7].onLightSwitchTurnedOff -= Loop6BLightSwitchesPuzzleUnsubscribe.GetComponent<LightSwitchesPuzzle>().CheckPuzzleCombination;
#region Basement
GameObject Loop6BLightSwitchEventBasement_BasementUnsubscribe = FindEventTriggerGameObjectByName("Loop6BLightSwitchEventBasement");
manageLightSwitchesInLoopedRoomBasement.lightSwitch[0].onLightSwitchTurnedOn -= Loop6BLightSwitchEventBasement_BasementUnsubscribe.GetComponent<LightSwitchEvent>().OnLightOn;
manageLightSwitchesInLoopedRoomBasement.lightSwitch[0].onLightSwitchTurnedOff -= Loop6BLightSwitchEventBasement_BasementUnsubscribe.GetComponent<LightSwitchEvent>().OnLightOff;
#endregion
#endregion
break;
case ChildrenPastStorylineState.LoopedRoom8:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Unlock bedroom hall door.
manageDoorsInMainHall.door[3].UnlockDoor();
//Lock basmenet door because player needs to find the key from the bedroom hall's drawer.
manageDoorsInMainHall.door[5].LockDoor();
//GameObject Loop8EventTrigger = GameObject.Find("Loop8EventTrigger");
GameObject Loop8EventTrigger = FindEventTriggerGameObjectByName("Loop8EventTrigger");
//Invokes event in order to enable the trigger for the piano to start playing.
Loop8EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom9:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
//GameObject Loop9EventTrigger = GameObject.Find("Loop9EventTrigger");
GameObject Loop9EventTrigger = FindEventTriggerGameObjectByName("Loop9EventTrigger");
//Invokes event in order to enable the trigger for the piano to start playing.
Loop9EventTrigger.GetComponent<EventTrigger>().Invoke();
//Opens the door for the bedroom hall:
manageDoorsInMainHall.door[3].UnlockDoor();
//Opens the door for the bedroom:
manageDoorsInBedroomsLoop9.door[0].UnlockDoor();
GameObject EventTriggerLoop9Bedroom = GameObject.Find("EventTrigger LoopedRoom (9) (Bedroom)");
//GameObject EventTriggerLoop9Bedroom = FindEventTriggerGameObjectByName("EventTrigger LoopedRoom (9) (Bedroom)");
//Invokes the event that disables the piano and unlocks the door to get to the bedroom hall again.
manageWindowsInBedroomsLoop9.window[0].onWindowDown += EventTriggerLoop9Bedroom.GetComponent<EventTrigger>().Invoke;
break;
case ChildrenPastStorylineState.LoopedRoom9_B:
SceneRoot_ChildrenLoops.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
//GameObject Loop9BEventTrigger = GameObject.Find("Loop9BEventTrigger");
GameObject Loop9BEventTrigger = FindEventTriggerGameObjectByName("Loop9BEventTrigger");
//Invokes event in order to enable Medea Window Jump Scare.
Loop9BEventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom10:
SceneRoot_ChildrenLoops.SetActive(true);
//Window drawing appears in this section and the player must close the window. Then blood decals appear that lead to the basement door.
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
//GameObject Loop10EventTrigger = GameObject.Find("Loop10EventTrigger");
GameObject Loop10EventTrigger = FindEventTriggerGameObjectByName("Loop10EventTrigger");
//Invokes event in order to enable the triggers for this loop.
Loop10EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom11:
SceneRoot_ChildrenLoops.SetActive(true);
//The player must find the missing mannequin pieces.
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//GameObject Loop11EventTrigger = GameObject.Find("Loop11EventTrigger");
GameObject Loop11EventTrigger = FindEventTriggerGameObjectByName("Loop11EventTrigger");
//Invokes event in order to enable the triggers for this loop.
Loop11EventTrigger.GetComponent<EventTrigger>().Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom12:
SceneRoot_ChildrenLoops.SetActive(true);
//Medea bathroom dancing.
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
manageDoorsInMainHall.door[1].LockDoor();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
//GameObject loop12EventTriggerGO = GameObject.Find("Loop12EventTrigger");
GameObject loop12EventTriggerGO = FindEventTriggerGameObjectByName("Loop12EventTrigger");
EventTrigger loop12EventTrigger = loop12EventTriggerGO.GetComponent<EventTrigger>();
//Invokes event....
loop12EventTrigger.Invoke();
//#region SKATA
//SceneRoot_ChildrenLoops.SetActive(true);
////Medea Chase.
//MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
//ForceToCloseDoorsForBeginningOfLoop();
//manageDoorsInMainHall.door[0].LockDoor();
////Lock DefinedPath Door.
//manageDoorsInMainHall.door[5].LockDoor();
//manageDoorsInMainHall.door[3].UnlockDoor();
////Opens the door for the bedroom:
//manageDoorsInBedroomsLoop9.door[0].UnlockDoor();
////GameObject Loop13EventTriggerGO = GameObject.Find("Loop13EventTrigger");
//GameObject Loop13EventTriggerGO = FindEventTriggerGameObjectByName("Loop13EventTrigger");
//EventTrigger loop13EventTrigger = Loop13EventTriggerGO.GetComponent<EventTrigger>();
//loop13EventTrigger.Invoke();
//#endregion
break;
case ChildrenPastStorylineState.LoopedRoom13:
SceneRoot_ChildrenLoops.SetActive(true);
//Medea Chase.
MemorizeTemporarilyCurrentStorylineStateForChildrenLoops();
ForceToCloseDoorsForBeginningOfLoop();
manageDoorsInMainHall.door[0].LockDoor();
//Lock DefinedPath Door.
manageDoorsInMainHall.door[5].LockDoor();
manageDoorsInMainHall.door[3].UnlockDoor();
//Opens the door for the bedroom:
manageDoorsInBedroomsLoop9.door[0].UnlockDoor();
//GameObject Loop13EventTriggerGO = GameObject.Find("Loop13EventTrigger");
GameObject Loop13EventTriggerGO = FindEventTriggerGameObjectByName("Loop13EventTrigger");
EventTrigger loop13EventTrigger = Loop13EventTriggerGO.GetComponent<EventTrigger>();
loop13EventTrigger.Invoke();
break;
case ChildrenPastStorylineState.LoopedRoom14:
break;
case ChildrenPastStorylineState.LoopedRoom15:
break;
case ChildrenPastStorylineState.LoopedRoom16:
break;
case ChildrenPastStorylineState.LoopedRoom17:
break;
case ChildrenPastStorylineState.LoopedRoom18:
break;
default:
break;
}
}
} while (stateChanged);
#endregion
#region Mirror Library
//bool stateChanged;
do
{
stateChanged = false;
switch (mirrorLibraryStorylineState)
{
case MirrorLibraryStorylineState.CheckLoad:
if (GameProgressManager.GetInstance().initialCutscenePlayed) //This is when you have entered the game the first time.
{
string currentState = GameProgressManager.GetInstance().currentStorylineState;
if (Enum.IsDefined(typeof(MirrorLibraryStorylineState), currentState))
{
mirrorLibraryStorylineState = (MirrorLibraryStorylineState)Enum.Parse(typeof(MirrorLibraryStorylineState), GameProgressManager.GetInstance().currentStorylineState);
print("Mirror Library storyline state found");
}
else
{
print("Mirror Library storyline state NOT FOUND!");
}
}
else //Entered new game otherwise:
{
GameProgressManager.GetInstance().initialCutscenePlayed = true; //CHANGE LATER.
GameProgressManager.GetInstance().playerControllerShouldBeEnabledOnGameLoad = true;
GameProgressManager.GetInstance().playerCameraControllerShouldBeEnabledOnGameLoad = true;
print("Started game position");
PlayerManager.GetInstance().playerGameObj.transform.position = playerNewGameStartPosition.position;
PlayerManager.GetInstance().playerGameObj.transform.rotation = playerNewGameStartPosition.rotation;
sceneRoot_MirrorLibrary.gameObject.SetActive(true);
libraryRoot.gameObject.SetActive(true);
hallwayBeforeLibrary.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForMirrorLibrary();
mirrorLibraryStorylineState = MirrorLibraryStorylineState.BeforeMirrorLibrary;
stateChanged = true;
}
BackgroundSoundsManager.GetInstance().PlayHouseSounds();
break;
case MirrorLibraryStorylineState.BeforeMirrorLibrary:
sceneRoot_MirrorLibrary.gameObject.SetActive(true);
libraryRoot.gameObject.SetActive(true);
hallwayBeforeLibrary.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForMirrorLibrary();
break;
case MirrorLibraryStorylineState.EnteredMirrorLibrary:
sceneRoot_MirrorLibrary.gameObject.SetActive(true);
libraryRoot.gameObject.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForMirrorLibrary();
break;
case MirrorLibraryStorylineState.AfterMirrorLibrary:
sceneRoot_MirrorLibrary.gameObject.SetActive(true);
hallwayAfterLibrary.gameObject.SetActive(true);
sceneRoot_ChildrenLoops.gameObject.SetActive(true);
MemorizeTemporarilyCurrentStorylineStateForMirrorLibrary();
print("After mirror library state is executing");
break;
case MirrorLibraryStorylineState.MirrorLibrarySectionEnded:
print("MirrorLibrarySectionEnded is executing");
break;
default:
break;
}
#endregion
}
while (stateChanged);
}
GameObject FindEventTriggerGameObjectByName(string name)
{
foreach (GameObject obj in eventTriggers)
{
if (obj.name == name)
{
return obj;
}
}
return null; // If no matching GameObject found
}
public void MemorizeTemporarilyCurrentStorylineStateForMirrorLibrary()
{
GameProgressManager.GetInstance().currentStorylineState = mirrorLibraryStorylineState.ToString();
}
public void MemorizeTemporarilyCurrentStorylineStateForChildrenLoops()
{
GameProgressManager.GetInstance().currentStorylineState = childrenPastStorylineState.ToString();
}
/// <summary>
/// Forces the doors to close when the player has transitioned to the next loop.
/// </summary>
private void ForceToCloseDoorsForBeginningOfLoop()
{
for (int i = 1; i < manageDoorsInMainHall.door.Length; i++)
{
manageDoorsInMainHall.door[i].ForceDoorToClosePosition();
//Forces all of the doors in the loop to be closed without doing an animation or sound when the next round of the loops start.
}
}
/// <summary>
/// Forces the Windoes to close when the player has transitioned to the next loop.
/// </summary>
private void UnlockWindowsForBeginningOfLoop()
{
for (int i = 0; i < manageWindowsInMainHall.window.Length; i++)
{
manageWindowsInMainHall.window[i].UnlockWindow();
//Forces all of the windows in the loop to be closed without doing an animation or sound when the next round of the loops start.
}
}
/// <summary>
/// Forces the Windoes to close when the player has transitioned to the next loop.
/// </summary>
private void ForceToCloseWindowsForBeginningOfLoop()
{
for (int i = 0; i < manageWindowsInMainHall.window.Length; i++)
{
manageWindowsInMainHall.window[i].ForceWindowToClosePosition();
//Forces all of the windows in the loop to be closed without doing an animation or sound when the next round of the loops start.
}
}
/// <summary>
/// Forces the Windoes to open when the player has transitioned to the next loop.
/// </summary>
private void ForceToOpenWindowsForBeginningOfLoop()
{
for (int i = 0; i < manageWindowsInMainHall.window.Length; i++)
{
manageWindowsInMainHall.window[i].ForceWindowToOpenPosition();
//Forces all of the windows in the loop to be closed without doing an animation or sound when the next round of the loops start.
}
}
//private void Update()
//{
// UpdateStoryline();
//}
public void UpdateToTheNextMirrorLibraryState()
{
// Get all values of the enum
MirrorLibraryStorylineState[] allCases = (MirrorLibraryStorylineState[])Enum.GetValues(typeof(MirrorLibraryStorylineState));
// Get the index of the current case
int currentIndex = Array.IndexOf(allCases, mirrorLibraryStorylineState);
// Increment the index
currentIndex++;
// Wrap around if it exceeds the array length
if (currentIndex >= allCases.Length)
{
currentIndex = 0; // Go back to the first case or handle differently if desired
}
// Update the current case
mirrorLibraryStorylineState = allCases[currentIndex];
UpdateStoryline();
}
/// <summary>
/// /Increases to the next loop
/// </summary>
public void UpdateToTheNextLoopState()
{
// Get all values of the enum
ChildrenPastStorylineState[] allCases = (ChildrenPastStorylineState[])Enum.GetValues(typeof(ChildrenPastStorylineState));
// Get the index of the current case
int currentIndex = Array.IndexOf(allCases, childrenPastStorylineState);
// Increment the index
currentIndex++;
// Wrap around if it exceeds the array length
if (currentIndex >= allCases.Length)
{
currentIndex = 0; // Go back to the first case or handle differently if desired
}
// Update the current case
childrenPastStorylineState = allCases[currentIndex];
UpdateStoryline();
}
}