public static void ApplyModificationToCylinder(SerializedProperty cylinder, GravityOverrideCylinder datas) { cylinder.GetPropertie(nameof(datas.Trunk)).boolValue = datas.Trunk; cylinder.GetPropertie("_canApplyGravity").boolValue = datas.CanApplyGravity; ApplyModificationToDisc(cylinder.GetPropertie(nameof(datas.Disc1)), datas.Disc1); ApplyModificationToDisc(cylinder.GetPropertie(nameof(datas.Disc2)), datas.Disc2); }
public bool GetClosestPointIfWeCan(Vector3 k, GravityOverrideCylinder 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) { return(_circle1.GetClosestPointOnDiscIfWeCan(k, gravityOverride.Disc1, out closestPoint)); } //k projection is outside the [_p1, p2] interval, closest to _p2 else if (dist >= _deltaSquared) { return(_circle2.GetClosestPointOnDiscIfWeCan(k, gravityOverride.Disc2, out closestPoint)); } //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 GravityOverrideCylinder DrawCylinder(ExtCylinder cylinder, ExtCircle circle1, ExtCircle circle2, GravityOverrideCylinder cylinderGravity, Color color, out bool hasChanged) { float sizeLine = cylinder.LocalScale.magnitude / 20; hasChanged = false; bool changed = hasChanged; cylinderGravity.Disc1 = ExtGravityOverrideEditor.DrawDisc(circle1, cylinderGravity.Disc1, color, false, out changed); hasChanged = (changed) ? true : hasChanged; cylinderGravity.Disc2 = ExtGravityOverrideEditor.DrawDisc(circle2, cylinderGravity.Disc2, color, false, out changed); hasChanged = (changed) ? true : hasChanged; cylinderGravity.Trunk = ExtGravityOverrideEditor.DrawLineTrunk(cylinderGravity.Trunk, cylinder.P1, cylinder.P2, new Color(color.r, color.g, color.b, color.a * 0.8f), sizeLine, out changed); hasChanged = (changed) ? true : hasChanged; return(cylinderGravity); }