using UnityEngine; using System; using System.Collections; public class DanielLoopManager : MonoBehaviour { // 1. Define the 18 loop states public enum DanielLoopState { Loop1, Loop2, Loop3, Loop4, Loop5, Loop6, Loop7, Loop8, Loop9, Loop10, Loop11, Loop12, Loop13, Loop14, Loop15, Loop16, Loop17, Loop18 } [Header("Daniel Loops Setup")] [Tooltip("Check if we're loading a saved game in the Daniel Loops section")] public bool isLoadingDanielLoops; // Current loop state (start at Loop1 or load from save) public DanielLoopState currentDanielLoopState = DanielLoopState.Loop1; private void Awake() { // Ensure this DanielLoopManager is known to the GameManager if (GameManager.GetInstance() != null) { GameManager.GetInstance().danielLoopManager = this; } // Check if we are loading a saved game if (LoadManager.GetInstance() != null && LoadManager.GetInstance().LoadingGame) { isLoadingDanielLoops = true; } } /// /// Called by GameManager to activate this manager’s logic. /// public void Activate() { Debug.Log("Daniel Loops Manager Activated: Initializing Daniel Loops."); TryLoadSavedState(); UpdateStoryline(); } /// /// Called by GameManager to deactivate this manager’s logic. /// public void Deactivate() { Debug.Log("Daniel Loops Manager Deactivated."); StopAllCoroutines(); SaveStorylineState(); CleanupPlayerSettings(); // Notify GameManager this entire section is complete (optional). // Typically you do this upon finishing the last loop, but you can do it here if needed. // NotifyCompletion(); } /// /// Main method that checks the current loop state and performs the necessary logic. /// public void UpdateStoryline() { switch (currentDanielLoopState) { case DanielLoopState.Loop1: Debug.Log("Player is in Loop 1"); #region Loop1Description /* TODO: ================================================================================ LOOP 1: DANIEL’S OFFICE ================================================================================ Puzzle Name: Memory Box & The Heart Keepsake Story Focus: - Show Daniel & Medea’s early love; minimal horror with slight foreshadowing. Puzzle Mechanics: 1) Find a locked Memory Box on Daniel’s desk containing: - A love note - A small bottle of wine - A piece of Medea’s ring 2) Search old letters to uncover a simple combination // “91120” 3) Unlocking the box reveals a hidden compartment holding Daniel’s “Heart” Keepsake (body-part token). //placeholder cube with heart Body-Part Collection: - Heart Keepsake (symbolic or physically heart-like). Jump Scare: - Reflection in the office window: Medea’s silhouette appears for a second and vanishes. Time Travel / Ghost Realm (Optional): - Subtle flicker in a photo/mirror, hinting future paranormal events. */ #endregion break; case DanielLoopState.Loop2: Debug.Log("Player is in Loop 2"); #region Loop2Description /*================================================================================ LOOP 2: PARENTS’ BEDROOM ================================================================================ Puzzle Name: Fragrant Secrets Story Focus: - Depict early marriage & Medea’s longing for luxury. Puzzle Mechanics: 1) A wardrobe locked by a scent-based mechanism: - Each drawer labeled by flower/perfume notes. 2) Find matching perfume bottles scattered around (vanity table, side drawers, etc.). 3) Insert the correct bottle into each drawer’s slot based on subtle hints in notes or a perfume catalog. 4) The final drawer unlocks, revealing a mannequin hand wearing Daniel’s wedding ring. Body-Part Collection: - Mannequin Hand (with ring). Jump Scare: - Wardrobe door swings open, and in the mirror inside, Medea’s face momentarily appears behind the player. Time Travel / Ghost Realm (Optional): - Small flash of the bedroom in a happier, well-lit past upon solving the puzzle. */ #endregion break; case DanielLoopState .Loop3: Debug.Log("Player is in Loop 3"); #region Loop3Description /* ================================================================================ LOOP 3: HALLWAY #1 ================================================================================ Puzzle Name: Whispers in the Hall (Portrait Puzzle) Story Focus: - Introduce the children; financial strain emerges. Puzzle Mechanics: 1) The hallway is lined with family portraits (children at various ages, possibly mislabeled). 2) Each portrait “whispers” a memory or clue when the player inspects it closely. 3) Reorganize/rotate the portraits in correct chronological order: - Hints: ages, subtle time stamps, hidden text on frames. 4) Completing the sequence unlocks a panel in the wall revealing a mannequin foot (Daniel’s foot). Body-Part Collection: - Mannequin Foot. Jump Scare: - Hallway extends or warps momentarily, child laughter distorts into a sudden scream. Time Travel / Ghost Realm (Optional): - Occasionally, the hallway flickers to show the children running past in an echo of the past. */ #endregion break; case DanielLoopState.Loop4: Debug.Log("Player is in Loop 4"); /* ================================================================================ LOOP 4: DANIEL’S OFFICE (REVISITED) ================================================================================ Puzzle Name: Candlelight Ritual Story Focus: - Reveal Medea’s desperation; partial sign of her occult practices. Puzzle Mechanics: 1) The once-normal office is dark, lit by scattered candles. 2) Strange symbols on the walls/floor correspond to a ritual sequence. 3) Light specific candles in the correct order (hints via diaries/notes). 4) A hidden drawer in Daniel’s desk unlocks upon success, containing Daniel’s eyes in a sealed jar. Body-Part Collection: - Daniel’s Eyes (jar with eerie glow). Jump Scare: - On grabbing the jar, a loud heartbeat sound triggers, followed by Medea’s chanting from nearby. Time Travel / Ghost Realm (Optional): - If the player attempts to time-travel, they might see the office in a half-finished ritual scene with Medea collecting ingredients. */ break; case DanielLoopState.Loop5: Debug.Log("Player is in Loop 5"); /* ================================================================================ LOOP 5: ================================================================================ Puzzle Name: Echoes of an Affair Story Focus: - Daniel’s affair escalates; guilt begins to consume him. Puzzle Mechanics: 1) The hallway walls are plastered with torn letters, hotel receipts, etc. 2) Arrange these documents on a “timeline board” (slots labeled with dates or event names). 3) Correct placement unlocks a small wall safe, containing an “audio recorder” playing Daniel’s confessions—his Voice. Body-Part Collection: - Daniel’s Voice (symbolic soul fragment or a recorder device). Jump Scare: - As the puzzle completes, lights flicker, and a figure resembling either Medea or the mistress sprints by. Time Travel / Ghost Realm (Optional): - Certain letters only visible or readable in ghostly overlay to confirm affair details. */ break; case DanielLoopState.Loop6: Debug.Log("Player is in Loop 6"); /* ================================================================================ LOOP 6: PARENTS’ BEDROOM (REVISITED) ================================================================================ Puzzle Name: Bloodstained Bedspread Story Focus: - The affair intensifies; Medea shows more overt possession. Puzzle Mechanics: 1) The bedspread has cryptic bloodstains forming runic patterns. 2) Player must trace these patterns with special chalk found in a drawer. 3) Each correct tracing reveals more of Medea’s rage and ends by shifting the bed frame, exposing a mannequin arm (Daniel’s Arm). Body-Part Collection: - Mannequin Arm. Jump Scare: - Upon finishing the tracing, a ghostly replay of Medea attacking Daniel on the bed flashes before the player. Time Travel / Ghost Realm (Optional): - The bed might appear pristine in a “past overlay,” then flicker back to the bloodstained present. */ break; case DanielLoopState.Loop7: Debug.Log("Player is in Loop 7"); /* ================================================================================ LOOP 7: HALLWAY #3 ================================================================================ Puzzle Name: Circuitry of Despair Story Focus: - Financial ruin & isolation intensify. Puzzle Mechanics: 1) Hallway lights are out; a circuit breaker box is mounted near the center. 2) Player must rewire color-coded cables/fuses to restore partial power. 3) Each correct wire lights another segment of the hallway, revealing cryptic writing or clues. 4) Final segment reveals a recess containing Daniel’s torso (mannequin core). Body-Part Collection: - Daniel’s Torso. Jump Scare: - Incorrect wiring unleashes sparks, momentary ghostly apparitions crowd the hallway. Time Travel / Ghost Realm (Optional): - A short trip to the past might show the hallway intact, revealing the original wiring diagram. */ break; case DanielLoopState.Loop8: Debug.Log("Player is in Loop 8"); /* ================================================================================ LOOP 8: DANIEL’S OFFICE (RITUAL CONFRONTATION) ================================================================================ Puzzle Name: Poltergeist Press Story Focus: - Personal loss, Medea’s malevolence escalates; violent confrontations. Puzzle Mechanics: 1) Office objects float in a poltergeist storm (books, chairs, etc.). 2) Use a “binding lens” or artifact to calm each floating object, returning them to their rightful place. 3) Each restored object reveals part of a ritual code. When complete, a hidden panel under the desk opens with Daniel’s jaw. Body-Part Collection: - Daniel’s Jaw (symbol of his final pleas or words). Jump Scare: - When the last object is stabilized, the door slams shut and Medea’s possessed form briefly appears behind the glass panel. Time Travel / Ghost Realm (Optional): - Objects might be anchored in the ghost realm, forcing the player to alternate realities to fully dispel them. */ break; case DanielLoopState.Loop9: Debug.Log("Player is in Loop 9"); /* -------------------------------------------------------------------------------- LOOP 9: DANIEL’S OFFICE – “BLACKLIGHT RUNES” PUZZLE -------------------------------------------------------------------------------- Story Focus: - Corruption deepens; the office is fully tainted by Medea’s rituals. - Daniel’s notes suggest hidden runes visible only under special light. Puzzle Mechanics: 1) The entire office is draped in torn pages from a ritual manuscript. 2) A blacklight lantern must be found (possibly in a locked cabinet). 3) Activating the blacklight reveals invisible runes or sigils on the walls/floor. 4) Player must trace or “connect” these runes in the correct order to unlock a hidden safe/drawer. 5) Inside the safe: another body-part (e.g., Daniel’s Skull) or a piece of it. Time Travel / Ghost Realm: - Flickers of the past show Daniel researching frantically, scrawling runes in desperation to protect himself. Jump Scare: - When the last rune is drawn, the lights strobe and a nightmarish reflection of Medea stands behind the player in the blacklight glow.*/ break; case DanielLoopState.Loop10: Debug.Log("Player is in Loop 10"); /* -------------------------------------------------------------------------------- LOOP 10: HALLWAY – “RED LIGHT, GREEN LIGHT” (PENDULUM / STEALTH) -------------------------------------------------------------------------------- Story Focus: - Medea’s sadistic side emerges, turning the hallway into a deadly game zone. - The hallway is longer, twisted, with flickering lights at each end. Puzzle Mechanics: 1) Medea periodically switches the corridor lights from green to red: - Green = Player can move forward. - Red = Player must freeze or risk Medea’s instant attack. 2) Obstacles: furniture, broken floorboards, or pendulum traps (giant swinging blades). 3) The player times movements carefully to reach the end of the hallway. 4) Final door: locked behind a small lever puzzle or code. Completing it yields Daniel’s next body-part (e.g., a Spine piece). Time Travel / Ghost Realm: - Failing the stealth might fling the player into a ghost realm briefly, where they see visions of Daniel cowering from Medea. Jump Scare: - Moving on Red triggers a sudden lunge from Medea or a stealth kill scene.*/ break; case DanielLoopState.Loop11: Debug.Log("Player is in Loop 11"); /* -------------------------------------------------------------------------------- LOOP 11: PARENTS’ BEDROOM – “EXORCISM CIRCLE” OR MIRROR LABYRINTH -------------------------------------------------------------------------------- Story Focus: - Confronting the true depth of Medea’s possession and hints of exorcism. Puzzle Mechanics (Two Options): A) Exorcism Circle: - Player finds chalk outlines on the bedroom floor and partial scriptures indicating an exorcism attempt. - Must place candles, recite lines (in correct order), and align certain items (e.g., holy symbol, children’s photo, ring) to activate the circle. - Successful completion reveals a hidden nook under the bed or in a closet containing Daniel’s Lungs (symbolizing his suffocated cries). B) Mirror Labyrinth: - The bedroom’s walls are lined with tall mirrors, distorting space. - Some mirrors reflect a different “version” of the room (ghost realm). - The player navigates by stepping “into” mirrors when aligned correctly. - The final mirror leads to a secret chamber or hidden wardrobe with the body-part inside. Time Travel / Ghost Realm: - Essential for navigating mirrored illusions or for glimpsing the correct exorcism incantation in the past. Jump Scare: - If the incantation is read wrong or a mirror is used incorrectly, Medea’s demonic reflection appears, lunging at the player.*/ break; case DanielLoopState.Loop12: Debug.Log("Player is in Loop 12"); /* -------------------------------------------------------------------------------- LOOP 12: HALLWAY – “SHATTERED MIRROR” & ULTIMATE CONFRONTATION -------------------------------------------------------------------------------- Story Focus: - The affair’s tragic climax; final revelations about Daniel’s downfall. Puzzle Mechanics: 1) The hallway is blocked by a large, shattered mirror. 2) Collect mirror shards scattered around (some in ghost realm, some hidden under debris). 3) Each shard, when inspected, shows a partial memory: - Daniel’s final confrontation with Medea, the children’s terror, or the mistress’s final words. 4) Reassembling the mirror fully reveals a “window” into the moment Daniel is mortally wounded. The puzzle’s completion grants another piece of Daniel’s body (e.g., his Hands). Time Travel / Ghost Realm: - Placing shards might require traveling between the corridor’s past/present states or using a ghostly overlay to find pieces that don’t exist physically in the present. Jump Scare: - Once the mirror is restored, an intense cutscene of Daniel’s final fight with Medea briefly plays, concluding with Medea’s distorted scream echoing in the hallway.*/ break; case DanielLoopState.Loop13: Debug.Log("Player is in Loop 13"); /* Loop 13: * “House of Horrors” puzzle, combining illusions from all previous puzzles in the hallway or bedroom. The environment might shift unpredictably between each loop’s theme. * A forced chase scene where the player must hide or outrun Medea while grabbing a crucial item (Daniel’s Blood Vial, symbolizing his ultimate end).*/ break; case DanielLoopState.Loop14: Debug.Log("Player is in Loop 14"); /*Daniel’s Office final meltdown: Broken desks, swirling shadows. * Possibly an “audio puzzle” where phone lines are crossed with spirit voices. * The last puzzle piece might be intangible—Daniel’s Soul Fragment trapped in a sealed notebook or safe.*/ break; case DanielLoopState.Loop15: Debug.Log("Player is in Loop 15"); /* The “Tragic End” puzzle: The player tries one final, desperate act (burning the ritual book, or an exorcism attempt). Ultimately reveals Daniel’s final body-part or essence. */ break; case DanielLoopState.Loop16: Debug.Log("Player is in Loop 16"); /* Loop 16: Mannequin Stand or Ritual Altar - Player places each collected body-part (heart, eyes, skull, etc.) in designated slots or hooks. Each piece may require solving a short “locking mechanism” (like rotating runic rings or repeating a memory sequence) to attach it properly.*/ break; case DanielLoopState.Loop17: Debug.Log("Player is in Loop 17"); /* - A deep-dive puzzle into Medea’s memories/psyche, potentially in Parents’ Bedroom or an otherworldly version of it. - The environment is flooded with regrets, illusions, and diaries revealing her motivations. The final living confrontation between Daniel and Medea might be shown in full.*/ break; case DanielLoopState.Loop18: Debug.Log("Daniel is in Loop 18 (final loop)."); /* The final door opens in the hallway or office, leading to a place beyond the usual map (an attic or basement labyrinth). - A confrontation: the fully reconstructed Daniel, Medea (possessed or remorseful), and the malevolent force. - Possible endings: * The cycle repeats: The house resets, leaving the player trapped. * Daniel’s spirit is freed, laying his soul to rest. * Medea is either destroyed by or liberated from the entity. */ // Possibly call NotifyCompletion() when done: NotifyCompletion(); break; default: Debug.Log("Unhandled Daniel Loop State: " + currentDanielLoopState); break; } // Save whenever we enter a new state SaveStorylineState(); } /// /// Moves to the next loop state, if available. /// public void UpdateToNextLoopState() { DanielLoopState[] allStates = (DanielLoopState[])Enum.GetValues(typeof(DanielLoopState)); int currentIndex = Array.IndexOf(allStates, currentDanielLoopState); if (currentIndex < allStates.Length - 1) { // Move to the next loop currentDanielLoopState = allStates[currentIndex + 1]; UpdateStoryline(); } else { Debug.Log("All Daniel Loops are complete."); // Once the last loop finishes, notify the GameManager to move on: NotifyCompletion(); } } /// /// Attempt to load the saved Daniel loop state from GameProgressManager. /// private void TryLoadSavedState() { var gameProgressManager = GameProgressManager.GetInstance(); if (gameProgressManager == null) return; if (Enum.TryParse(gameProgressManager.currentStorylineState, out DanielLoopState savedState)) { currentDanielLoopState = savedState; Debug.Log("Loaded Daniel Loop State from save: " + savedState); } else { Debug.LogWarning("No valid saved Daniel loop state found. Starting at Loop1."); currentDanielLoopState = DanielLoopState.Loop1; } // After loading, we’re no longer in a loading phase isLoadingDanielLoops = false; } /// /// Saves the current Daniel loop state to GameProgressManager. /// private void SaveStorylineState() { var gameProgressManager = GameProgressManager.GetInstance(); if (gameProgressManager == null) return; gameProgressManager.currentStorylineState = currentDanielLoopState.ToString(); } /// /// Performs any final logic, then notifies GameManager this section is complete. /// private void NotifyCompletion() { // This triggers a transition in the GameManager GameManager.GetInstance().OnStorySectionComplete(GameManager.StoryState.DanielLoops); } /// /// Resets or cleans up player settings if needed. /// private void CleanupPlayerSettings() { var playerManager = PlayerManager.GetInstance(); if (playerManager != null) { // Example: disable player movement if transitioning states // playerManager.DisablePlayerMovement(); } Debug.Log("Cleaned up settings specific to Daniel Loops."); } }