示例#1
0
    //=====================================================

    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;
        }
    }
示例#2
0
    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;
    }
示例#3
0
    //=====================================================

    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);
        }
    }
示例#4
0
    //=====================================================

    private void OnPreCutsceneFadeInCompleteEvent()
    {
        Debug.Log("OnPreCutsceneFadeInCompleteEvent");

        ScreenManager.FadeInCompleteEvent -= OnPreCutsceneFadeInCompleteEvent;

        _isFadeCompelete = true;

        // *** Start Cutscene - See Update() ***
        _currentCutscene = _cutsceneType;

        PlayCutscene();

        _checkForCancelCutscene = true;
    }
示例#5
0
    //=====================================================

    #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;
    }
示例#6
0
    //=====================================================
    // 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);
        }
    }
示例#7
0
    //=====================================================

    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();
    }