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); } }
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); }
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); }