コード例 #1
0
        public bool GetClosestPointIfWeCan(Vector3 k, GravityOverrideConeSphereBase 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 = _p1;
                return(true);
            }
            //k projection is outside the [_p1, p2] interval, closest to _p2
            else if (dist >= _deltaDistSquared)
            {
                return(_circleBase.GetClosestPointOnDiscIfWeCan(k, gravityOverride.Base, out closestPoint));
            }
            //k projection is inside the [_p1, p2] interval
            else
            {
                if (!gravityOverride.Trunk)
                {
                    return(false);
                }

                dist = dist / _deltaDistSquared;
                Vector3 pointOnLine = _p1 + dist * _delta;
                closestPoint = ThalesCalculation(k, pointOnLine);

                return(true);
            }
        }
コード例 #2
0
 public static void ApplyModificationToConeSphereBase(SerializedProperty cone, GravityOverrideConeSphereBase datas)
 {
     cone.GetPropertie(nameof(datas.Trunk)).boolValue = datas.Trunk;
     cone.GetPropertie(nameof(datas.Top)).boolValue   = datas.Top;
     cone.GetPropertie("_canApplyGravity").boolValue  = datas.CanApplyGravity;
     ApplyModificationToDisc(cone.GetPropertie(nameof(datas.Base)), datas.Base);
 }
コード例 #3
0
        public static GravityOverrideConeSphereBase DrawConeSphereBase(ExtConeSphereBase cone, GravityOverrideConeSphereBase coneGravity, Color color, out bool hasChanged)
        {
            float sizeLine  = cone.LocalScale.magnitude / 20;
            float sizePoint = cone.LocalScale.magnitude / 15;

            hasChanged = false;
            bool changed = hasChanged;

            coneGravity.Base = ExtGravityOverrideEditor.DrawDisc(cone.Base, coneGravity.Base, color, false, out changed);
            hasChanged       = (changed) ? true : hasChanged;

            Color colorLine = new Color(color.r, color.g, color.b, color.a * 0.8f);

            coneGravity.Trunk = ExtGravityOverrideEditor.DrawLineTrunk(coneGravity.Trunk, cone.P1, cone.P2, colorLine, sizeLine, out changed);
            hasChanged        = (changed) ? true : hasChanged;
            coneGravity.Top   = ExtGravityOverrideEditor.DrawPoint(coneGravity.Top, cone.P1, color, sizePoint, out changed);
            hasChanged        = (changed) ? true : hasChanged;


            return(coneGravity);
        }