private IEnumerator GameLogic() { this.SetupHoloroom(); Util.SetActive(this.ui.scoreboard, false); Util.SetActive(this.ui.sequenceIntro, false); Util.SetActive(this.puzzle.root, false); Util.SetActive(this.corridor.root, false); Util.SetActive(this.window.root, false); Util.SetActive(this.doorway.root, false); Util.SetActive(this.pillar.root, false); Util.SetActive(this.ducking.root, false); yield return base.StartCoroutine(ShooterPlayer.instance.Revitalize(1f)); yield return base.StartCoroutine(this.GivePistol()); if (this.sequence <= ShooterLogicC17Sim.Sequence.Puzzle && this.puzzle.root != null) { this.SetSequence(ShooterLogicC17Sim.Sequence.Puzzle); this.PlacePlayer(this.puzzle.playerStart); Coroutine phaseIn = base.StartCoroutine(this.PhaseIn(this.puzzle.root)); yield return base.StartCoroutine(this.WaitForGameEvent("puzzle_shot_initial_door_open")); yield return base.StartCoroutine(this.WaitForGameEvent("puzzle_shot_door_open")); yield return base.StartCoroutine(this.ShowScoreCard(this.puzzle.scoreCardAnchor)); yield return phaseIn; yield return base.StartCoroutine(this.PhaseOut(this.puzzle.root)); yield return base.StartCoroutine(this.NextSequence()); phaseIn = null; } if (this.sequence <= ShooterLogicC17Sim.Sequence.Corridor && this.corridor.root != null) { this.SetSequence(ShooterLogicC17Sim.Sequence.Corridor); this.PlacePlayer(this.corridor.playerStart); Coroutine phaseIn = base.StartCoroutine(this.PhaseIn(this.corridor.root)); yield return base.StartCoroutine(this.WaitUntilTeleportAwayFrom(this.corridor.playerStart)); yield return base.StartCoroutine(this.SpawnAIs(this.corridor.combatSpawns, this.prefabs.enemyEnforcer, 2, "corridor")); yield return base.StartCoroutine(this.WaitUntilAllDead("corridor")); yield return base.StartCoroutine(this.WaitSeconds(1f)); yield return base.StartCoroutine(this.SpawnAIs(this.corridor.combatSpawns, this.prefabs.enemyEnforcer, 3, "corridor")); yield return base.StartCoroutine(this.WaitUntilAllDead("corridor")); yield return base.StartCoroutine(this.WaitSeconds(1f)); yield return base.StartCoroutine(this.ShowScoreCard(this.corridor.scoreCardAnchor)); yield return phaseIn; yield return base.StartCoroutine(this.PhaseOut(this.corridor.root)); yield return base.StartCoroutine(this.NextSequence()); phaseIn = null; } if (this.sequence <= ShooterLogicC17Sim.Sequence.Window && this.window.root != null) { this.SetSequence(ShooterLogicC17Sim.Sequence.Window); Util.SetActive(this.window.dogVsAPC, false); this.PlacePlayer(this.window.playerStart); Coroutine phaseIn = base.StartCoroutine(this.PhaseIn(this.window.root)); yield return base.StartCoroutine(this.WaitUntilTeleportAwayFrom(this.window.playerStart)); yield return base.StartCoroutine(this.SpawnAIs(this.window.idleSpawns, this.prefabs.enemySoldier, 1, "window")); yield return base.StartCoroutine(this.WaitUntilAllDead("window")); Util.SetActive(this.window.dogVsAPC, true); float dogVersusAPCFinishedTime = Time.time + 30f; while (this.playerIsAlive && Time.time < dogVersusAPCFinishedTime) { yield return base.StartCoroutine(this.WaitSeconds(2f)); yield return base.StartCoroutine(this.SpawnAIs(this.window.combatSpawns, this.prefabs.enemySoldier, 1, "window")); yield return base.StartCoroutine(this.WaitSeconds(2f)); yield return base.StartCoroutine(this.SpawnAIs(this.window.combatSpawns, this.prefabs.enemySoldier, 1, "window")); yield return base.StartCoroutine(this.WaitUntilAllDead("window")); } SteamVR_Utils.Event.Send("window_strider_call_sound", Array.Empty()); yield return base.StartCoroutine(this.SpawnAIs(this.window.combatSpawns, this.prefabs.enemySoldier, 2, "window")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(1, "window")); SteamVR_Utils.Event.Send("window_spawn_strider", Array.Empty()); yield return base.StartCoroutine(this.WaitSeconds(2f)); yield return base.StartCoroutine(this.SpawnAIs(this.window.combatSpawns, this.prefabs.enemySoldier, 2, "window")); yield return base.StartCoroutine(this.WaitUntilAllDead("window")); yield return base.StartCoroutine(this.WaitSeconds(1f)); yield return base.StartCoroutine(this.WaitUntilAllDead("strider_look_in_window")); yield return base.StartCoroutine(this.ShowScoreCard(this.window.scoreCardAnchor)); yield return phaseIn; yield return base.StartCoroutine(this.PhaseOut(this.window.root)); yield return base.StartCoroutine(this.NextSequence()); phaseIn = null; } if (this.sequence <= ShooterLogicC17Sim.Sequence.Doorway && this.doorway.root != null) { this.SetSequence(ShooterLogicC17Sim.Sequence.Doorway); this.PlacePlayer(this.doorway.playerStart); Coroutine phaseIn = base.StartCoroutine(this.PhaseIn(this.doorway.root)); yield return base.StartCoroutine(this.WaitUntilTeleportAwayFrom(this.doorway.playerStart)); yield return base.StartCoroutine(this.SpawnAIs(this.doorway.combatSpawns, this.prefabs.enemySoldier, 2, "doorway")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(1, "doorway")); yield return base.StartCoroutine(this.SpawnAIs(this.doorway.combatSpawns, this.prefabs.enemySoldier, 2, "doorway")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(0, "doorway")); yield return base.StartCoroutine(this.SpawnAIs(this.doorway.combatSpawns, this.prefabs.enemySoldier, 3, "doorway")); yield return base.StartCoroutine(this.WaitUntilAllDead("doorway")); yield return base.StartCoroutine(this.WaitSeconds(1f)); yield return base.StartCoroutine(this.ShowScoreCard(this.doorway.scoreCardAnchor)); yield return phaseIn; yield return base.StartCoroutine(this.PhaseOut(this.doorway.root)); yield return base.StartCoroutine(this.NextSequence()); phaseIn = null; } if (this.sequence <= ShooterLogicC17Sim.Sequence.Pillar && this.pillar.root != null) { this.SetSequence(ShooterLogicC17Sim.Sequence.Pillar); this.PlacePlayer(this.pillar.playerStart); Coroutine phaseIn = base.StartCoroutine(this.PhaseIn(this.pillar.root)); yield return base.StartCoroutine(this.WaitUntilTeleportAwayFrom(this.pillar.playerStart)); yield return base.StartCoroutine(this.SpawnAIs(this.pillar.combatSpawns, this.prefabs.enemySoldier, 2, "pillar")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(1, "pillar")); yield return base.StartCoroutine(this.SpawnAIs(this.pillar.combatSpawns, this.prefabs.enemySoldier, 2, "pillar")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(1, "pillar")); yield return base.StartCoroutine(this.SpawnAIs(this.pillar.combatSpawns, this.prefabs.enemySoldier, 2, "pillar")); yield return base.StartCoroutine(this.WaitUntilAllDead("pillar")); yield return base.StartCoroutine(this.WaitSeconds(1f)); yield return base.StartCoroutine(this.ShowScoreCard(this.pillar.scoreCardAnchor)); yield return phaseIn; yield return base.StartCoroutine(this.PhaseOut(this.pillar.root)); yield return base.StartCoroutine(this.NextSequence()); phaseIn = null; } if (this.sequence <= ShooterLogicC17Sim.Sequence.Ducking && this.ducking.root != null) { this.SetSequence(ShooterLogicC17Sim.Sequence.Ducking); this.PlacePlayer(this.ducking.playerStart); Coroutine phaseIn = base.StartCoroutine(this.PhaseIn(this.ducking.root)); yield return base.StartCoroutine(this.WaitUntilTeleportAwayFrom(this.ducking.playerStart)); yield return base.StartCoroutine(this.SpawnAIs(this.ducking.combatSpawns, this.prefabs.enemySoldier, 2, "ducking")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(1, "ducking")); yield return base.StartCoroutine(this.SpawnAIs(this.ducking.combatSpawns, this.prefabs.enemySoldier, 2, "ducking")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(1, "ducking")); yield return base.StartCoroutine(this.SpawnAIs(this.ducking.combatSpawns, this.prefabs.enemySoldier, 3, "ducking")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(0, "ducking")); yield return base.StartCoroutine(this.SpawnAIs(this.ducking.combatSpawns, this.prefabs.enemySoldier, 4, "ducking")); yield return base.StartCoroutine(this.WaitUntilNSurvivors(0, "ducking")); Debug.Log("Spawning strider"); this.ducking.striderSpawn.Spawn(); yield return base.StartCoroutine(this.WaitSeconds(14f)); Debug.Log("Done Spawning strider"); yield return base.StartCoroutine(this.ShowScoreCard(this.ducking.scoreCardAnchor)); yield return phaseIn; yield return base.StartCoroutine(this.PhaseOut(this.ducking.root)); yield return base.StartCoroutine(this.NextSequence()); phaseIn = null; } Debug.Log("Re-running game"); this.sequence = ShooterLogicC17Sim.Sequence.Puzzle; this.RunGameLogic(); yield break; }