| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using UnityEngine;
- using UnityEditor;
- using Cinemachine.Utility;
- namespace Cinemachine.Editor
- {
- [CustomEditor(typeof(CinemachineComposer))]
- internal class CinemachineComposerEditor : BaseEditor<CinemachineComposer>
- {
- CinemachineScreenComposerGuides mScreenGuideEditor;
- GameViewEventCatcher mGameViewEventCatcher;
- protected virtual void OnEnable()
- {
- mScreenGuideEditor = new CinemachineScreenComposerGuides();
- mScreenGuideEditor.GetHardGuide = () => { return Target.HardGuideRect; };
- mScreenGuideEditor.GetSoftGuide = () => { return Target.SoftGuideRect; };
- mScreenGuideEditor.SetHardGuide = (Rect r) => { Target.HardGuideRect = r; };
- mScreenGuideEditor.SetSoftGuide = (Rect r) => { Target.SoftGuideRect = r; };
- mScreenGuideEditor.Target = () => { return serializedObject; };
- mGameViewEventCatcher = new GameViewEventCatcher();
- mGameViewEventCatcher.OnEnable();
- CinemachineDebug.OnGUIHandlers -= OnGUI;
- CinemachineDebug.OnGUIHandlers += OnGUI;
- if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
- InspectorUtility.RepaintGameView();
- }
- protected virtual void OnDisable()
- {
- mGameViewEventCatcher.OnDisable();
- CinemachineDebug.OnGUIHandlers -= OnGUI;
- if (CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
- InspectorUtility.RepaintGameView();
- }
- public override void OnInspectorGUI()
- {
- BeginInspector();
- if (Target.LookAtTarget == null)
- EditorGUILayout.HelpBox(
- "A LookAt target is required. Change Aim to Do Nothing if you don't want a LookAt target.",
- MessageType.Warning);
- // First snapshot some settings
- Rect oldHard = Target.HardGuideRect;
- Rect oldSoft = Target.SoftGuideRect;
- // Draw the properties
- DrawRemainingPropertiesInInspector();
- mScreenGuideEditor.SetNewBounds(oldHard, oldSoft, Target.HardGuideRect, Target.SoftGuideRect);
- }
- protected virtual void OnGUI()
- {
- if (Target == null)
- return;
- // Draw the camera guides
- if (!Target.IsValid || !CinemachineSettings.CinemachineCoreSettings.ShowInGameGuides)
- return;
- var vcam = Target.VirtualCamera;
- CinemachineBrain brain = CinemachineCore.Instance.FindPotentialTargetBrain(vcam);
- if (brain == null || (brain.OutputCamera.activeTexture != null && CinemachineCore.Instance.BrainCount > 1))
- return;
- // Screen guides
- bool isLive = brain.IsLive(vcam, true);
- mScreenGuideEditor.OnGUI_DrawGuides(isLive, brain.OutputCamera, Target.VcamState.Lens, true);
- // Draw an on-screen gizmo for the target
- if (Target.LookAtTarget != null && isLive)
- {
- Vector3 targetScreenPosition = brain.OutputCamera.WorldToScreenPoint(Target.TrackedPoint);
- if (targetScreenPosition.z > 0)
- {
- targetScreenPosition.y = Screen.height - targetScreenPosition.y;
- GUI.color = CinemachineSettings.ComposerSettings.TargetColour;
- Rect r = new Rect(targetScreenPosition, Vector2.zero);
- float size = (CinemachineSettings.ComposerSettings.TargetSize
- + CinemachineScreenComposerGuides.kGuideBarWidthPx) / 2;
- GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
- size -= CinemachineScreenComposerGuides.kGuideBarWidthPx;
- if (size > 0)
- {
- Vector4 overlayOpacityScalar
- = new Vector4(1f, 1f, 1f, CinemachineSettings.ComposerSettings.OverlayOpacity);
- GUI.color = Color.black * overlayOpacityScalar;
- GUI.DrawTexture(r.Inflated(new Vector2(size, size)), Texture2D.whiteTexture);
- }
- }
- }
- }
- #if false
- // debugging only
- [DrawGizmo(GizmoType.Active | GizmoType.Selected, typeof(CinemachineComposer))]
- static void DrawTransposerGizmos(CinemachineComposer target, GizmoType selectionType)
- {
- // Draw lookahead path
- if (target.m_LookaheadTime > 0)
- {
- Color originalGizmoColour = Gizmos.color;
- Gizmos.color = CinemachineSettings.ComposerSettings.TargetColour;
- var p0 = target.m_Predictor.PredictPosition(0);
- int numSteps = 20;
- for (int i = 1; i <= numSteps; ++i)
- {
- var p1 = target.m_Predictor.PredictPosition(i * target.m_LookaheadTime / numSteps);
- Gizmos.DrawLine(p0, p1);
- p0 = p1;
- }
- Gizmos.color = originalGizmoColour;
- }
- }
- #endif
- }
- }
|