Esempio n. 1
0
    private static void AddPathPoints()
    {
        if (SceneView.focusedWindow != null)
        {
            SceneView.focusedWindow.wantsMouseMove = true;
        }

        Handles.color = _cameraPath.unselectedPointColour;
        int numberOfPoints = _cameraPath.realNumberOfPoints;

        for (int i = 0; i < numberOfPoints; i++)
        {
            CameraPathControlPoint point = _cameraPath[i];
            float pointHandleSize        = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE * 0.4f;
            UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, pointHandleSize);
        }

        float   mousePercentage = NearestmMousePercentage();// _track.GetNearestPoint(mousePlanePoint);
        Vector3 mouseTrackPoint = _cameraPath.GetPathPosition(mousePercentage, true);

        Handles.Label(mouseTrackPoint, "Add New Path Point", colouredText);
        float      newPointHandleSize = HandleUtility.GetHandleSize(mouseTrackPoint) * HANDLE_SCALE;
        Quaternion lookDirection      = Quaternion.LookRotation(Camera.current.transform.forward);

        if (UnityVersionWrapper.HandlesDotButton(mouseTrackPoint, lookDirection, newPointHandleSize, newPointHandleSize))
        {
            int newPointIndex = _cameraPath.GetNextPointIndex(mousePercentage, false);
            CameraPathControlPoint newPoint = _cameraPath.gameObject.AddComponent <CameraPathControlPoint>();//ScriptableObject.CreateInstance<CameraPathControlPoint>();
            newPoint.worldPosition = mouseTrackPoint;
            _cameraPath.InsertPoint(newPoint, newPointIndex);
            ChangeSelectedPointIndex(newPointIndex);
            GUI.changed = true;
        }
    }
Esempio n. 2
0
    private static void RemovePathPoints()
    {
        if (SceneView.focusedWindow != null)
        {
            SceneView.focusedWindow.wantsMouseMove = true;
        }

        int numberOfPoints = _cameraPath.realNumberOfPoints;

        Handles.color = _cameraPath.selectedPointColour;
        Ray        mouseRay           = Camera.current.ScreenPointToRay(new Vector3(Event.current.mousePosition.x, Screen.height - Event.current.mousePosition.y - 30, 0));
        Quaternion mouseLookDirection = Quaternion.LookRotation(-mouseRay.direction);

        for (int i = 0; i < numberOfPoints; i++)
        {
            CameraPathControlPoint point = _cameraPath[i];
            float pointHandleSize        = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            Handles.Label(point.worldPosition, "Remove Point: " + point.displayName, colouredText);
            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, mouseLookDirection, pointHandleSize, pointHandleSize))
            {
                _cameraPath.RemovePoint(point);
                GUI.changed = true;
                return;
            }
        }
    }
Esempio n. 3
0
    private static void DisplayAtPoint()
    {
        float   atPercent     = _cameraPath.addPointAtPercent;
        Vector3 atPointVector = _cameraPath.GetPathPosition(atPercent, true);
        float   handleSize    = HandleUtility.GetHandleSize(atPointVector);

        Handles.color = Color.black;
        UnityVersionWrapper.HandlesArrowCap(0, atPointVector, Quaternion.identity, handleSize * 0.05f);
        Handles.Label(atPointVector, "Add Point Here\nfrom Inspector", colouredText);
    }
Esempio n. 4
0
    private static void RemoveCPathPoints()
    {
        if (SceneView.focusedWindow != null)
        {
            SceneView.focusedWindow.wantsMouseMove = true;
        }

        CameraPathPointList pointList = null;

        switch (_pointMode)
        {
        case CameraPath.PointModes.RemoveOrientations:
            pointList = _cameraPath.orientationList;
            break;

        case CameraPath.PointModes.RemoveFovs:
            pointList = _cameraPath.fovList;
            break;

        case CameraPath.PointModes.RemoveTilts:
            pointList = _cameraPath.tiltList;
            break;

        case CameraPath.PointModes.RemoveEvents:
            pointList = _cameraPath.eventList;
            break;

        case CameraPath.PointModes.RemoveSpeeds:
            pointList = _cameraPath.speedList;
            break;

        case CameraPath.PointModes.RemoveDelays:
            pointList = _cameraPath.delayList;
            break;
        }

        int numberOfPoints = pointList.realNumberOfPoints;

        Handles.color = _cameraPath.selectedPointColour;
        Quaternion mouseLookDirection = Quaternion.LookRotation(Camera.current.transform.forward);

        for (int i = 0; i < numberOfPoints; i++)
        {
            CameraPathPoint point           = pointList[i];
            float           pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            Handles.Label(point.worldPosition, "Remove Point " + i, colouredText);
            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, mouseLookDirection, pointHandleSize, pointHandleSize))
            {
                pointList.RemovePoint(point);
                GUI.changed = true;
                return;
            }
        }
    }
Esempio n. 5
0
    public void OnSceneGUI()
    {
        if (!_cameraPath.showGizmos)
        {
            return;
        }
        if (_cameraPath.transform.rotation != Quaternion.identity)
        {
            return;
        }

        //Axis Gizmo Marker
        Handles.color = CameraPathColours.GREEN;
        Handles.DrawLine(_previewCamPos, _previewCamPos + _previewCamRot * Vector3.up * 0.5f);
        Handles.DrawLine(_previewCamPos, _previewCamPos + _previewCamRot * Vector3.down * 0.5f);
        Handles.color = CameraPathColours.RED;
        Handles.DrawLine(_previewCamPos, _previewCamPos + _previewCamRot * Vector3.left * 0.5f);
        Handles.DrawLine(_previewCamPos, _previewCamPos + _previewCamRot * Vector3.right * 0.5f);
        Handles.color = CameraPathColours.BLUE;
        Handles.DrawLine(_previewCamPos, _previewCamPos + _previewCamRot * Vector3.forward * 0.5f);
        Handles.DrawLine(_previewCamPos, _previewCamPos + _previewCamRot * Vector3.back * 0.5f);

        //Preview Direction Arrow
        float handleSize = HandleUtility.GetHandleSize(_previewCamPos);

        UnityVersionWrapper.HandlesArrowCap(0, _previewCamPos, _previewCamRot, handleSize);
        Handles.Label(_previewCamPos, "Preview\nCamera\nPosition", _colouredText);

        if (_animator.startPercent != 0)
        {
            Vector3 startPos = _cameraPath.GetPathPosition(_animator.startPercent);
            Handles.color = Color.red;
            UnityVersionWrapper.HandlesArrowCap(0, startPos, Quaternion.identity, HandleUtility.GetHandleSize(startPos) * 0.03f);
            Handles.Label(startPos, "Animation\nStart\nPoint", _colouredText);
        }

        //draw line to indicate selected target
        if ((_animator.orientationMode == CameraPathAnimator.orientationModes.followTransform || _animator.orientationMode == CameraPathAnimator.orientationModes.target) && _animator.orientationTarget != null)
        {
            Handles.color = _cameraPath.selectedPointColour;
            Handles.DrawLine(_previewCamPos, _animator.orientationTarget.transform.position);

            string targetLabel = "Animation Orientation CameraPathOnRailsTarget:";
            targetLabel += "\n" + _animator.orientationTarget.name;
            Handles.Label(_animator.orientationTarget.transform.position, targetLabel, _colouredText);
        }

        if (GUI.changed)
        {
            UpdateGui();
        }
    }
Esempio n. 6
0
    private static void SceneGUIFOVBased()
    {
        DisplayAtPoint();

        CameraPathFOVList fovList     = _cameraPath.fovList;
        Camera            sceneCamera = Camera.current;
        int pointCount = fovList.realNumberOfPoints;

        for (int i = 0; i < pointCount; i++)
        {
            CameraPathFOV fovPoint = fovList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(fovPoint, "Modifying FOV Point");
            }
            if (Vector3.Dot(sceneCamera.transform.forward, fovPoint.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string pointLabel = fovPoint.displayName;
            pointLabel += "\nvalue: " + fovPoint.FOV.ToString("F1");
            if (fovPoint.positionModes == CameraPathPoint.PositionModes.FixedToPoint)
            {
                pointLabel += "\nat point: " + fovPoint.point.displayName;
            }
            else
            {
                pointLabel += "\nat percentage: " + fovPoint.percent.ToString("F3");
            }

            Handles.Label(fovPoint.worldPosition, pointLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(fovPoint.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;
            if (UnityVersionWrapper.HandlesDotButton(fovPoint.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                CPPSlider(fovPoint);
            }
        }
    }
Esempio n. 7
0
    private static void SceneGUISpeedBased()
    {
        DisplayAtPoint();

        CameraPathSpeedList pointList = _cameraPath.speedList;
        Camera sceneCamera            = Camera.current;
        int    pointCount             = pointList.realNumberOfPoints;

        for (int i = 0; i < pointCount; i++)
        {
            CameraPathSpeed point = pointList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(point, "Modifying Speed Point");
            }
            if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string pointLabel = point.displayName;
            pointLabel += "\nvalue: " + point.speed + " m/s";
            pointLabel += "\npercent: " + point.percent;
            pointLabel += "\na percent: " + _cameraPath.DeNormalisePercentage(point.percent);

            Handles.Label(point.worldPosition, pointLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;
            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                CPPSlider(point);
            }
        }
    }
Esempio n. 8
0
    private static void AddCPathPoints()
    {
        if (SceneView.focusedWindow != null)
        {
            SceneView.focusedWindow.wantsMouseMove = true;
        }

        Handles.color = _cameraPath.selectedPointColour;
        CameraPathPointList pointList = null;

        switch (_pointMode)
        {
        case CameraPath.PointModes.AddOrientations:
            pointList = _cameraPath.orientationList;
            break;

        case CameraPath.PointModes.AddFovs:
            pointList = _cameraPath.fovList;
            break;

        case CameraPath.PointModes.AddTilts:
            pointList = _cameraPath.tiltList;
            break;

        case CameraPath.PointModes.AddEvents:
            pointList = _cameraPath.eventList;
            break;

        case CameraPath.PointModes.AddSpeeds:
            pointList = _cameraPath.speedList;
            break;

        case CameraPath.PointModes.AddDelays:
            pointList = _cameraPath.delayList;
            break;
        }
        int numberOfPoints = pointList.realNumberOfPoints;

        for (int i = 0; i < numberOfPoints; i++)
        {
            CameraPathPoint point           = pointList[i];
            float           pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE * 0.4f;
            UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, pointHandleSize);
        }

        float   mousePercentage = NearestmMousePercentage();// _track.GetNearestPoint(mousePlanePoint);
        Vector3 mouseTrackPoint = _cameraPath.GetPathPosition(mousePercentage, true);

        Handles.Label(mouseTrackPoint, "Add New Point", colouredText);
        float      newPointHandleSize = HandleUtility.GetHandleSize(mouseTrackPoint) * HANDLE_SCALE;
        Ray        mouseRay           = Camera.current.ScreenPointToRay(new Vector3(Event.current.mousePosition.x, Screen.height - Event.current.mousePosition.y - 30, 0));
        Quaternion mouseLookDirection = Quaternion.LookRotation(-mouseRay.direction);

        if (UnityVersionWrapper.HandlesDotButton(mouseTrackPoint, mouseLookDirection, newPointHandleSize, newPointHandleSize))
        {
            CameraPathControlPoint curvePointA = _cameraPath[_cameraPath.GetLastPointIndex(mousePercentage, false)];
            CameraPathControlPoint curvePointB = _cameraPath[_cameraPath.GetNextPointIndex(mousePercentage, false)];
            float curvePercentage = _cameraPath.GetCurvePercentage(curvePointA, curvePointB, mousePercentage);
            switch (_pointMode)
            {
            case CameraPath.PointModes.AddOrientations:
                Quaternion            pointRotation  = Quaternion.LookRotation(_cameraPath.GetPathDirection(mousePercentage));
                CameraPathOrientation newOrientation = ((CameraPathOrientationList)pointList).AddOrientation(curvePointA, curvePointB, curvePercentage, pointRotation);
                ChangeSelectedPointIndex(pointList.IndexOf(newOrientation));
                break;

            case CameraPath.PointModes.AddFovs:
                float         pointFOV    = _cameraPath.fovList.GetValue(mousePercentage, CameraPathFOVList.ProjectionType.FOV);
                float         pointSize   = _cameraPath.fovList.GetValue(mousePercentage, CameraPathFOVList.ProjectionType.Orthographic);
                CameraPathFOV newFOVPoint = ((CameraPathFOVList)pointList).AddFOV(curvePointA, curvePointB, curvePercentage, pointFOV, pointSize);
                ChangeSelectedPointIndex(pointList.IndexOf(newFOVPoint));
                break;

            case CameraPath.PointModes.AddTilts:
                float          pointTilt    = _cameraPath.GetPathTilt(mousePercentage);
                CameraPathTilt newTiltPoint = ((CameraPathTiltList)pointList).AddTilt(curvePointA, curvePointB, curvePercentage, pointTilt);
                ChangeSelectedPointIndex(pointList.IndexOf(newTiltPoint));
                break;

            case CameraPath.PointModes.AddEvents:
                CameraPathEvent newEventPoint = ((CameraPathEventList)pointList).AddEvent(curvePointA, curvePointB, curvePercentage);
                ChangeSelectedPointIndex(pointList.IndexOf(newEventPoint));
                break;

            case CameraPath.PointModes.AddSpeeds:
                _cameraPath.speedList.listEnabled = true;    //if we're adding speeds then we probable want to enable it
                CameraPathSpeed newSpeedPoint = ((CameraPathSpeedList)pointList).AddSpeedPoint(curvePointA, curvePointB, curvePercentage);
                newSpeedPoint.speed = _animator.pathSpeed;
                ChangeSelectedPointIndex(pointList.IndexOf(newSpeedPoint));
                break;

            case CameraPath.PointModes.AddDelays:
                CameraPathDelay newDelayPoint = ((CameraPathDelayList)pointList).AddDelayPoint(curvePointA, curvePointB, curvePercentage);
                ChangeSelectedPointIndex(pointList.IndexOf(newDelayPoint));
                break;
            }
            GUI.changed = true;
        }
    }
Esempio n. 9
0
    private static void SceneGUIEaseBased()
    {
        CameraPathDelayList pointList = _cameraPath.delayList;
        Camera sceneCamera            = Camera.current;
        int    pointCount             = pointList.realNumberOfPoints;

        for (int i = 0; i < pointCount; i++)
        {
            CameraPathDelay point = pointList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(point, "Modifying Ease Curves");
            }

            if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string pointLabel = "";
            if (point == pointList.introPoint)
            {
                pointLabel += "start point";
            }
            else if (point == pointList.outroPoint)
            {
                pointLabel += "end point";
            }
            else
            {
                pointLabel += point.displayName;

                if (point.time > 0)
                {
                    pointLabel += "\ndelay: " + point.time.ToString("F2") + " sec";
                }
                else
                {
                    pointLabel += "\ndelay indefinitely";
                }
            }

            Handles.Label(point.worldPosition, pointLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;
            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

//            float unitPercent = 0.5f;
            Vector3 easeUp = Vector3.up * _cameraPath.pathLength * 0.1f;
            Handles.color = CameraPathColours.RED;
            if (point != pointList.outroPoint)
            {
                float   outroEasePointPercent = _cameraPath.GetOutroEasePercentage(point);
                Vector3 outroEasePoint        = _cameraPath.GetPathPosition(outroEasePointPercent, true);
                Vector3 outroeaseDirection    = _cameraPath.GetPathDirection(outroEasePointPercent, false);

                Handles.Label(outroEasePoint, "Ease Out\n" + point.displayName, colouredText);
                Vector3 newPosition = Handles.Slider(outroEasePoint, outroeaseDirection);

                float movement = Vector3.Distance(outroEasePoint, newPosition);
                if (movement > Mathf.Epsilon)
                {
                    float newPercent   = NearestmMousePercentage();
                    float curvePercent = _cameraPath.GetCurvePercentage(_cameraPath.delayList.GetPoint(point.index), _cameraPath.delayList.GetPoint(point.index + 1), newPercent);
                    point.outroEndEasePercentage = curvePercent;
                }

                float percentWidth = (outroEasePointPercent - point.percent);
//                float easeSpace = _cameraPath.pathLength * percentWidth;
//                float easeLength = unitPercent / percentWidth;
                float percentMovement = percentWidth / 10.0f;
                for (float e = point.percent; e < outroEasePointPercent; e += percentMovement)
                {
                    float   eB        = e + percentMovement;
                    Vector3 lineStart = _cameraPath.GetPathPosition(e, true);
                    Vector3 lineEnd   = _cameraPath.GetPathPosition(eB, true);
                    Handles.DrawLine(lineStart, lineEnd);
                    float   animCurvePercentA = (e - point.percent) / percentWidth;
                    float   animCurvePercentB = (eB - point.percent) / percentWidth;
                    Vector3 lineEaseUpA       = easeUp * point.outroCurve.Evaluate(animCurvePercentA);
                    Vector3 lineEaseUpB       = easeUp * point.outroCurve.Evaluate(animCurvePercentB);
                    Handles.DrawLine(lineStart + lineEaseUpA, lineEnd + lineEaseUpB);
                }
            }

            if (point != pointList.introPoint)
            {
                float   introEasePointPercent = _cameraPath.GetIntroEasePercentage(point);
                Vector3 introEasePoint        = _cameraPath.GetPathPosition(introEasePointPercent, true);
                Vector3 introEaseDirection    = _cameraPath.GetPathDirection(introEasePointPercent, false);

                Handles.color = CameraPathColours.RED;
                Handles.Label(introEasePoint, "Ease In\n" + point.displayName, colouredText);
                Vector3 newPosition = Handles.Slider(introEasePoint, -introEaseDirection);

                float movement = Vector3.Distance(introEasePoint, newPosition);
                if (movement > Mathf.Epsilon)
                {
                    float newPercent   = NearestmMousePercentage();
                    float curvePercent = 1 - _cameraPath.GetCurvePercentage(_cameraPath.delayList.GetPoint(point.index - 1), _cameraPath.delayList.GetPoint(point.index), newPercent);
                    point.introStartEasePercentage = curvePercent;
                }

                float percentWidth = (point.percent - introEasePointPercent);
//                float easeSpace = _cameraPath.pathLength * percentWidth;
//                float easeLength = unitPercent / percentWidth;
                float percentMovement = percentWidth / 10.0f;
                for (float e = introEasePointPercent; e < point.percent; e += percentMovement)
                {
                    float   eB        = e + percentMovement;
                    Vector3 lineStart = _cameraPath.GetPathPosition(e, true);
                    Vector3 lineEnd   = _cameraPath.GetPathPosition(eB, true);
                    Handles.DrawLine(lineStart, lineEnd);
                    float   animCurvePercentA = (e - introEasePointPercent) / percentWidth;
                    float   animCurvePercentB = (eB - introEasePointPercent) / percentWidth;
                    Vector3 lineEaseUpA       = easeUp * point.introCurve.Evaluate(animCurvePercentA);
                    Vector3 lineEaseUpB       = easeUp * point.introCurve.Evaluate(animCurvePercentB);
                    Handles.DrawLine(lineStart + lineEaseUpA, lineEnd + lineEaseUpB);
                }
            }
        }
    }
Esempio n. 10
0
    private static void SceneGUIDelayBased()
    {
        DisplayAtPoint();

        CameraPathDelayList pointList = _cameraPath.delayList;
        Camera sceneCamera            = Camera.current;
        int    pointCount             = pointList.realNumberOfPoints;

        for (int i = 0; i < pointCount; i++)
        {
            CameraPathDelay point = pointList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(point, "Modifying Delay Point");
            }

            if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string pointLabel = "";
            if (point == pointList.introPoint)
            {
                pointLabel += "start point";
                if (point.time > 0)
                {
                    pointLabel += "\ndelay: " + point.time.ToString("F2") + " sec";
                }
                else
                {
                    pointLabel += "\nNo delay";
                }
            }
            else if (point == pointList.outroPoint)
            {
                pointLabel += "end point";
            }
            else
            {
                pointLabel += point.displayName;

                if (point.time > 0)
                {
                    pointLabel += "\ndelay: " + point.time.ToString("F2") + " sec";
                }
                else
                {
                    pointLabel += "\ndelay indefinitely";
                }
            }

            Handles.Label(point.worldPosition, pointLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;
            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                CPPSlider(point);
            }
        }
    }
Esempio n. 11
0
    private static void SceneGUITiltBased()
    {
        DisplayAtPoint();

        CameraPathTiltList pointList   = _cameraPath.tiltList;
        Camera             sceneCamera = Camera.current;
        int pointCount = pointList.realNumberOfPoints;

        for (int i = 0; i < pointCount; i++)
        {
            CameraPathTilt point = pointList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(point, "Modifying Tilt Point");
            }
            if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string pointLabel = point.displayName;
            pointLabel += "\nvalue: " + point.tilt.ToString("F1") + "\u00B0";

            Handles.Label(point.worldPosition, pointLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            bool  pointIsSelected = i == selectedPointIndex;
            Handles.color = (pointIsSelected) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;

            float      tiltSize = 2.0f;
            Vector3    pointForwardDirection = _cameraPath.GetPathDirection(_cameraPath.DeNormalisePercentage(point.percent));
            Quaternion qTilt        = Quaternion.AngleAxis(-point.tilt, pointForwardDirection);
            Quaternion pointForward = Quaternion.LookRotation(pointForwardDirection);
            UnityVersionWrapper.HandlesCircleCap(0, point.worldPosition, pointForward, tiltSize);
            Vector3 horizontalLineDirection = ((qTilt * Quaternion.AngleAxis(-90, Vector3.up)) * pointForwardDirection).normalized * tiltSize;
            Vector3 horizontalLineStart     = point.worldPosition + horizontalLineDirection;
            Vector3 horizontalLineEnd       = point.worldPosition - horizontalLineDirection;
            Handles.DrawLine(horizontalLineStart, horizontalLineEnd);

            Vector3 verticalLineDirection = (Quaternion.AngleAxis(-90, pointForwardDirection) * horizontalLineDirection).normalized * tiltSize;
            Vector3 verticalLineStart     = point.worldPosition + verticalLineDirection;
            Vector3 verticalLineEnd       = point.worldPosition;
            Handles.DrawLine(verticalLineStart, verticalLineEnd);

            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                CPPSlider(point);
            }
        }

        if (_cameraPath.showOrientationIndicators)//draw orientation indicators
        {
            Handles.color = _cameraPath.orientationIndicatorColours;
            float indicatorLength = _cameraPath.orientationIndicatorUnitLength / _cameraPath.pathLength;
            for (float i = 0; i < 1; i += indicatorLength)
            {
                Vector3    indicatorPosition   = _cameraPath.GetPathPosition(i);
                Quaternion inicatorRotation    = Quaternion.LookRotation(_cameraPath.GetPathDirection(_cameraPath.DeNormalisePercentage(i), false));
                float      indicatorHandleSize = HandleUtility.GetHandleSize(indicatorPosition) * HANDLE_SCALE * 4;
                UnityVersionWrapper.HandlesArrowCap(0, indicatorPosition, inicatorRotation, indicatorHandleSize);
            }
        }
    }
Esempio n. 12
0
    private static void SceneGUIEventBased()
    {
        DisplayAtPoint();

        CameraPathEventList eventList = _cameraPath.eventList;
        Camera sceneCamera            = Camera.current;
        int    pointCount             = eventList.realNumberOfPoints;

        for (int i = 0; i < pointCount; i++)
        {
            CameraPathEvent eventPoint = eventList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(eventPoint, "Modifying Event Point");
            }
            if (Vector3.Dot(sceneCamera.transform.forward, eventPoint.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string pointLabel = eventPoint.displayName;
            pointLabel += "\ntype: " + eventPoint.type;
            if (eventPoint.type == CameraPathEvent.Types.Broadcast)
            {
                pointLabel += "\nevent name: " + eventPoint.eventName;
            }
            if (eventPoint.type == CameraPathEvent.Types.Call)
            {
                if (eventPoint.target != null)
                {
                    pointLabel += "\nevent target: " + eventPoint.target.name + " calling: " + eventPoint.methodName;
                }
                else
                {
                    pointLabel += "\nno target assigned";
                }
            }
            if (eventPoint.positionModes == CameraPathPoint.PositionModes.FixedToPoint)
            {
                pointLabel += "\nat point: " + eventPoint.point.displayName;
            }
            else
            {
                pointLabel += "\nat percentage: " + eventPoint.percent.ToString("F3");
            }

            Handles.Label(eventPoint.worldPosition, pointLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(eventPoint.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;
            if (UnityVersionWrapper.HandlesDotButton(eventPoint.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                CPPSlider(eventPoint);
            }
        }
    }
Esempio n. 13
0
    public static void OnSceneGUI()
    {
        if (!_cameraPath.showGizmos)
        {
            return;
        }
        if (_cameraPath.transform.rotation != Quaternion.identity)
        {
            return;
        }

        _pointMode = _cameraPath.pointMode;

        if (SceneView.focusedWindow != null)
        {
            SceneView.focusedWindow.wantsMouseMove = false;
        }

        //draw small point indicators
        Handles.color = CameraPathColours.GREY;
        int numberOfCPoints = _cameraPath.fovList.realNumberOfPoints;

        for (int i = 0; i < numberOfCPoints; i++)
        {
            CameraPathPoint point = _cameraPath.fovList[i];
            if (point.positionModes == CameraPathPoint.PositionModes.Free)
            {
                UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, 0.2f);
            }
        }
        numberOfCPoints = _cameraPath.delayList.realNumberOfPoints;
        for (int i = 0; i < numberOfCPoints; i++)
        {
            CameraPathPoint point = _cameraPath.delayList[i];
            if (point.positionModes == CameraPathPoint.PositionModes.Free)
            {
                UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, 0.2f);
            }
        }
        numberOfCPoints = _cameraPath.orientationList.realNumberOfPoints;
        for (int i = 0; i < numberOfCPoints; i++)
        {
            CameraPathPoint point = _cameraPath.orientationList[i];
            if (point.positionModes == CameraPathPoint.PositionModes.Free)
            {
                UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, 0.2f);
            }
        }
        numberOfCPoints = _cameraPath.speedList.realNumberOfPoints;
        for (int i = 0; i < numberOfCPoints; i++)
        {
            CameraPathPoint point = _cameraPath.speedList[i];
            if (point.positionModes == CameraPathPoint.PositionModes.Free)
            {
                UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, 0.2f);
            }
        }
        numberOfCPoints = _cameraPath.tiltList.realNumberOfPoints;
        for (int i = 0; i < numberOfCPoints; i++)
        {
            CameraPathPoint point = _cameraPath.tiltList[i];
            if (point.positionModes == CameraPathPoint.PositionModes.Free)
            {
                UnityVersionWrapper.HandlesArrowCap(0, point.worldPosition, Quaternion.identity, 0.2f);
            }
        }

        //draw path outline
        Camera sceneCamera    = Camera.current;
        int    numberOfPoints = _cameraPath.numberOfPoints;

        Handles.color = _cameraPath.selectedPathColour;
        float pointPercentage = 1.0f / (numberOfPoints - 1);

        for (int i = 0; i < numberOfPoints - 1; i++)
        {
            CameraPathControlPoint pointA = _cameraPath.GetPoint(i);
            CameraPathControlPoint pointB = _cameraPath.GetPoint(i + 1);

            float dotPA = Vector3.Dot(sceneCamera.transform.forward, pointA.worldPosition - sceneCamera.transform.position);
            float dotPB = Vector3.Dot(sceneCamera.transform.forward, pointB.worldPosition - sceneCamera.transform.position);

            if (dotPA < 0 && dotPB < 0)//points are both behind camera - don't render
            {
                continue;
            }

            float   pointAPercentage = pointPercentage * i;
            float   pointBPercentage = pointPercentage * (i + 1);
            float   arcPercentage    = pointBPercentage - pointAPercentage;
            Vector3 arcCentre        = (pointA.worldPosition + pointB.worldPosition) * 0.5f;
            float   arcLength        = _cameraPath.StoredArcLength(_cameraPath.GetCurveIndex(pointA.index));
            float   arcDistance      = Vector3.Distance(sceneCamera.transform.position, arcCentre);
            int     arcPoints        = Mathf.Max(Mathf.RoundToInt(arcLength * (40 / Mathf.Max(arcDistance, 20))), 10);
            float   arcTime          = 1.0f / arcPoints;

            float   endLoop   = 1.0f - arcTime;
            Vector3 lastPoint = Vector3.zero;
            for (float p = 0; p < endLoop; p += arcTime)
            {
                float   p2 = p + arcTime;
                float   pathPercentageA = pointAPercentage + arcPercentage * p;
                float   pathPercentageB = pointAPercentage + arcPercentage * p2;
                Vector3 lineStart       = _cameraPath.GetPathPosition(pathPercentageA, true);
                Vector3 lineEnd         = _cameraPath.GetPathPosition(pathPercentageB, true);

                Handles.DrawLine(lineStart, lineEnd);

                lastPoint = lineEnd;
            }
            Handles.DrawLine(lastPoint, _cameraPath.GetPathPosition(pointBPercentage, true));
        }

        switch (_pointMode)
        {
        case CameraPath.PointModes.Transform:
            SceneGUIPointBased();
            break;

        case CameraPath.PointModes.ControlPoints:
            SceneGUIPointBased();
            break;

        case CameraPath.PointModes.Orientations:
            SceneGUIOrientationBased();
            break;

        case CameraPath.PointModes.FOV:
            SceneGUIFOVBased();
            break;

        case CameraPath.PointModes.Events:
            SceneGUIEventBased();
            break;

        case CameraPath.PointModes.Speed:
            SceneGUISpeedBased();
            break;

        case CameraPath.PointModes.Tilt:
            SceneGUITiltBased();
            break;

        case CameraPath.PointModes.Delay:
            SceneGUIDelayBased();
            break;

        case CameraPath.PointModes.Ease:
            SceneGUIEaseBased();
            break;

        case CameraPath.PointModes.AddPathPoints:
            AddPathPoints();
            break;

        case CameraPath.PointModes.RemovePathPoints:
            RemovePathPoints();
            break;

        case CameraPath.PointModes.AddOrientations:
            AddCPathPoints();
            break;

        case CameraPath.PointModes.AddFovs:
            AddCPathPoints();
            break;

        case CameraPath.PointModes.AddTilts:
            AddCPathPoints();
            break;

        case CameraPath.PointModes.AddEvents:
            AddCPathPoints();
            break;

        case CameraPath.PointModes.AddSpeeds:
            AddCPathPoints();
            break;

        case CameraPath.PointModes.AddDelays:
            AddCPathPoints();
            break;

        case CameraPath.PointModes.RemoveOrientations:
            RemoveCPathPoints();
            break;

        case CameraPath.PointModes.RemoveTilts:
            RemoveCPathPoints();
            break;

        case CameraPath.PointModes.RemoveFovs:
            RemoveCPathPoints();
            break;

        case CameraPath.PointModes.RemoveEvents:
            RemoveCPathPoints();
            break;

        case CameraPath.PointModes.RemoveSpeeds:
            RemoveCPathPoints();
            break;

        case CameraPath.PointModes.RemoveDelays:
            RemoveCPathPoints();
            break;
        }


        if (Event.current.type == EventType.ValidateCommand)
        {
            switch (Event.current.commandName)
            {
            case "UndoRedoPerformed":
                GUI.changed = true;
                break;
            }
        }
    }
Esempio n. 14
0
    private static void SceneGUIOrientationBased()
    {
        DisplayAtPoint();

        CameraPathOrientationList orientationList = _cameraPath.orientationList;
        Camera sceneCamera      = Camera.current;
        int    orientationCount = orientationList.realNumberOfPoints;

        for (int i = 0; i < orientationCount; i++)
        {
            CameraPathOrientation orientation = orientationList[i];
            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(orientation, "Modifying Orientation Point");
            }
            if (Vector3.Dot(sceneCamera.transform.forward, orientation.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            string orientationLabel = orientation.displayName;
            orientationLabel += "\nat percentage: " + orientation.percent.ToString("F3");
            switch (orientation.positionModes)
            {
            case CameraPathPoint.PositionModes.FixedToPoint:
                orientationLabel += "\nat point: " + orientation.point.displayName;
                break;
            }

            Handles.Label(orientation.worldPosition, orientationLabel, colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(orientation.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? Color.blue : _cameraPath.unselectedPointColour;
            UnityVersionWrapper.HandlesArrowCap(0, orientation.worldPosition, orientation.rotation, pointHandleSize * 4);

            if (i == selectedPointIndex)
            {
                //up arrow
                Handles.color = Color.green;
                Quaternion arrowUp = orientation.rotation * Quaternion.FromToRotation(Vector3.forward, Vector3.up);
                UnityVersionWrapper.HandlesArrowCap(0, orientation.worldPosition, arrowUp, pointHandleSize * 4);

                //right arrow
                Handles.color = Color.red;
                Quaternion arrowRight = orientation.rotation * Quaternion.FromToRotation(Vector3.forward, Vector3.right);
                UnityVersionWrapper.HandlesArrowCap(0, orientation.worldPosition, arrowRight, pointHandleSize * 4);
            }

            if (UnityVersionWrapper.HandlesDotButton(orientation.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                Quaternion currentRotation = orientation.rotation;
                currentRotation = Handles.DoRotationHandle(currentRotation, orientation.worldPosition);
                if (currentRotation != orientation.rotation)
                {
                    orientation.rotation = currentRotation;
                }
                CPPSlider(orientation);
            }
        }

        if (_cameraPath.showOrientationIndicators)//draw orientation indicators
        {
            Handles.color = _cameraPath.orientationIndicatorColours;
            float indicatorLength = _cameraPath.orientationIndicatorUnitLength / _cameraPath.pathLength;
            for (float i = 0; i < 1; i += indicatorLength)
            {
                Vector3    indicatorPosition   = _cameraPath.GetPathPosition(i);
                Quaternion inicatorRotation    = _cameraPath.GetPathRotation(i, false);
                float      indicatorHandleSize = HandleUtility.GetHandleSize(indicatorPosition) * HANDLE_SCALE * 4;
                UnityVersionWrapper.HandlesArrowCap(0, indicatorPosition, inicatorRotation, indicatorHandleSize);
            }
        }
    }
Esempio n. 15
0
    private static void SceneGUIPointBased()
    {
        Camera sceneCamera        = Camera.current;
        int    realNumberOfPoints = _cameraPath.realNumberOfPoints;

        for (int i = 0; i < realNumberOfPoints; i++)
        {
            CameraPathControlPoint point = _cameraPath[i];
            if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) < 0)
            {
                continue;
            }

            if (_cameraPath.enableUndo)
            {
                Undo.RecordObject(point, "Modifying Path Point");
            }
            Handles.Label(point.worldPosition, point.displayName + "\n" + (point.percentage * 100).ToString("F1") + "%", colouredText);
            float pointHandleSize = HandleUtility.GetHandleSize(point.worldPosition) * HANDLE_SCALE;
            Handles.color = (i == selectedPointIndex) ? _cameraPath.selectedPointColour : _cameraPath.unselectedPointColour;
            if (UnityVersionWrapper.HandlesDotButton(point.worldPosition, Quaternion.identity, pointHandleSize, pointHandleSize))
            {
                if (i == selectedPointIndex)
                {
                    _cameraPath.pointMode = CameraPath.PointModes.Transform;
                }
                ChangeSelectedPointIndex(i);
                GUI.changed = true;
            }

            if (i == selectedPointIndex)
            {
                if (_pointMode == CameraPath.PointModes.Transform || _cameraPath.interpolation != CameraPath.Interpolation.Bezier)
                {
                    Vector3 currentPosition = point.worldPosition;
                    currentPosition     = Handles.DoPositionHandle(currentPosition, Quaternion.identity);
                    point.worldPosition = currentPosition;

//                    SerializedObject so = new SerializedObject(point);
//                    SerializedProperty pointPosition = so.FindProperty("_position");
//                    Vector3 currentWorldPosition = point.worldPosition;
//                    currentWorldPosition = Handles.DoPositionHandle(currentWorldPosition, Quaternion.identity);
//                    pointPosition.vector3Value = point.WorldToLocalPosition(currentWorldPosition);

                    if (_cameraPath.interpolation == CameraPath.Interpolation.Bezier)
                    {
                        Handles.color = CameraPathColours.DARKGREY;
                        float pointSize = pointHandleSize * 0.5f;
                        Handles.DrawLine(point.worldPosition, point.forwardControlPointWorld);
                        Handles.DrawLine(point.worldPosition, point.backwardControlPointWorld);
                        if (UnityVersionWrapper.HandlesDotButton(point.forwardControlPointWorld, Quaternion.identity, pointSize, pointSize))
                        {
                            _cameraPath.pointMode = CameraPath.PointModes.ControlPoints;
                        }
                        if (UnityVersionWrapper.HandlesDotButton(point.backwardControlPointWorld, Quaternion.identity, pointSize, pointSize))
                        {
                            _cameraPath.pointMode = CameraPath.PointModes.ControlPoints;
                        }
                    }
                }
                else
                {
                    //Backward ControlPoints point - render first so it's behind the forward
                    Handles.DrawLine(point.worldPosition, point.backwardControlPointWorld);
                    point.backwardControlPointWorld = Handles.DoPositionHandle(point.backwardControlPointWorld, Quaternion.identity);
                    if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) > 0)
                    {
                        Handles.Label(point.backwardControlPoint, "point " + i + " reverse ControlPoints point", colouredText);
                    }

                    //Forward ControlPoints point
                    if (Vector3.Dot(sceneCamera.transform.forward, point.worldPosition - sceneCamera.transform.position) > 0)
                    {
                        Handles.Label(point.forwardControlPoint, "point " + i + " ControlPoints point", colouredText);
                    }
                    Handles.color = _cameraPath.selectedPointColour;
                    Handles.DrawLine(point.worldPosition, point.forwardControlPointWorld);
                    point.forwardControlPointWorld = Handles.DoPositionHandle(point.forwardControlPointWorld, Quaternion.identity);
                }
            }
        }
    }