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);
                }
            }
        }
Ejemplo n.º 2
0
        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
                               ));
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 public SwitchStateContact(FrameContact contactPoint, Vector3 forward)
 {
     this.forward      = forward;
     this.frameContact = contactPoint;
 }
Ejemplo n.º 7
0
 private float CalculateReverseSurfaceNormalCost(FrameContact to)
 {
     return(math.lengthsq(this.normal - to.normal));
 }
Ejemplo n.º 8
0
 private float CalculatePositionCost(FrameContact to)
 {
     return(math.lengthsq(this.position - to.position));
 }