Beispiel #1
0
        public static double Gamma(double value, double absmax, double gamma)
        {
            bool flag = false;

            if (value < 0.0)
            {
                flag = true;
            }
            double num1 = MathD.Abs(value);

            if (num1 > absmax)
            {
                if (flag)
                {
                    return(-num1);
                }
                else
                {
                    return(num1);
                }
            }
            else
            {
                double num2 = MathD.Pow(num1 / absmax, gamma) * absmax;
                if (flag)
                {
                    return(-num2);
                }
                else
                {
                    return(num2);
                }
            }
        }
Beispiel #2
0
        public static double DeltaAngle(double current, double target)
        {
            double num = MathD.Repeat(target - current, 360d);

            if (num > 180.0d)
            {
                num -= 360d;
            }
            return(num);
        }
Beispiel #3
0
        public static double LerpAngle(double a, double b, double t)
        {
            double num = MathD.Repeat(b - a, 360d);

            if (num > 180.0d)
            {
                num -= 360d;
            }
            return(a + num * MathD.Clamp01(t));
        }
Beispiel #4
0
 public static double MoveTowards(double current, double target, double maxDelta)
 {
     if (MathD.Abs(target - current) <= maxDelta)
     {
         return(target);
     }
     else
     {
         return(current + MathD.Sign(target - current) * maxDelta);
     }
 }
Beispiel #5
0
 public void OnMouseOver()
 {
     deltaAxisX               = deltaAxisY = 0;
     dragging                 = true;
     draggingHandle           = this;
     mouseLastPos             = Input.mousePosition;
     axisXProjectedToScreen   = Camera.main.worldToCameraMatrix.MultiplyVector(transform.right);
     axisYProjectedToScreen   = Camera.main.worldToCameraMatrix.MultiplyVector(transform.up);
     axisXProjectedToScreen.z = 0;
     axisYProjectedToScreen.z = 0;
     axisXProjectedToScreen.Scale(Vector3.one / Mathf.Max(0.01f, axisXProjectedToScreen.magnitude));
     axisYProjectedToScreen.Scale(Vector3.one / Mathf.Max(0.01f, axisYProjectedToScreen.magnitude));
     cameraDistanceGain = MathD.Clamp(Mathf.Abs(Camera.main.worldToCameraMatrix.MultiplyPoint3x4(transform.position).z) * .02f, 0.0125f, 2f);
     axisLockState      = 0;
 }
Beispiel #6
0
        public static double SmoothDamp(double current, double target, ref double currentVelocity, double smoothTime, double maxSpeed, double deltaTime)
        {
            smoothTime = MathD.Max(0.0001d, smoothTime);
            double num1 = 2d / smoothTime;
            double num2 = num1 * deltaTime;
            double num3 = (1.0d / (1.0d + num2 + 0.479999989271164d * num2 * num2 + 0.234999999403954d * num2 * num2 * num2));
            double num4 = current - target;
            double num5 = target;
            double max  = maxSpeed * smoothTime;
            double num6 = MathD.Clamp(num4, -max, max);

            target = current - num6;
            double num7 = (currentVelocity + num1 * num6) * deltaTime;

            currentVelocity = (currentVelocity - num1 * num7) * num3;
            double num8 = target + (num6 + num7) * num3;

            if (num5 - current > 0.0 == num8 > num5)
            {
                num8            = num5;
                currentVelocity = (num8 - num5) / deltaTime;
            }
            return(num8);
        }
Beispiel #7
0
 public static double PingPong(double t, double length)
 {
     t = MathD.Repeat(t, length * 2d);
     return(length - Math.Abs(t - length));
 }
Beispiel #8
0
 public static double SmoothDampAngle(double current, double target, ref double currentVelocity, double smoothTime, double maxSpeed, double deltaTime)
 {
     return(MathD.SmoothDamp(current, current + MathD.DeltaAngle(current, target), ref currentVelocity, smoothTime, maxSpeed, deltaTime));
 }
Beispiel #9
0
 public static double SmoothDampAngle(double current, double target, ref double currentVelocity, double smoothTime)
 {
     return(MathD.SmoothDampAngle(current, target, ref currentVelocity, smoothTime, double.PositiveInfinity, Time.deltaTime));
 }
Beispiel #10
0
 public static double SmoothDamp(double current, double target, ref double currentVelocity, double smoothTime, double maxSpeed)
 {
     return(MathD.SmoothDamp(current, target, ref currentVelocity, smoothTime, maxSpeed, Time.deltaTime));
 }
Beispiel #11
0
 public static bool Approximately(double a, double b)
 {
     return(Math.Abs(b - a) < MathD.Max(1E-06d * MathD.Max(Math.Abs(a), Math.Abs(b)), double.Epsilon));
 }
Beispiel #12
0
 public static double SmoothStep(double from, double to, double t)
 {
     t = MathD.Clamp01(t);
     t = (-2.0 * t * t * t + 3.0 * t * t);
     return(to * t + from * (1.0 - t));
 }
Beispiel #13
0
 public static double MoveTowardsAngle(double current, double target, double maxDelta)
 {
     target = current + MathD.DeltaAngle(current, target);
     return(MathD.MoveTowards(current, target, maxDelta));
 }
Beispiel #14
0
 public static double Lerp(double from, double to, double t)
 {
     return(from + (to - from) * MathD.Clamp01(t));
 }
Beispiel #15
0
 public static double Repeat(double t, double length)
 {
     return(t - MathD.Floor(t / length) * length);
 }
Beispiel #16
0
        void Update()
        {
            if (!HighLogic.LoadedSceneIsEditor)
            {
                return;
            }

            // A temporary fix for a weird bug, can't figure out where the layer is changed in some situations
            if (gameObject.layer == 0)
            {
                gameObject.layer = 2;
            }

            if (!dragging)
            {
                return;
            }
            if (Input.GetMouseButtonUp(0))
            {
                LineDrawer.Instance.enabled = dragging = false;
                axisX = axisY = 0;
                return;
            }

            bool x = Input.GetKeyDown(KeyCode.X);
            bool y = Input.GetKeyDown(KeyCode.Y);

            if (x || y)
            {
                switch (axisLockState)
                {
                case 0:
                    if (x)
                    {
                        axisLockState = 1;
                    }
                    else if (y)
                    {
                        axisLockState = 2;
                    }
                    break;

                case 1:
                    if (x)
                    {
                        axisLockState = 0;
                    }
                    else if (y)
                    {
                        axisLockState = 2;
                    }
                    break;

                case 2:
                    if (x)
                    {
                        axisLockState = 1;
                    }
                    else if (y)
                    {
                        axisLockState = 0;
                    }
                    break;

                default:
                    break;
                }
            }

            var offset = Input.mousePosition - mouseLastPos;

            var yProjected = (offset.y - axisXProjectedToScreen.y * offset.x / axisXProjectedToScreen.x) / ((axisYProjectedToScreen.y - axisXProjectedToScreen.y * axisYProjectedToScreen.x / axisXProjectedToScreen.x));
            var xProjected = (offset.x - yProjected * axisYProjectedToScreen.x) / axisXProjectedToScreen.x;

            var speedMult = MathD.Clamp(offset.sqrMagnitude * .025f, 0.4f, 1.25f);

            axisX       = Gain * speedMult * cameraDistanceGain * xProjected;
            axisY       = Gain * speedMult * cameraDistanceGain * yProjected;
            deltaAxisX += axisX;
            deltaAxisY += axisY;

            if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.LeftCommand))
            {
                if (axisLockState == 0)
                {
                    axisLockState = Math.Abs(deltaAxisY) < Math.Abs(deltaAxisX) ? 2 : 1;
                }
                else if (axisLockState == 1 && Math.Abs(deltaAxisX) > .5f)
                {
                    axisLockState = Math.Abs(deltaAxisY) < Math.Abs(deltaAxisX) * .75f ? 2 : 1;
                }
                else if (axisLockState == 2 && Math.Abs(deltaAxisY) > .5f)
                {
                    axisLockState = Math.Abs(deltaAxisY) * .75f < Math.Abs(deltaAxisX) ? 2 : 1;
                }
            }
            else if (Input.GetKeyUp(KeyCode.LeftControl) || Input.GetKeyUp(KeyCode.LeftCommand))
            {
                axisLockState = 0;
            }

            mouseLastPos = Input.mousePosition;
        }