Esempio n. 1
0
        public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
        {
            float vSpace          = 0;
            float hSpace          = 3;
            float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;

            GUIContent timeText       = new GUIContent("sec");
            var        textDimensions = GUI.skin.label.CalcSize(timeText);

            rect = EditorGUI.PrefixLabel(rect, label);

            rect.y     += vSpace;
            rect.height = EditorGUIUtility.singleLineHeight;
            rect.width -= hSpace + floatFieldWidth + textDimensions.x;

            CinemachineBlendDefinition myClass   = new CinemachineBlendDefinition(); // to access name strings
            SerializedProperty         styleProp = property.FindPropertyRelative(() => myClass.m_Style);

            EditorGUI.PropertyField(rect, styleProp, GUIContent.none);

            if (styleProp.intValue != (int)CinemachineBlendDefinition.Style.Cut)
            {
                rect.x += rect.width + hSpace; rect.width = floatFieldWidth;
                SerializedProperty timeProp = property.FindPropertyRelative(() => myClass.m_Time);
                EditorGUI.PropertyField(rect, timeProp, GUIContent.none);
                rect.x += floatFieldWidth; rect.width = textDimensions.x;
                EditorGUI.LabelField(rect, timeText);
            }
        }
Esempio n. 2
0
    public void OnPause()
    {
        HideWorldSpaceUI();

        // Set default camera mode to Cut
        defaultBlendTemp             = brain.m_DefaultBlend;
        brain.m_DefaultBlend.m_Style = CinemachineBlendDefinition.Style.Cut;
    }
Esempio n. 3
0
    /// <summary>
    /// <see cref="RequestChangeCM(CMType)"/>
    /// </summary>
    private void DoLateUpdate_ChangeCM(float deltaTime)
    {
        m_ChangingCMBlendReaminTime = Mathf.Max(0.0f, m_ChangingCMBlendReaminTime - deltaTime);
        if (m_ChangingCMBlendReaminTime > 0 ||
            m_ChangingCMs.Count == 0 ||
            CinemachineCore.Instance.BrainCount > 1)
        {
            return;
        }

        CMType cmType = m_ChangingCMs.Dequeue();

        if (m_LastCMType == cmType)
        {
            Leyoutech.Utility.DebugUtility.LogWarning(CameraManager.LOG_TAG, "Repeat change CM to " + cmType);
            return;
        }

        if (!m_MainCMBrain.enabled)
        {
            m_MainCMBrain.enabled = true;
        }

        CinemachineBlendDefinition cinemachineBlendDefinition = m_MainCMBrain.m_CustomBlends.GetBlendForVirtualCameras(m_LastCMType.ToString(), cmType.ToString(), m_MainCMBrain.m_DefaultBlend);

        Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG
                                           , string.Format("Change CM form {0} to {1} use blend definition Style:{2} Time:{3}"
                                                           , m_LastCMType
                                                           , cmType
                                                           , cinemachineBlendDefinition.m_Style
                                                           , cinemachineBlendDefinition.m_Time));

        try
        {
            Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG, "Begin invoke CM Changed");
            _OnCMChanged?.Invoke(m_LastCMType, cmType);
            Leyoutech.Utility.DebugUtility.Log(CameraManager.LOG_TAG, "End invoke CM Changed");
        }
        catch (Exception e)
        {
            Leyoutech.Utility.DebugUtility.LogError(CameraManager.LOG_TAG, "Invoke CM Changed Exception:\n" + e.ToString());
        }

        m_ChangingCMBlendReaminTime = cinemachineBlendDefinition.m_Time;

        TransitionBlendDefinition transitionBlendDefinition = m_MainCameraTransitionBlenderSettings.FindBlend(m_LastCMType.ToString(), cmType.ToString());

        m_CMs[(int)cmType].ApplyTransitionBlendDefinition(transitionBlendDefinition);
        m_CMs[(int)cmType].SetEnable(true);

        if (m_LastCMType != CMType.Notset)
        {
            m_CMs[(int)m_LastCMType].SetEnable(false);
        }

        m_LastCMType = cmType;
    }
Esempio n. 4
0
 public void AddBlendSetting(string fromBlend, string toBlend, CinemachineBlendDefinition blendDef)
 {
     CinemachineBlenderSettings.CustomBlend blend;
     blend.m_From  = fromBlend;
     blend.m_To    = toBlend;
     blend.m_Blend = blendDef;
     blends.Add(blend);
     blenderSetting.m_CustomBlends = blends.ToArray();
     Camera.main.GetComponent <CinemachineBrain>().m_CustomBlends = blenderSetting;
 }
Esempio n. 5
0
    public void StartPuzzle()
    {
        if (_isCoolingDown)
        {
            return;
        }

        // Get camera, even if we have no persistent scene
        if (CameraDirector.IsLoaded)
        {
            brain = CameraDirector.Camera.GetComponent <CinemachineBrain>();
        }
        else
        {
            brain = Camera.main.GetComponent <CinemachineBrain>();
        }

        // cache the old cinemachine blend mode, replace it with ours
        oldBlend = brain.m_DefaultBlend;

        brain.m_DefaultBlend =
            new CinemachineBlendDefinition(CinemachineBlendDefinition.Style.EaseInOut, transitionTime);

        // ease into the TransitionCam
        transitionCam.Priority = 100;

        // lock the player
        PlayerMovement player;

        if (PlayerManager.IsLoaded)
        {
            player = PlayerManager.CurrentPlayer.GetComponent <PlayerMovement>();
        }
        else
        {
            player = GameObject.FindWithTag("Player").GetComponent <PlayerMovement>();
        }

        player.ChangeState(PlayerMovement.PlayerState.Locked);

        // activate ourselves, deactivate children so they don't show.
        // @NOTE: We need to be active so that we can run the coroutine
        gameObject.SetActive(true);

        for (int i = 0; i < transform.childCount; i++)
        {
            transform.GetChild(i).gameObject.SetActive(false);
        }

        StartCoroutine(TransitionIn());
    }
Esempio n. 6
0
    private void InitBattleCameras(GolfCameraType initType)
    {
        CameraM = new GolfCameraManage(GolfCameraType.Sky);
        CameraM.AddCamera(new GolfCamera(GolfCameraType.Sky, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0)));
        CameraM.AddCamera(new GolfCamera(GolfCameraType.Drive2Fly, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0)));
        CameraM.AddCamera(new GolfCamera(GolfCameraType.Drive2Roll, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0)));
        CameraM.AddCamera(new GolfCamera(GolfCameraType.Fly2Land, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0)));
        CameraM.AddCamera(new GolfCamera(GolfCameraType.Land2Roll, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0)));
        CameraM.AddCamera(new GolfCamera(GolfCameraType.NearHole, transform, GolfCamera.GolfCameraPriority.Middle, 60, new Vector3(0, 0, 0)));

        CinemachineBlendDefinition blendDef = new CinemachineBlendDefinition(CinemachineBlendDefinition.Style.Cut, 1);

        CameraM.AddBlendSetting(CinemachineBlenderSettings.kBlendFromAnyCameraLabel, CameraM.GetCamera(GolfCameraType.Fly2Land).Name, blendDef);

        CameraM.SwitchCamera(initType, true);
    }
Esempio n. 7
0
 /// <summary>
 /// When getting an event we change our default transition if needed
 /// </summary>
 /// <param name="channel"></param>
 /// <param name="forceMaxPriority"></param>
 /// <param name="newPriority"></param>
 /// <param name="forceTransition"></param>
 /// <param name="blendDefinition"></param>
 /// <param name="resetValuesAfterTransition"></param>
 public virtual void OnMMCinemachinePriorityEvent(int channel, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition)
 {
     if (forceTransition)
     {
         if (_coroutine != null)
         {
             StopCoroutine(_coroutine);
         }
         else
         {
             _initialDefinition = _brain.m_DefaultBlend;
         }
         _brain.m_DefaultBlend = blendDefinition;
         _coroutine            = StartCoroutine(ResetBlendDefinition(blendDefinition.m_Time));
     }
 }
Esempio n. 8
0
 /// <summary>
 /// Triggers a priority change on listening virtual cameras
 /// </summary>
 /// <param name="position"></param>
 /// <param name="feedbacksIntensity"></param>
 protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f)
 {
     if (Active)
     {
         _tempBlend        = BlendDefintion;
         _tempBlend.m_Time = FeedbackDuration;
         if (Mode == Modes.Event)
         {
             MMCinemachinePriorityEvent.Trigger(Channel, ForceMaxPriority, NewPriority, ForceTransition, _tempBlend, ResetValuesAfterTransition, Timing.TimescaleMode);
         }
         else
         {
             MMCinemachinePriorityEvent.Trigger(Channel, ForceMaxPriority, 0, ForceTransition, _tempBlend, ResetValuesAfterTransition, Timing.TimescaleMode);
             TargetVirtualCamera.Priority = NewPriority;
         }
     }
 }
Esempio n. 9
0
    /// <summary>
    /// 重置相机混合
    /// </summary>
    /// <returns>IEnumerator</returns>
    private IEnumerator ResetCameraBrainBlend()
    {
        CinemachineBrain cameraBrain = CameraManager.GetInstance().GetMainCamereComponent().GetCamera().GetComponent <CinemachineBrain>();

        CinemachineBlendDefinition oldSetting = cameraBrain.m_DefaultBlend;

        CinemachineBlendDefinition newSetting = cameraBrain.m_DefaultBlend;

        newSetting.m_Time          = 0.0f;
        cameraBrain.m_DefaultBlend = newSetting;

        yield return(new WaitForEndOfFrame());

        yield return(new WaitForEndOfFrame());

        cameraBrain.m_DefaultBlend = oldSetting;

        CinemachineVirtualCamera camera1 = GetOrCreateVirtualCamera(VIRTUAL_CAMERA_NAME_1);
        CinemachineVirtualCamera camera2 = GetOrCreateVirtualCamera(VIRTUAL_CAMERA_NAME_2);

        camera2.Follow  = camera1.Follow = null;
        camera1.enabled = camera2.enabled = false;
    }
        void SetupBlendList()
        {
            mBlendList = new ReorderableList(serializedObject,
                                             serializedObject.FindProperty(() => Target.m_CustomBlends),
                                             true, true, true, true);

            // Needed for accessing string names of fields
            CinemachineBlenderSettings.CustomBlend def  = new CinemachineBlenderSettings.CustomBlend();
            CinemachineBlendDefinition             def2 = new CinemachineBlendDefinition();

            float vSpace          = 2;
            float hSpace          = 3;
            float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;

            mBlendList.drawHeaderCallback = (Rect rect) =>
            {
                rect.width -= (EditorGUIUtility.singleLineHeight + 2 * hSpace);
                rect.width /= 3;
                rect.x     += EditorGUIUtility.singleLineHeight;
                EditorGUI.LabelField(rect, "From");

                rect.x += rect.width + hSpace;
                EditorGUI.LabelField(rect, "To");

                rect.x += rect.width + hSpace; rect.width -= floatFieldWidth + hSpace;
                EditorGUI.LabelField(rect, "Style");

                rect.x += rect.width + hSpace; rect.width = floatFieldWidth;
                EditorGUI.LabelField(rect, "Time");
            };

            mBlendList.drawElementCallback
                = (Rect rect, int index, bool isActive, bool isFocused) =>
                {
                SerializedProperty element
                    = mBlendList.serializedProperty.GetArrayElementAtIndex(index);

                rect.y     += vSpace;
                rect.height = EditorGUIUtility.singleLineHeight;
                rect.width -= 2 * hSpace; rect.width /= 3;
                DrawVcamSelector(rect, element.FindPropertyRelative(() => def.m_From));

                rect.x += rect.width + hSpace;
                DrawVcamSelector(rect, element.FindPropertyRelative(() => def.m_To));

                SerializedProperty blendProp = element.FindPropertyRelative(() => def.m_Blend);
                rect.x += rect.width + hSpace;
                EditorGUI.PropertyField(rect, blendProp, GUIContent.none);
                };

            mBlendList.onAddCallback = (ReorderableList l) =>
            {
                var index = l.serializedProperty.arraySize;
                ++l.serializedProperty.arraySize;
                SerializedProperty blendProp = l.serializedProperty.GetArrayElementAtIndex(
                    index).FindPropertyRelative(() => def.m_Blend);

                blendProp.FindPropertyRelative(() => def2.m_Style).enumValueIndex
                    = (int)CinemachineBlendDefinition.Style.EaseInOut;
                blendProp.FindPropertyRelative(() => def2.m_Time).floatValue = 2f;
            };
        }
Esempio n. 11
0
        void SetupBlendList()
        {
            mBlendList = new ReorderableList(serializedObject,
                                             serializedObject.FindProperty(() => Target.m_CustomBlends),
                                             true, true, true, true);

            // Needed for accessing string names of fields
            CinemachineBlenderSettings.CustomBlend def  = new CinemachineBlenderSettings.CustomBlend();
            CinemachineBlendDefinition             def2 = new CinemachineBlendDefinition();

            float vSpace          = 2;
            float hSpace          = 3;
            float floatFieldWidth = EditorGUIUtility.singleLineHeight * 2.5f;

            mBlendList.drawHeaderCallback = (Rect rect) =>
            {
                rect.width -= (EditorGUIUtility.singleLineHeight + 2 * hSpace);
                rect.width /= 3;
                Vector2 pos = rect.position; pos.x += EditorGUIUtility.singleLineHeight;
                rect.position = pos;
                EditorGUI.LabelField(rect, "From");

                pos.x += rect.width + hSpace; rect.position = pos;
                EditorGUI.LabelField(rect, "To");

                pos.x += rect.width + hSpace; rect.width -= floatFieldWidth + hSpace; rect.position = pos;
                EditorGUI.LabelField(rect, "Style");

                pos.x += rect.width + hSpace; rect.width = floatFieldWidth; rect.position = pos;
                EditorGUI.LabelField(rect, "Time");
            };

            mBlendList.drawElementCallback
                = (Rect rect, int index, bool isActive, bool isFocused) =>
                {
                SerializedProperty element
                    = mBlendList.serializedProperty.GetArrayElementAtIndex(index);

                rect.y     += vSpace;
                rect.height = EditorGUIUtility.singleLineHeight;
                Vector2 pos = rect.position;
                rect.width -= 2 * hSpace; rect.width /= 3;
                SerializedProperty fromProp = element.FindPropertyRelative(() => def.m_From);
                int current = GetCameraIndex(fromProp.stringValue);
                int sel     = EditorGUI.Popup(rect, current, mCameraCandidates);
                if (current != sel)
                {
                    fromProp.stringValue = mCameraCandidates[sel];
                }

                pos.x += rect.width + hSpace; rect.position = pos;
                SerializedProperty toProp = element.FindPropertyRelative(() => def.m_To);
                current = GetCameraIndex(toProp.stringValue);
                sel     = EditorGUI.Popup(rect, current, mCameraCandidates);
                if (current != sel)
                {
                    toProp.stringValue = mCameraCandidates[sel];
                }

                SerializedProperty blendProp = element.FindPropertyRelative(() => def.m_Blend);
                pos.x += rect.width + hSpace; rect.width -= floatFieldWidth; rect.position = pos;
                SerializedProperty styleProp = blendProp.FindPropertyRelative(() => def2.m_Style);
                EditorGUI.PropertyField(rect, styleProp, GUIContent.none);

                if (styleProp.intValue != (int)CinemachineBlendDefinition.Style.Cut)
                {
                    pos.x += rect.width + hSpace; rect.width = floatFieldWidth; rect.position = pos;
                    SerializedProperty timeProp = blendProp.FindPropertyRelative(() => def2.m_Time);
                    EditorGUI.PropertyField(rect, timeProp, GUIContent.none);
                }
                };

            mBlendList.onAddCallback = (ReorderableList l) =>
            {
                var index = l.serializedProperty.arraySize;
                ++l.serializedProperty.arraySize;
                SerializedProperty blendProp = l.serializedProperty.GetArrayElementAtIndex(
                    index).FindPropertyRelative(() => def.m_Blend);

                blendProp.FindPropertyRelative(() => def2.m_Style).enumValueIndex
                    = (int)CinemachineBlendDefinition.Style.EaseInOut;
                blendProp.FindPropertyRelative(() => def2.m_Time).floatValue = 2f;
            };
        }
Esempio n. 12
0
    /// <summary>
    /// Passes to the next sequence. Does nothing is no sequence is left
    /// </summary>
    public void NextSequence()
    {
        if (currentSequence.cutsSlowMoOnEnd)
        {
            C_TimeScale.Instance.ForceStopSlowMo();
        }

        GameObject.FindObjectOfType <C_CameraRail>().bFeedbckActivated = currentSequence.bEnableCamFeedback;
        GameObject.FindObjectOfType <C_CameraRail>().FeedbackTransition(currentSequence.bEnableCamTransition, currentSequence.fSpeedTransition);

        if (currentSequence.hasEventOnEnd)
        {
            switch (currentSequence.seqEvent)
            {
            case M_Sequence.SequenceEndEventType.SlowMo:

                TriggerUtil.TriggerSlowMo(currentSequence.tTimeBeforeEvent, currentSequence.slowMoDuration, currentSequence.slowMoPower);

                break;

            case M_Sequence.SequenceEndEventType.Activation:

                TriggerUtil.TriggerActivation(currentSequence.tTimeBeforeEvent, currentSequence.affected, currentSequence.isActivation);

                break;

            case M_Sequence.SequenceEndEventType.Sound:

                TriggerUtil.TriggerSound(currentSequence.tTimeBeforeEvent, currentSequence.soundPlayed, currentSequence.volume);

                break;

            case M_Sequence.SequenceEndEventType.Animation:

                TriggerUtil.TriggerAnimationsFromTags(currentSequence.tTimeBeforeEvent, currentSequence.tagsAnimated);

                break;

            default:
                break;
            }
        }

        if (sequenceIndex < sequences.Count - 1)
        {
            sequenceIndex++;
            isWaitingTimer = false;

            currentSequence = sequences[sequenceIndex];

            //Debug.Log(currentVirtualCamera);

            //CREATION DU NOUVEAU BLEND
            CinemachineBlendDefinition blendDef = new CinemachineBlendDefinition
            {
                m_Style = currentSequence.animationStyle,
                m_Time  = currentSequence.fAnimationTime
            };

            //SETUP BLEND
            CinemachineBlenderSettings.CustomBlend blend = new CinemachineBlenderSettings.CustomBlend
            {
                m_From  = currentVirtualCamera.Name,
                m_To    = currentSequence.vCamTargetName,
                m_Blend = blendDef
            };

            blenderSettings.m_CustomBlends[0] = blend;

            cameraBrain.m_CustomBlends = blenderSettings;


            //CHANGEMENT DE CAM
            currentVirtualCamera.Priority = 10;
            PastCamPos                    = currentVirtualCamera.transform.position;
            currentVirtualCamera          = GameObject.Find(currentSequence.vCamTargetName).GetComponent <CinemachineVirtualCamera>();
            currentVirtualCamera.Priority = 11;
            NewCamPos = currentVirtualCamera.transform.position;

            //APPEL DE FONCTIONS DANS LES CHARGEURS
            C_Charger[] _Chargeurs = GameObject.FindObjectsOfType <C_Charger>();
            for (int i = 0; i < _Chargeurs.Length; i++)
            {
                _Chargeurs[i].PlayerChangePosition();
            }
            C_Shooter[] _Shooter = GameObject.FindObjectsOfType <C_Shooter>();
            for (int i = 0; i < _Shooter.Length; i++)
            {
                _Shooter[i].PlayerChangePosition();
            }

            fDelayOnBlendSequence = currentSequence.fAnimationTime + (currentSequence.sequenceType == M_Sequence.SequenceType.Timer ? currentSequence.fTimeSequenceDuration : 0);
            enemiesKilled         = 0;


            //DECLENCHEMENT DU FEEDBACK DE CAM
            if (GameObject.FindObjectOfType <C_CameraRail>())
            {
                GameObject.FindObjectOfType <C_CameraRail>().ChangeSpeedMoving(Vector3.Distance(PastCamPos, NewCamPos) / 5 / fDelayOnBlendSequence, 50);
            }

            if (currentSequence.sequenceType == M_Sequence.SequenceType.KillEnnemies)
            {
                if (currentSequence.bAcceptsBufferKill)
                {
                    enemiesKilled = bufferedKills;
                }
                bufferedKills = 0;
            }
        }
        else
        {
            Debug.Log("No sequence left");

            readSequences = false;
        }
    }
 static public void Trigger(int channel, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition)
 {
     OnEvent?.Invoke(channel, forceMaxPriority, newPriority, forceTransition, blendDefinition, resetValuesAfterTransition);
 }
 /// <summary>
 /// When we get an event we change our priorities if needed
 /// </summary>
 /// <param name="channel"></param>
 /// <param name="forceMaxPriority"></param>
 /// <param name="newPriority"></param>
 /// <param name="forceTransition"></param>
 /// <param name="blendDefinition"></param>
 /// <param name="resetValuesAfterTransition"></param>
 public virtual void OnMMCinemachinePriorityEvent(int channel, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition)
 {
     if (channel == Channel)
     {
         _camera.Priority = newPriority;
     }
     else
     {
         if (forceMaxPriority)
         {
             _camera.Priority = 0;
         }
     }
 }