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);
        }
 public void AddObjectVar(string objectName, string varName, SpriterVarValue value)
 {
     IDictionary<string, SpriterVarValue> values;
     if (!ObjectVars.TryGetValue(objectName, out values))
     {
         values = new Dictionary<string, SpriterVarValue>();
         ObjectVars[objectName] = values;
     }
     values[varName] = value;
 }
示例#3
0
        public void AddObjectVar(string objectName, string varName, SpriterVarValue value)
        {
            if (!ObjectVars.TryGetValue(objectName, out var values))
            {
                values = _pool.GetObject <Dictionary <string, SpriterVarValue> >();
                ObjectVars[objectName] = values;
            }

            values[varName] = value;
        }
 private static SpriterVarValue Interpolate(SpriterVarValue valA, SpriterVarValue valB, float factor)
 {
     return(new SpriterVarValue
     {
         Type = valA.Type,
         StringValue = valA.StringValue,
         FloatValue = MathHelper.Linear(valA.FloatValue, valB.FloatValue, factor),
         IntValue = (int)MathHelper.Linear(valA.IntValue, valB.IntValue, factor)
     });
 }
        public void AddObjectVar(string objectName, string varName, SpriterVarValue value)
        {
            IDictionary <string, SpriterVarValue> values;

            if (!ObjectVars.TryGetValue(objectName, out values))
            {
                values = new Dictionary <string, SpriterVarValue>();
                ObjectVars[objectName] = values;
            }
            values[varName] = value;
        }
        private static SpriterVarValue Interpolate(SpriterVarValue valA, SpriterVarValue valB, float factor)
        {
            SpriterVarValue ret = new SpriterVarValue();

            ret.Type        = valA.Type;
            ret.StringValue = valA.StringValue;
            ret.FloatValue  = MathHelper.Linear(valA.FloatValue, valB.FloatValue, factor);
            ret.IntValue    = (int)MathHelper.Linear(valA.IntValue, valB.IntValue, factor);

            return(ret);
        }
示例#7
0
 private object GetValue(SpriterVarValue varValue)
 {
     object value;
     switch (varValue.Type)
     {
         case SpriterVarType.Float:
             value = varValue.FloatValue;
             break;
         case SpriterVarType.Int:
             value = varValue.IntValue;
             break;
         default:
             value = varValue.StringValue;
             break;
     }
     return value;
 }