protected virtual SpriterVarValue GetVariableValue(SpriterAnimation animation, SpriterVarDef varDef, SpriterVarline varline, float targetTime) { SpriterVarlineKey[] keys = varline.Keys; if (keys == null) { return(varDef.VariableValue); } SpriterVarlineKey keyA = keys.GetLastKey(targetTime) ?? keys[keys.Length - 1]; if (keyA == null) { return(varDef.VariableValue); } SpriterVarlineKey keyB = varline.Keys.GetNextKey(keyA, animation.Looping); if (keyB == null) { return(keyA.VariableValue); } float adjustedTime = keyA.Time == keyB.Time ? targetTime : SpriterHelper.AdjustTime(targetTime, keyA, keyB, animation.Length); float factor = SpriterHelper.GetFactor(keyA, keyB, animation.Length, adjustedTime); SpriterVarValue varVal = Pool.GetObject <SpriterVarValue>(); varVal.Interpolate(keyA.VariableValue, keyB.VariableValue, factor); return(varVal); }
protected virtual SpriterObject GetObjectInfo(SpriterRef spriterRef, SpriterAnimation animation, float targetTime) { SpriterTimelineKey[] keys = animation.Timelines[spriterRef.TimelineId].Keys; SpriterTimelineKey keyA = keys[spriterRef.KeyId]; SpriterTimelineKey keyB = keys.GetNextKey(keyA, animation.Looping); if (keyB == null) { return(Copy(keyA.ObjectInfo)); } float factor = SpriterHelper.GetFactor(keyA, keyB, animation.Length, targetTime); return(Interpolate(keyA.ObjectInfo, keyB.ObjectInfo, factor, keyA.Spin)); }