395 lines
13 KiB
C#
395 lines
13 KiB
C#
using UnityEngine;
|
|
using System;
|
|
using UnityEngine.Events;
|
|
using System.Collections;
|
|
|
|
|
|
public class MainHouseP1Manager : MonoBehaviour
|
|
{
|
|
public enum MainHousePart1State
|
|
{
|
|
BeforeDiscoveringPortraitPuzzle,
|
|
AfterDiscoveringPortraitPuzzle,
|
|
BeforeObtainingKeyFromStatue,
|
|
AfterObtainingKeyFromStatue,
|
|
AfterStatuesChaseSequence,
|
|
AfterUsedKeyForNorthHallway,
|
|
AfterPlayerObtainsPocketWatch,
|
|
AfterDinnerCutscene,
|
|
BeforeTriggeredLibraryBooksPuzzle,
|
|
//BeforeTriggeredLibraryMedallionsPuzzle,
|
|
AfterTriggeredLibraryMedallionsPuzzle,
|
|
AfterLibraryMedallionsPuzzleSolution,
|
|
AfterPadlockPortraitPuzzleSolution,
|
|
AfterObtainsKeyFromPadlockPortraitPuzzle,
|
|
AfterUsedKeyForBabyRoom
|
|
}
|
|
|
|
[SerializeField] private Transform playerStartPosition;
|
|
[SerializeField] private GameObject puzzleGameObject;
|
|
[SerializeField] private GameObject puzzleSolvedEffects;
|
|
|
|
[SerializeField] SaveableObjectsOnSceneManager saveableObjectsOnSceneManager;
|
|
|
|
[SerializeField] MainHouseP1EventsData mainHouseP1EventsData;
|
|
[SerializeField] MainHouseP1StatesData mainHouseP1StatesData;
|
|
[SerializeField] MainHouseP1Triggers mainHouseP1Triggers;
|
|
[SerializeField] MainHouseP1Objects mainHouseP1Objects;
|
|
|
|
public bool isLoadingMainHouseP1Related;
|
|
public MainHousePart1State mainHousePart1State = MainHousePart1State.BeforeDiscoveringPortraitPuzzle;
|
|
|
|
private void Awake()
|
|
{
|
|
GameManager.GetInstance().mainHouseP1Manager = this;
|
|
if (LoadManager.GetInstance().LoadingGame)
|
|
{
|
|
isLoadingMainHouseP1Related = true;
|
|
}
|
|
}
|
|
|
|
public void Activate()
|
|
{
|
|
Debug.Log("Main House Part 1 Manager Activated: Initializing events.");
|
|
TryLoadSavedState();
|
|
UpdateStoryline();
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
Debug.Log("Main House Part 1 Manager Deactivated.");
|
|
|
|
StopAllCoroutines();
|
|
CleanupPlayerSettings();
|
|
SaveStorylineState();
|
|
NotifyCompletion();
|
|
}
|
|
|
|
public void LoadMainHouseP1Related()
|
|
{
|
|
foreach (var saveableObject in saveableObjectsOnSceneManager.SaveableObjects)
|
|
{
|
|
if (saveableObject.IsSetActiveTrueAfterLoad == true)
|
|
{
|
|
saveableObject.gameObject.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
saveableObject.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
//foreach (var saveableDoor in saveableObjectsOnSceneManager.SaveableDoors)
|
|
//{
|
|
// if (saveableDoor.IsLockedAfterLoad == true)
|
|
// {
|
|
// saveableDoor.doorBehaviour.DoorRequiresKey = true;
|
|
// print("SAVEABLE DOOR REQUIRES KEY BRUH");
|
|
// }
|
|
// else
|
|
// {
|
|
// saveableDoor.doorBehaviour.DoorRequiresKey = false;
|
|
// print("SAVEABLE DOOR DOESNT REQUIRE KEY BRUH");
|
|
// }
|
|
//}
|
|
print("Successfully loaded main house p1 related");
|
|
}
|
|
|
|
public void UpdateStoryline()
|
|
{
|
|
switch (mainHousePart1State)
|
|
{
|
|
case MainHousePart1State.BeforeDiscoveringPortraitPuzzle:
|
|
HandleBeforePuzzlePhase();
|
|
break;
|
|
|
|
case MainHousePart1State.AfterDiscoveringPortraitPuzzle:
|
|
//HandlePuzzlePhase();
|
|
mainHouseP1EventsData.afterCleanedPortraitPuzzleDust.Invoke();
|
|
|
|
mainHouseP1StatesData.BeforeObtainingKeyFromStatueTrigger.SetActive(true);
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
//mainHouseP1StatesData.BeforeObtainingKeyFromStatueTrigger.SetActive(true);
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.BeforeObtainingKeyFromStatue:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterObtainingKeyFromStatue:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
mainHouseP1Triggers.ActivateStatuesAITrigger.SetActive(true);
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterStatuesChaseSequence:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterUsedKeyForNorthHallway:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
mainHouseP1EventsData.BeforePlayerObtainsPocketWatchEvent.Invoke();
|
|
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterPlayerObtainsPocketWatch:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
mainHouseP1EventsData.AfterPlayerObtainsPocketWatchEvent.Invoke();
|
|
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterDinnerCutscene:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
mainHouseP1StatesData.BeforeTriggeredLibraryPuzzleTrigger.SetActive(true);
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.BeforeTriggeredLibraryBooksPuzzle:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
mainHouseP1EventsData.LibraryPuzzleTimeEventsEvent.Invoke();
|
|
SaveStorylineState();
|
|
break;
|
|
//case MainHousePart1State.BeforeTriggeredLibraryMedallionsPuzzle:
|
|
// if (isLoadingMainHouseP1Related)
|
|
// {
|
|
// isLoadingMainHouseP1Related = false;
|
|
// }
|
|
// SaveStorylineState();
|
|
// break;
|
|
case MainHousePart1State.AfterTriggeredLibraryMedallionsPuzzle:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
mainHouseP1EventsData.LibraryPuzzleStandColumnsEventAfterBooksPuzzle.Invoke();
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterLibraryMedallionsPuzzleSolution:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
mainHouseP1EventsData.AfterLibraryMedallionsPuzzleSolutionEvent.Invoke();
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterPadlockPortraitPuzzleSolution:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
mainHouseP1EventsData.AfterPadlockPortraitPuzzleSolutionEvent.Invoke();
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
case MainHousePart1State.AfterObtainsKeyFromPadlockPortraitPuzzle:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
default:
|
|
Debug.LogWarning($"Unhandled storyline state: {mainHousePart1State}");
|
|
break;
|
|
case MainHousePart1State.AfterUsedKeyForBabyRoom:
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
SaveStorylineState();
|
|
break;
|
|
}
|
|
LoadMainHouseP1Related();
|
|
}
|
|
|
|
public void UpdateToNextStorylineState()
|
|
{
|
|
MainHousePart1State[] allStates = (MainHousePart1State[])Enum.GetValues(typeof(MainHousePart1State));
|
|
int currentIndex = Array.IndexOf(allStates, mainHousePart1State);
|
|
|
|
if (currentIndex < allStates.Length - 1)
|
|
{
|
|
mainHousePart1State = allStates[currentIndex + 1];
|
|
UpdateStoryline();
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Main House Part 1 storyline is complete.");
|
|
NotifyCompletion();
|
|
}
|
|
}
|
|
|
|
private void HandleBeforePuzzlePhase()
|
|
{
|
|
Debug.Log("Setting up Before Discovering the Puzzle phase...");
|
|
mainHouseP1EventsData.beforeDiscoveringPortraitPuzzle.Invoke();
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
// Handles initialization after loading the game.
|
|
//SetupPlayer(playerStartPosition, enablePlayerController: true);
|
|
mainHouseP1StatesData.PrologueOnStorySectionComplete_PrologueCompleted.SetActive(false);
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
else
|
|
{
|
|
mainHouseP1Triggers.MainDoorCloseAndBrokenTrigger.SetActive(true);
|
|
}
|
|
|
|
|
|
SaveStorylineState();
|
|
}
|
|
|
|
private void HandlePuzzlePhase()
|
|
{
|
|
Debug.Log("Setting up Puzzle phase...");
|
|
|
|
puzzleGameObject.SetActive(true);
|
|
|
|
if (isLoadingMainHouseP1Related)
|
|
{
|
|
// Re-enable puzzle components if needed
|
|
isLoadingMainHouseP1Related = false;
|
|
}
|
|
|
|
SaveStorylineState();
|
|
}
|
|
|
|
private void HandleAfterPuzzlePhase()
|
|
{
|
|
Debug.Log("Setting up After Puzzle phase...");
|
|
|
|
puzzleGameObject.SetActive(false);
|
|
if (puzzleSolvedEffects != null)
|
|
{
|
|
puzzleSolvedEffects.SetActive(true);
|
|
}
|
|
|
|
// Trigger post-puzzle events
|
|
TriggerPostPuzzleEvents();
|
|
SaveStorylineState();
|
|
NotifyCompletion();
|
|
}
|
|
|
|
private void SaveStorylineState()
|
|
{
|
|
GameProgressManager.GetInstance().currentStorylineState = mainHousePart1State.ToString();
|
|
}
|
|
|
|
private void TryLoadSavedState()
|
|
{
|
|
if (Enum.TryParse(GameProgressManager.GetInstance().currentStorylineState, out MainHousePart1State parsedState))
|
|
{
|
|
mainHousePart1State = parsedState;
|
|
Debug.Log($"Loaded saved state for Main House Part 1: {mainHousePart1State}");
|
|
UpdateStoryline();
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("Invalid saved state for Main House Part 1. Defaulting to BeforeDiscoveringThePuzzle.");
|
|
mainHousePart1State = MainHousePart1State.BeforeDiscoveringPortraitPuzzle;
|
|
}
|
|
}
|
|
|
|
private void SetupPlayer(Transform newPosition, bool enablePlayerController)
|
|
{
|
|
var playerManager = PlayerManager.GetInstance();
|
|
if (playerManager == null)
|
|
{
|
|
Debug.LogError("PlayerManager instance is missing!");
|
|
return;
|
|
}
|
|
|
|
playerManager.DisablePlayerMovement();
|
|
playerManager.playerGameObj.transform.position = newPosition.position;
|
|
playerManager.playerGameObj.transform.rotation = newPosition.rotation;
|
|
|
|
var gameProgressManager = GameProgressManager.GetInstance();
|
|
gameProgressManager.playerControllerShouldBeEnabledOnGameLoad = enablePlayerController;
|
|
}
|
|
|
|
private void CleanupPlayerSettings()
|
|
{
|
|
var playerManager = PlayerManager.GetInstance();
|
|
if (playerManager != null)
|
|
{
|
|
playerManager.DisablePlayerMovement();
|
|
}
|
|
|
|
// Add additional cleanup logic here if needed
|
|
}
|
|
|
|
private void TriggerPostPuzzleEvents()
|
|
{
|
|
Debug.Log("Triggering post-puzzle events...");
|
|
// Implement logic for events triggered after the puzzle is solved.
|
|
// For example:
|
|
// UnlockNextArea();
|
|
// ShowCompletionCutscene();
|
|
}
|
|
|
|
private void NotifyCompletion()
|
|
{
|
|
GameManager.GetInstance().OnStorySectionComplete(GameManager.StoryState.MainHousePart1);
|
|
}
|
|
|
|
public void ActivatePlayersSanity()
|
|
{
|
|
PlayerManager.GetInstance().playerSanity.enabled = true;
|
|
GameProgressManager.GetInstance().playerSanityShouldBeEnabledOnGameLoad = true;
|
|
}
|
|
}
|
|
[Serializable]
|
|
public class MainHouseP1EventsData
|
|
{
|
|
public UnityEvent beforeDiscoveringPortraitPuzzle;
|
|
public UnityEvent afterCleanedPortraitPuzzleDust;
|
|
public UnityEvent BeforePlayerObtainsPocketWatchEvent;
|
|
public UnityEvent AfterPlayerObtainsPocketWatchEvent;
|
|
public UnityEvent LibraryPuzzleTimeEventsEvent;
|
|
public UnityEvent LibraryPuzzleStandColumnsEventAfterBooksPuzzle;
|
|
public UnityEvent AfterLibraryMedallionsPuzzleSolutionEvent;
|
|
public UnityEvent AfterPadlockPortraitPuzzleSolutionEvent;
|
|
}
|
|
[Serializable]
|
|
public class MainHouseP1StatesData
|
|
{
|
|
public GameObject PrologueOnStorySectionComplete_PrologueCompleted;
|
|
public GameObject BeforeObtainingKeyFromStatueTrigger;
|
|
public GameObject BeforeTriggeredLibraryPuzzleTrigger;
|
|
}
|
|
[Serializable]
|
|
public class MainHouseP1Triggers
|
|
{
|
|
public GameObject MainDoorCloseAndBrokenTrigger;
|
|
public GameObject ActivateStatuesAITrigger;
|
|
}
|
|
[Serializable]
|
|
public class MainHouseP1Objects
|
|
{
|
|
public GameObject FamilyPortraitBeforeSave;
|
|
public GameObject FamilyPortraitAfterSave;
|
|
}
|
|
|