Example #1
0
        public bool GetClosestPointIfWeCan(Vector3 k, out Vector3 closestPoint, GravityOverrideLineTopDown gravityOverride)
        {
            closestPoint = Vector3.zero;
            if (!gravityOverride.CanApplyGravity)
            {
                return(false);
            }
            float dist = Vector3.Dot(k - _p1, _delta);

            //k projection is outside the [_p1, _p2] interval, closest to _p1
            if (dist <= 0.0f)
            {
                closestPoint = _p1;
                return(gravityOverride.Top);
            }
            //k projection is outside the [_p1, p2] interval, closest to _p2
            else if (dist >= _deltaSquared)
            {
                closestPoint = _p2;
                return(gravityOverride.Bottom);
            }
            //k projection is inside the [_p1, p2] interval
            else
            {
                if (!gravityOverride.Trunk)
                {
                    return(false);
                }
                dist         = dist / _deltaSquared;
                closestPoint = _p1 + dist * _delta;
                return(true);
            }
        }
Example #2
0
        public static void ApplyModificationOfExtPolyLine(SerializedProperty polyLineGravityArray, GravityOverrideLineTopDown[] datas)
        {
            for (int i = 0; i < polyLineGravityArray.arraySize; i++)
            {
                SerializedProperty         polyLineGravity = polyLineGravityArray.GetArrayElementAtIndex(i);
                GravityOverrideLineTopDown gravityData     = datas[i];

                polyLineGravity.GetPropertie(nameof(gravityData.Trunk)).boolValue  = gravityData.Trunk;
                polyLineGravity.GetPropertie("_canApplyGravity").boolValue         = gravityData.CanApplyGravity;
                polyLineGravity.GetPropertie(nameof(gravityData.Top)).boolValue    = gravityData.Top;
                polyLineGravity.GetPropertie(nameof(gravityData.Bottom)).boolValue = gravityData.Bottom;
            }
        }
Example #3
0
        public static GravityOverrideLineTopDown DrawLine3d(ExtLine3d line, GravityOverrideLineTopDown lineGravity, Color color, out bool hasChanged)
        {
            float sizeLine  = line.LocalScale.magnitude / 25;
            float sizePoint = line.LocalScale.magnitude / 20;

            hasChanged = false;
            bool changed = hasChanged;

            lineGravity.Trunk  = ExtGravityOverrideEditor.DrawLineTrunk(lineGravity.Trunk, line.P1, line.P2, color, sizeLine, out changed);
            hasChanged         = (changed) ? true : hasChanged;
            lineGravity.Top    = ExtGravityOverrideEditor.DrawPoint(lineGravity.Top, line.P1, color, sizePoint, out changed);
            hasChanged         = (changed) ? true : hasChanged;
            lineGravity.Bottom = ExtGravityOverrideEditor.DrawPoint(lineGravity.Bottom, line.P2, color, sizePoint, out changed);
            hasChanged         = (changed) ? true : hasChanged;
            return(lineGravity);
        }
Example #4
0
        public static GravityOverrideLineTopDown DrawCapsule(ExtCapsule capsule, GravityOverrideLineTopDown capsuleGravity, Color color, out bool hasChanged)
        {
            float sizeLine  = capsule.LocalScale.magnitude / 25;
            float sizePoint = capsule.LocalScale.magnitude / 20;

            hasChanged = false;
            bool changed = hasChanged;

            capsuleGravity.Trunk  = ExtGravityOverrideEditor.DrawLineTrunk(capsuleGravity.Trunk, capsule.P1, capsule.P2, color, sizeLine, out changed);
            hasChanged            = (changed) ? true : hasChanged;
            capsuleGravity.Top    = ExtGravityOverrideEditor.DrawPoint(capsuleGravity.Top, capsule.P1, color, sizePoint, out changed);
            hasChanged            = (changed) ? true : hasChanged;
            capsuleGravity.Bottom = ExtGravityOverrideEditor.DrawPoint(capsuleGravity.Bottom, capsule.P2, color, sizePoint, out changed);
            hasChanged            = (changed) ? true : hasChanged;
            return(capsuleGravity);
        }
Example #5
0
        public bool GetClosestPointIfWeCan(Vector3 k, GravityOverrideLineTopDown gravityOverride, out Vector3 closestPoint)
        {
            closestPoint = Vector3.zero;
            if (!gravityOverride.CanApplyGravity)
            {
                return(false);
            }

            float dist = Vector3.Dot(k - _p1, _delta);

            //k projection is outside the [_p1, _p2] interval, closest to _p1
            if (dist <= 0.0f)
            {
                if (!gravityOverride.Top)
                {
                    return(false);
                }
                closestPoint = _topSphere.GetClosestPoint(k);
                return(true);
            }
            //k projection is outside the [_p1, p2] interval, closest to _p2
            else if (dist >= _deltaSquared)
            {
                if (!gravityOverride.Bottom)
                {
                    return(false);
                }
                closestPoint = _bottomSphere.GetClosestPoint(k);
                return(true);
            }
            //k projection is inside the [_p1, p2] interval
            else
            {
                if (!gravityOverride.Trunk)
                {
                    return(false);
                }

                dist = dist / _deltaSquared;
                Vector3 pointOnLine = _p1 + dist * _delta;
                closestPoint = pointOnLine + ((k - pointOnLine).FastNormalized() * _realRadius);
                return(true);
            }
        }
Example #6
0
 public static void ApplyModificationToCapsuleOrLine(SerializedProperty capsule, GravityOverrideLineTopDown datas)
 {
     capsule.GetPropertie(nameof(datas.Trunk)).boolValue  = datas.Trunk;
     capsule.GetPropertie("_canApplyGravity").boolValue   = datas.CanApplyGravity;
     capsule.GetPropertie(nameof(datas.Top)).boolValue    = datas.Top;
     capsule.GetPropertie(nameof(datas.Bottom)).boolValue = datas.Bottom;
 }
Example #7
0
 public bool GetClosestPointIfWeCan(Vector3 k, out Vector3 closestPoint, GravityOverrideLineTopDown gravityOverride)
 {
     return(_line.GetClosestPointIfWeCan(k, out closestPoint, gravityOverride));
 }