123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using System;
- using System.Collections.Generic;
- namespace Spine
- {
- public class IkConstraintTimeline : CurveTimeline
- {
- public IkConstraintTimeline(int frameCount) : base(frameCount)
- {
- this.frames = new float[frameCount * 3];
- }
- public int IkConstraintIndex
- {
- get
- {
- return this.ikConstraintIndex;
- }
- set
- {
- this.ikConstraintIndex = value;
- }
- }
- public float[] Frames
- {
- get
- {
- return this.frames;
- }
- set
- {
- this.frames = value;
- }
- }
- public void SetFrame(int frameIndex, float time, float mix, int bendDirection)
- {
- frameIndex *= 3;
- this.frames[frameIndex] = time;
- this.frames[frameIndex + 1] = mix;
- this.frames[frameIndex + 2] = (float)bendDirection;
- }
- public override void Apply(Skeleton skeleton, float lastTime, float time, List<Event> firedEvents, float alpha)
- {
- float[] array = this.frames;
- if (time < array[0])
- {
- return;
- }
- IkConstraint ikConstraint = skeleton.ikConstraints[this.ikConstraintIndex];
- if (time >= array[array.Length - 3])
- {
- ikConstraint.mix += (array[array.Length - 2] - ikConstraint.mix) * alpha;
- ikConstraint.bendDirection = (int)array[array.Length - 1];
- return;
- }
- int num = Animation.binarySearch(array, time, 3);
- float num2 = array[num + -2];
- float num3 = array[num];
- float num4 = 1f - (time - num3) / (array[num + -3] - num3);
- num4 = base.GetCurvePercent(num / 3 - 1, (num4 >= 0f) ? ((num4 <= 1f) ? num4 : 1f) : 0f);
- float num5 = num2 + (array[num + 1] - num2) * num4;
- ikConstraint.mix += (num5 - ikConstraint.mix) * alpha;
- ikConstraint.bendDirection = (int)array[num + -1];
- }
- private const int PREV_FRAME_TIME = -3;
- private const int PREV_FRAME_MIX = -2;
- private const int PREV_FRAME_BEND_DIRECTION = -1;
- private const int FRAME_MIX = 1;
- internal int ikConstraintIndex;
- internal float[] frames;
- }
- }
|