//===================================================== private void OnPostCutsceneFadeOutCompleteEvent() { ScreenManager.FadeOutCompleteEvent -= OnPostCutsceneFadeOutCompleteEvent; _isFadeCompelete = true; // Stop and clear cameraPathAnimator reference if (_cameraPathAnimator) { _cameraPathAnimator.Stop(); _cameraPathAnimator = null; } // Returning to same scene - fade-in if (_currentCutscene == eCutsceneType.CRAWL_DOOR || _currentCutscene == eCutsceneType.OBLIVION_PORTAL || _currentCutscene == eCutsceneType.SWITCH_OPENS_DOOR_BOLT_01 || _currentCutscene == eCutsceneType.SWITCH_OPENS_DOOR_BOLT_02 || _currentCutscene == eCutsceneType.SWITCH_OPENS_DOOR_BOLT_03 || _currentCutscene == eCutsceneType.SWITCH_OPENS_DOOR || _currentCutscene == eCutsceneType.SWITCH_ACTIVATES_PLATFORM || _currentCutscene == eCutsceneType.OPEN_CHEST || _currentCutscene == eCutsceneType.DEATH_RESPAWN || _currentCutscene == eCutsceneType.FLY_THRU || _currentCutscene == eCutsceneType.BOSS_ROOM_START) { // Switch cameras _camera.GetComponent <AudioListener>().enabled = false; _camera.enabled = false; _mainCamera.GetComponent <AudioListener>().enabled = true; _mainCamera.enabled = true; _mainCamera.transform.FindChild("CameraInGameGui").GetComponent <Camera>().enabled = true; _mainCamera.GetComponent <CameraMovement>().InitWithPlayer(false); // Fade in - include short pause if necessary for fairy aniamtions var delay = (_currentCutscene == eCutsceneType.CRAWL_DOOR || _currentCutscene == eCutsceneType.OBLIVION_PORTAL) ? 0.3f : 0.0f; StartCoroutine(DelayPostCutsceneFadeIn(delay)); } // Reset for next cutscene _currentCutscene = eCutsceneType.NULL; _cutsceneObject = null; if (CutsceneCompleteEvent != null) { CutsceneCompleteEvent(); } // Un-block player input if (InputManager.Instance != null) { InputManager.Instance.OnBlockInput(false); } }
//===================================================== private IEnumerator ShowKeyCollectedPopup(ICutsceneObject obj, ePuzzleKeyType keyType) { var isFinalKey = GameDataManager.Instance.GetNumKeysCollected(CurrentLocation) >= Convert.ToInt32(SettingsManager.GetSettingsItem("NUM_PUZZLE_ROOM_KEYS", (int)CurrentLocation)); yield return(new WaitForSeconds(1.5f)); PopupKeyCollected.PopupKeyExitScene += OnPopupKeyExitScene; PopupKeyCollected.Instance.Show(obj, keyType, isFinalKey); }
//===================================================== public void OnKeyCollected(ICutsceneObject obj, ePuzzleKeyType keyType) { if (InputManager.Instance != null) { InputManager.Instance.OnBlockInput(true); } // Eject player from puzzle-room - ensure player isn't flagged as dead _isPlayerDead = false; PlayerManager.OnCelebrate(); StartCoroutine(ShowKeyCollectedPopup(obj, keyType)); }
//===================================================== #region Private Methods void Awake() { Instance = this; _camera = this.transform.GetComponentInChildren <Camera>(); _currentCutscene = eCutsceneType.NULL; _cutsceneObject = null; _cutsceneTimer = 0.0f; _cameraPath = null; _isCameraFollowingPath = false; _cameraPathAnimator = null; _isFadeCompelete = false; _isPaused = false; _durationStartToEnd = 0.0f; _tweenId = -1; _checkForCancelCutscene = false; }
//===================================================== private void OnBossWinsEvent(ICutsceneObject cutsceneObject) { Debug.Log("OnBossWinsEvent !!!!!!"); _timer = -1.0f; // Hide health bar _healthBar.gameObject.SetActive(false); CurrentState = eBossState.IDLE; // Stop referenced managers _gridManager.OnBossDeadEvent(); _enemyManager.OnClearEnemiesEvent(true); _isPlayerDefeated = true; }
//===================================================== public void Show(ICutsceneObject obj, ePuzzleKeyType keyType, bool _isFinalKey) { // ToDo: show additional info for collecting all keys in scene if (_camera == null) { _camera = transform.FindChild("GuiCamera").gameObject; } if (_camera == null) { return; } // Store cutscene object - pass back to GameManager when closing popup _keyCutsceneObject = obj; _camera.SetActive(true); _keyType = keyType; //var id = ""; switch (_keyType) { default: _imgKey.sprite = _keyDefault; _txtKeyId.text = TextManager.GetText("POPUP_KEY") + " " + ((int)_keyType - 1); break; case ePuzzleKeyType.KEY_GEM_RED: _imgKey.sprite = _keyRedGems; _txtKeyId.text = TextManager.GetText("POPUP_KEY_RED_GEMS"); break; case ePuzzleKeyType.KEY_GEM_100: _imgKey.sprite = _key100Gems; _txtKeyId.text = TextManager.GetText("POPUP_KEY_100_GEMS"); break; } //_txtKeyId.text = TextManager.GetText( "POPUP_KEY" ) + " " + id; _txtCollected.text = TextManager.GetText("POPUP_KEY_COLLECTED"); }
//===================================================== private void OnPopupKeyExitScene(ICutsceneObject obj, bool exitScene = true) { PopupKeyCollected.PopupKeyExitScene -= OnPopupKeyExitScene; // Remain in current scene? e.g. collecting 100 gems exposing 100_gem_key if (exitScene == false) { if (InputManager.Instance != null) { InputManager.Instance.OnBlockInput(false); } return; } SetNextLocation(eLocation.MAIN_HALL); // Signal Cutscene to start fade-out. GameManager waits for fade-out completed event if (KeyCollectedEvent != null) { KeyCollectedEvent(obj); } }
//===================================================== // Start cutscene. Optional param could be used for door-bolt-index public void OnStartCutscene(eCutsceneType cutsceneType, ICutsceneObject cutsceneObject = null, int param = 0) { Debug.Log("OnStartCutscene"); // Clear for now - set after fade-in to cutscene _currentCutscene = eCutsceneType.NULL; // Set up cutscene stuff then fade-out -> fade-in to cutscene -> fade-out (optional fade-in to same scene) _cutsceneType = cutsceneType; _cutsceneObject = cutsceneObject; _cutsceneTimer = (_cutsceneObject != null) ? _cutsceneObject.CutsceneDuration() : 2.5f; // Is the cutscene using a camera fly-thru object if (cutsceneObject != null && cutsceneObject.IsFlyThruAvailable() == true) { _cameraPathAnimator = cutsceneObject.GetFlyThruAnimator(); } _cameraPath = (_cameraPathAnimator == null && _cutsceneObject != null) ? _cutsceneObject.CameraPath() : null; _fadeSpeed = 1.0f; _isFadeCompelete = false; switch (_cutsceneType) { case eCutsceneType.RETURN_TO_START: case eCutsceneType.GO_TO_COMMON_ROOM: case eCutsceneType.CRAWL_DOOR: case eCutsceneType.OBLIVION_PORTAL: case eCutsceneType.ENTER_PUZZLE_ROOM: case eCutsceneType.LEAVE_PUZZLE_ROOM: case eCutsceneType.ENTER_PLAYER_HUB: case eCutsceneType.LEAVE_PLAYER_HUB: case eCutsceneType.ENTER_BOSS_ROOM: case eCutsceneType.LEAVE_BOSS_ROOM: case eCutsceneType.COLLECT_KEY: case eCutsceneType.SWITCH_OPENS_DOOR_BOLT_01: case eCutsceneType.SWITCH_OPENS_DOOR_BOLT_02: case eCutsceneType.SWITCH_OPENS_DOOR_BOLT_03: case eCutsceneType.SWITCH_OPENS_DOOR: case eCutsceneType.SWITCH_ACTIVATES_PLATFORM: case eCutsceneType.OPEN_CHEST: case eCutsceneType.DEATH_RESPAWN: case eCutsceneType.DEATH: case eCutsceneType.FLY_THRU: case eCutsceneType.BOSS_ROOM_START: case eCutsceneType.BOSS_ROOM_BOSS_LOSES: case eCutsceneType.BOSS_ROOM_BOSS_WINS: _fadeSpeed = 1.0f; break; } _durationStartToEnd = _cutsceneTimer; // Fade out from game -> fade in to cutscene if (cutsceneType != eCutsceneType.NULL && cutsceneType != eCutsceneType.GO_TO_COMMON_ROOM && cutsceneType != eCutsceneType.RETURN_TO_START && cutsceneType != eCutsceneType.DEATH_RESPAWN && cutsceneType != eCutsceneType.DEATH && _cutsceneType != eCutsceneType.BOSS_ROOM_START) { ScreenManager.FadeOutCompleteEvent += OnPreCutsceneFadeOutCompleteEvent; ScreenManager.FadeOut(_fadeSpeed); } // Fade in to Boss game immediately else if (_cutsceneType == eCutsceneType.BOSS_ROOM_START) { Invoke("OnPreCutsceneFadeOutCompleteEvent", 0.5f); } // Fade out from game -> no cutscene else { ScreenManager.FadeOutCompleteEvent += OnPostCutsceneFadeOutCompleteEvent; ScreenManager.FadeOut(_fadeSpeed); _currentCutscene = cutsceneType; } // Block player input if (InputManager.Instance != null) { InputManager.Instance.OnBlockInput(true); } }
//===================================================== public void OnBossRoomBossWinsEvent(ICutsceneObject cutsceneObject) { OnStartCutscene(eCutsceneType.BOSS_ROOM_BOSS_WINS, cutsceneObject); }
//===================================================== public void OnBossRoomBossLosesEvent(ICutsceneObject cutsceneObject) { OnStartCutscene(eCutsceneType.BOSS_ROOM_BOSS_LOSES, cutsceneObject); }
//===================================================== public void OnBossRoomStartEvent(ICutsceneObject cutsceneObject) { OnStartCutscene(eCutsceneType.BOSS_ROOM_START, cutsceneObject); }
//===================================================== public void OnKeyCollectedEvent(ICutsceneObject obj) { OnStartCutscene(eCutsceneType.COLLECT_KEY, obj); }