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); } }
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; } }
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); }
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); }
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); } }
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; }
public bool GetClosestPointIfWeCan(Vector3 k, out Vector3 closestPoint, GravityOverrideLineTopDown gravityOverride) { return(_line.GetClosestPointIfWeCan(k, out closestPoint, gravityOverride)); }