123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using System;
- using System.Collections.Generic;
- namespace Spine
- {
- public abstract class CurveTimeline : Timeline
- {
- public CurveTimeline(int frameCount)
- {
- this.curves = new float[(frameCount - 1) * 19];
- }
- public int FrameCount
- {
- get
- {
- return this.curves.Length / 19 + 1;
- }
- }
- public abstract void Apply(Skeleton skeleton, float lastTime, float time, List<Event> firedEvents, float alpha);
- public void SetLinear(int frameIndex)
- {
- this.curves[frameIndex * 19] = 0f;
- }
- public void SetStepped(int frameIndex)
- {
- this.curves[frameIndex * 19] = 1f;
- }
- public void SetCurve(int frameIndex, float cx1, float cy1, float cx2, float cy2)
- {
- float num = 0.1f;
- float num2 = num * num;
- float num3 = num2 * num;
- float num4 = 3f * num;
- float num5 = 3f * num2;
- float num6 = 6f * num2;
- float num7 = 6f * num3;
- float num8 = -cx1 * 2f + cx2;
- float num9 = -cy1 * 2f + cy2;
- float num10 = (cx1 - cx2) * 3f + 1f;
- float num11 = (cy1 - cy2) * 3f + 1f;
- float num12 = cx1 * num4 + num8 * num5 + num10 * num3;
- float num13 = cy1 * num4 + num9 * num5 + num11 * num3;
- float num14 = num8 * num6 + num10 * num7;
- float num15 = num9 * num6 + num11 * num7;
- float num16 = num10 * num7;
- float num17 = num11 * num7;
- int i = frameIndex * 19;
- float[] array = this.curves;
- array[i++] = 2f;
- float num18 = num12;
- float num19 = num13;
- int num20 = i + 19 - 1;
- while (i < num20)
- {
- array[i] = num18;
- array[i + 1] = num19;
- num12 += num14;
- num13 += num15;
- num14 += num16;
- num15 += num17;
- num18 += num12;
- num19 += num13;
- i += 2;
- }
- }
- public float GetCurvePercent(int frameIndex, float percent)
- {
- float[] array = this.curves;
- int i = frameIndex * 19;
- float num = array[i];
- if (num == 0f)
- {
- return percent;
- }
- if (num == 1f)
- {
- return 0f;
- }
- i++;
- float num2 = 0f;
- int num3 = i;
- int num4 = i + 19 - 1;
- while (i < num4)
- {
- num2 = array[i];
- if (num2 >= percent)
- {
- float num5;
- float num6;
- if (i == num3)
- {
- num5 = 0f;
- num6 = 0f;
- }
- else
- {
- num5 = array[i - 2];
- num6 = array[i - 1];
- }
- return num6 + (array[i + 1] - num6) * (percent - num5) / (num2 - num5);
- }
- i += 2;
- }
- float num7 = array[i - 1];
- return num7 + (1f - num7) * (percent - num2) / (1f - num2);
- }
- public float GetCurveType(int frameIndex)
- {
- return this.curves[frameIndex * 19];
- }
- protected const float LINEAR = 0f;
- protected const float STEPPED = 1f;
- protected const float BEZIER = 2f;
- protected const int BEZIER_SEGMENTS = 10;
- protected const int BEZIER_SIZE = 19;
- private float[] curves;
- }
- }
|