//===================================================== public static void OnPlayCutsceneAnimation(eCutsceneType cutsceneType) { switch (cutsceneType) { case eCutsceneType.ENTER_BOSS_ROOM: case eCutsceneType.ENTER_PUZZLE_ROOM: case eCutsceneType.ENTER_PLAYER_HUB: case eCutsceneType.LEAVE_BOSS_ROOM: case eCutsceneType.LEAVE_PLAYER_HUB: case eCutsceneType.LEAVE_PUZZLE_ROOM: _playerMovement.IsPlayerActionRequired = true; _playerMovement.IsCutsceneWalk = true; break; case eCutsceneType.OBLIVION_PORTAL: _playerMovement.IsPlayerActionRequired = true; _playerMovement.IsCutscenePortal = true; break; case eCutsceneType.CRAWL_DOOR: _playerMovement.IsPlayerActionRequired = true; _playerMovement.IsCutsceneCrawl = true; break; case eCutsceneType.COLLECT_KEY: case eCutsceneType.BOSS_ROOM_BOSS_LOSES: _playerMovement.IsPlayerActionRequired = true; _playerMovement.IsCutsceneCelebrate = true; break; } }
public IEnumerator StartCutscene(eCutsceneType _cutsceneType) { isCutscenePlaying = true; if (PlayerController.Instance != null) { PlayerController.Instance.canMove = false; } Debug.Log("연출매니저 스타트 컷씬"); yield return(new WaitForSeconds(1f)); Time.timeScale = 0f; UICutScene tempCutscene = null; switch (_cutsceneType) { case eCutsceneType.INTRO: break; case eCutsceneType.UNLOCK_WIND: tempCutscene = cutScene_Wind; break; case eCutsceneType.UNLOCK_WATER: tempCutscene = cutScene_Water; break; case eCutsceneType.UNLOCK_LIGHTNING: tempCutscene = cutScene_Lightning; break; default: break; } yield return(StartCoroutine(tempCutscene.ProcessCutScene())); if (tempCutscene.isLastFade == false) { while (tempCutscene.isNext == false) { yield return(YieldInstructionCache.WaitForEndOfFrame); } } Time.timeScale = 1f; yield return(StartCoroutine(tempCutscene.ProcessClose_Fade())); if (PlayerController.Instance != null) { PlayerController.Instance.canMove = true; } isCutscenePlaying = false; }
//===================================================== 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 void OnPreCutsceneFadeInCompleteEvent() { Debug.Log("OnPreCutsceneFadeInCompleteEvent"); ScreenManager.FadeInCompleteEvent -= OnPreCutsceneFadeInCompleteEvent; _isFadeCompelete = true; // *** Start Cutscene - See Update() *** _currentCutscene = _cutsceneType; PlayCutscene(); _checkForCancelCutscene = true; }
//===================================================== #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; }
//===================================================== // 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); } }
//===================================================== private void OnPerformActionEvent() { var startCutscene = false; _currentCutsceneType = eCutsceneType.NULL; switch (_currentPlayerAction) { case ePlayerAction.CLIMB_UP: _playerMovement.IsClimbingUpOk = true; break; case ePlayerAction.CLIMB_DOWN: _playerMovement.IsClimbingDownOk = true; break; case ePlayerAction.USE_FLOOR_LEVER: if (_currentInteractiveObject != null && _currentInteractiveObject.IsInteractionOk() == true) { _playerMovement.IsUseFloorLeverOk = true; _playerMovement.IsPlayerActionRequired = true; _currentInteractiveObject.OnPlayerInteraction(); // Note: Switch activation triggers door / object to start cutscene } break; case ePlayerAction.USE_WALL_LEVER: if (_currentInteractiveObject != null && _currentInteractiveObject.IsInteractionOk() == true) { _playerMovement.IsUseWallLeverOk = true; _playerMovement.IsPlayerActionRequired = true; _currentInteractiveObject.OnPlayerInteraction(); // Note: Switch activation triggers door / object to start cutscene } break; case ePlayerAction.OPEN_DOOR: if (_currentInteractiveObject != null) { if (_currentInteractiveObject.IsInteractionOk() == true) { _playerMovement.IsOpenDoorOk = true; _currentInteractiveObject.OnPlayerInteraction(); } else { _playerMovement.IsInteractFail = true; } } break; case ePlayerAction.CRAWL_THROUGH_DOOR: // Start cutscene - crawl through door - then move player to new spawn point _currentCutsceneType = eCutsceneType.CRAWL_DOOR; startCutscene = true; break; case ePlayerAction.TELEPORT_OBLIVION_PORTAL: // Start cutscene - teleport from portal - then move player to new spawn point _currentCutsceneType = eCutsceneType.OBLIVION_PORTAL; startCutscene = true; break; case ePlayerAction.ENTER_PUZZLE_ROOM: // Start cutscene - move to next scene _playerMovement.IsOpenDoorOk = true; _playerMovement.IsPlayerActionRequired = true; // Update GameManager with target-scene and open door during cutscene fade-out _currentInteractiveObject.OnPlayerInteraction(); _currentCutsceneType = eCutsceneType.ENTER_PUZZLE_ROOM; startCutscene = true; break; case ePlayerAction.LEAVE_PUZZLE_ROOM: // Start cutscene - move to next scene _playerMovement.IsOpenDoorOk = true; _playerMovement.IsPlayerActionRequired = true; // Update GameManager with target-scene and open door during cutscene fade-out _currentInteractiveObject.OnPlayerInteraction(); _currentCutsceneType = eCutsceneType.LEAVE_PUZZLE_ROOM; startCutscene = true; break; case ePlayerAction.ENTER_PLAYER_HUB: // Start cutscene - move to next scene _playerMovement.IsOpenDoorOk = true; _playerMovement.IsPlayerActionRequired = true; // Update GameManager with target-scene and open door during cutscene fade-out _currentInteractiveObject.OnPlayerInteraction(); _currentCutsceneType = eCutsceneType.ENTER_PLAYER_HUB; startCutscene = true; break; case ePlayerAction.LEAVE_PLAYER_HUB: // Start cutscene - move to next scene _playerMovement.IsOpenDoorOk = true; _playerMovement.IsPlayerActionRequired = true; // Update GameManager with target-scene and open door during cutscene fade-out _currentInteractiveObject.OnPlayerInteraction(); _currentCutsceneType = eCutsceneType.LEAVE_PLAYER_HUB; startCutscene = true; break; case ePlayerAction.ENTER_BOSS_ROOM: if (_currentInteractiveObject != null && _currentInteractiveObject.IsInteractionOk() == true) { // Start cutscene - move to next scene _playerMovement.IsOpenDoorOk = true; _playerMovement.IsPlayerActionRequired = true; // Update GameManager with target-scene and open door during cutscene fade-out _currentInteractiveObject.OnPlayerInteraction(); _currentCutsceneType = eCutsceneType.ENTER_BOSS_ROOM; startCutscene = true; } else { _playerMovement.IsInteractFail = true; } break; case ePlayerAction.LEAVE_BOSS_ROOM: // Start cutscene - move to next scene _playerMovement.IsOpenDoorOk = true; _playerMovement.IsPlayerActionRequired = true; // Update GameManager with target-scene and open door during cutscene fade-out _currentInteractiveObject.OnPlayerInteraction(); _currentCutsceneType = eCutsceneType.LEAVE_BOSS_ROOM; startCutscene = true; break; case ePlayerAction.PUSH_OBJECT: if (_currentInteractiveObject != null) { if (_currentInteractiveObject.IsInteractionOk() == true) { _playerMovement.IsPushingOk = true; _currentInteractiveObject.OnPlayerInteraction(); } else { _playerMovement.IsPushingNotOk = true; } // Trigger action but don't clear it - pushing can be looped until exiting obstacle collider _playerMovement.IsPlayerActionRequired = true; } return; case ePlayerAction.CAST_SPELL_ATTACK: case ePlayerAction.CAST_SPELL_MELT: case ePlayerAction.CAST_SPELL_DISABLE_TRAP: // Don't allow casting spells in the tutorial scene if (GameManager.Instance.CurrentLocation == eLocation.TUTORIAL) { ClearCurrentAction(); return; } // ToDo: alter CastSpell to suit playerAction // Face player towards target / enemy var dir = _spellTarget - _thisTransform.position; Direction = new Vector3(dir.x, 0.0f, dir.z); // Set player ready to cast spell (play animation) _playerMovement.IsCastAttackSpellOk = true; // Trigger cast-spell action (plays animation) but don't clear it - player may cast more than one spell while near enemy //_playerMovement.IsPlayerActionRequired = true; // Cast spell StartCoroutine(CastSpell(_spellTarget)); break; case ePlayerAction.OPEN_CHEST: if (_currentInteractiveObject != null && _currentInteractiveObject.IsInteractionOk() == true) { _playerMovement.IsOpenChestOk = true; _playerMovement.IsPlayerActionRequired = true; _currentInteractiveObject.OnPlayerInteraction(); } else { _playerMovement.IsInteractFail = true; } break; } if (startCutscene) { CutsceneManager.CutsceneCompleteEvent += OnCutsceneCompleteEvent; CutsceneManager.Instance.OnStartCutscene(_currentCutsceneType, _currentInteractiveObject); ClearCurrentAction(); return; } // Defaults to jump if no player-action has been recorded if (_playerMovement.IsJumpingOk == true) { _playerMovement.IsPlayerActionRequired = true; } ClearCurrentAction(); }