Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Evaluate()

float Microsoft.Xna.Framework.Curve.Evaluate ( float position)
inline

Definition at line 142 of file Curve.cs.

143 {
144 if (keys.Count == 0)
145 {
146 return 0f;
147 }
148 if (keys.Count == 1)
149 {
150 return keys[0].internalValue;
151 }
152 CurveKey curveKey = keys[0];
153 CurveKey curveKey2 = keys[keys.Count - 1];
154 float num = position;
155 float num2 = 0f;
156 if (num < curveKey.position)
157 {
158 if (preLoop == CurveLoopType.Constant)
159 {
160 return curveKey.internalValue;
161 }
162 if (preLoop == CurveLoopType.Linear)
163 {
164 return curveKey.internalValue - curveKey.tangentIn * (curveKey.position - num);
165 }
167 {
169 }
170 float num3 = CalcCycle(num);
171 float num4 = num - (curveKey.position + num3 * keys.TimeRange);
172 if (preLoop == CurveLoopType.Cycle)
173 {
174 num = curveKey.position + num4;
175 }
176 else if (preLoop == CurveLoopType.CycleOffset)
177 {
178 num = curveKey.position + num4;
179 num2 = (curveKey2.internalValue - curveKey.internalValue) * num3;
180 }
181 else
182 {
183 num = ((((uint)(int)num3 & (true ? 1u : 0u)) != 0) ? (curveKey2.position - num4) : (curveKey.position + num4));
184 }
185 }
186 else if (curveKey2.position < num)
187 {
188 if (postLoop == CurveLoopType.Constant)
189 {
190 return curveKey2.internalValue;
191 }
192 if (postLoop == CurveLoopType.Linear)
193 {
194 return curveKey2.internalValue - curveKey2.tangentOut * (curveKey2.position - num);
195 }
197 {
199 }
200 float num5 = CalcCycle(num);
201 float num6 = num - (curveKey.position + num5 * keys.TimeRange);
202 if (postLoop == CurveLoopType.Cycle)
203 {
204 num = curveKey.position + num6;
205 }
206 else if (postLoop == CurveLoopType.CycleOffset)
207 {
208 num = curveKey.position + num6;
209 num2 = (curveKey2.internalValue - curveKey.internalValue) * num5;
210 }
211 else
212 {
213 num = ((((uint)(int)num5 & (true ? 1u : 0u)) != 0) ? (curveKey2.position - num6) : (curveKey.position + num6));
214 }
215 }
216 CurveKey k = null;
217 CurveKey k2 = null;
218 num = FindSegment(num, ref k, ref k2);
219 return num2 + Hermite(k, k2, num);
220 }
CurveKeyCollection keys
Definition Curve.cs:14
float CalcCycle(float t)
Definition Curve.cs:222
CurveLoopType postLoop
Definition Curve.cs:12
static float Hermite(CurveKey k0, CurveKey k1, float t)
Definition Curve.cs:258
CurveLoopType preLoop
Definition Curve.cs:10
float FindSegment(float t, ref CurveKey k0, ref CurveKey k1)
Definition Curve.cs:233

References Microsoft.Xna.Framework.Curve.CalcCycle(), Microsoft.Xna.Framework.CurveKeyCollection.ComputeCacheValues(), Microsoft.Xna.Framework.CurveKeyCollection.Count, Microsoft.Xna.Framework.Curve.FindSegment(), Microsoft.Xna.Framework.Curve.Hermite(), Microsoft.Xna.Framework.CurveKey.internalValue, Microsoft.Xna.Framework.CurveKeyCollection.IsCacheAvailable, Microsoft.Xna.Framework.Curve.keys, Microsoft.Xna.Framework.CurveKey.position, Microsoft.Xna.Framework.Curve.postLoop, Microsoft.Xna.Framework.Curve.preLoop, and Microsoft.Xna.Framework.CurveKeyCollection.TimeRange.