private void LerpToPosition(int contactPointIndex) { if (currentClipLocalTime < this.GetCurrentMMData().GetContactStartTime(contactPointIndex)) { if (contactPointIndex > 0 && currentClipLocalTime > this.GetCurrentMMData().GetContactEndTime(contactPointIndex - 1) || contactPointIndex == 0) { float targetPointStartTime = this.GetCurrentMMData().GetContactStartTime(contactPointIndex); float factor = (currentClipLocalTime - startTime) / (targetPointStartTime - startTime); factor /= dataState.speedMultiplier; Vector3 nextContactPointDesiredPos = logicLayer.contactPoints[contactPointIndex].frameContact.position; FrameContact cp = this.GetCurrentMMData().GetContactPointInTime(contactPointIndex, currentClipLocalTime); Vector3 currentContatcPointPos = Transform.TransformPoint(cp.position); Vector3 contactPosDelta = nextContactPointDesiredPos - currentContatcPointPos; Vector3 desiredObjectPos = this.Transform.position + contactPosDelta; this.Transform.position = Vector3.Lerp(previewPos, desiredObjectPos, factor); } } }
public static FrameContact Lerp(FrameContact first, FrameContact second, float factor) { FrameContact cp = new FrameContact(); cp.position = math.lerp(first.position, second.position, factor); cp.normal = math.lerp(first.normal, second.normal, factor); //cp.forward = math.lerp(first.forward, second.forward, factor); return(cp); }
public FrameContact GetContactPointInTime(int index, float currentLocalTime, float animSpeedMulti = 1f) { int backFrame = Mathf.FloorToInt(currentLocalTime / frameTime); int nextFrame = backFrame == (frames.Count - 1) ? frames.Count - 1 : backFrame + 1; float lerpFactor = (currentLocalTime - backFrame * frameTime) / frameTime; return(FrameContact.Lerp( this[backFrame].contactPoints[index], this[nextFrame].contactPoints[index], lerpFactor )); }
public void GetContactPoints( ref List <FrameContact> points, float currentLocalTime, float animSpeedMulti = 1f ) { int backFrame = Mathf.FloorToInt(currentLocalTime / frameTime); int nextFrame = backFrame == (frames.Count - 1) ? frames.Count - 1 : backFrame + 1; float lerpFactor = (currentLocalTime - backFrame * frameTime) / frameTime; points.Clear(); for (int i = 0; i < this[backFrame].contactPoints.Length; i++) { points.Add(FrameContact.Lerp( this[backFrame].contactPoints[i], this[nextFrame].contactPoints[i], lerpFactor )); } }
public float CalculateCost(FrameContact to, ContactPointCostType costType) { float cost = 0f; switch (costType) { case ContactPointCostType.Postion: cost += CalculatePositionCost(to); break; case ContactPointCostType.Normal_OR_Direction: cost += CalculateReverseSurfaceNormalCost(to); break; case ContactPointCostType.PositionNormal_OR_Direction: cost += CalculatePositionCost(to); cost += CalculateReverseSurfaceNormalCost(to); break; } return(cost); }
public SwitchStateContact(FrameContact contactPoint, Vector3 forward) { this.forward = forward; this.frameContact = contactPoint; }
private float CalculateReverseSurfaceNormalCost(FrameContact to) { return(math.lengthsq(this.normal - to.normal)); }
private float CalculatePositionCost(FrameContact to) { return(math.lengthsq(this.position - to.position)); }