Implement new transition.
This commit is contained in:
@@ -506,20 +506,23 @@ namespace Cryville.Crtr {
|
||||
var dim1 = GetDimension(op1);
|
||||
var dim2 = GetDimension(op2);
|
||||
var dim0 = Math.Min(dim1, dim2);
|
||||
float time;
|
||||
Vector4 trans;
|
||||
switch (LoadedOperandCount) {
|
||||
case 2: time = oputil.AsNumber(_ctxcb()); break;
|
||||
case 3: time = GetOperand(2).AsNumber(); break;
|
||||
case 2:
|
||||
var num = oputil.AsNumber(_ctxcb());
|
||||
trans = new Vector4(num, num, num, num);
|
||||
break;
|
||||
case 3: trans = GetTransition(GetOperand(2)); break;
|
||||
default: throw new ArgumentException("Argument count not 2 or 3");
|
||||
}
|
||||
if (dim0 == 1) {
|
||||
GetReturnFrame(PdtInternalType.Number, sizeof(float))
|
||||
.SetNumber(op1.AsNumber() * (1 - time) + op2.AsNumber() * time);
|
||||
.SetNumber(op1.AsNumber() * (1 - trans.x) + op2.AsNumber() * trans.x);
|
||||
}
|
||||
else {
|
||||
var ret = GetReturnFrame(PdtInternalType.Vector, dim0 * sizeof(float) + sizeof(int));
|
||||
for (int i = 0; i < dim0 * sizeof(float); i += sizeof(float)) {
|
||||
ret.SetNumber(op1.AsNumber(i) * (1 - time) + op2.AsNumber(i) * time, i);
|
||||
ret.SetNumber(op1.AsNumber(i) * (1 - trans[i]) + op2.AsNumber(i) * trans[i], i);
|
||||
}
|
||||
ret.SetArraySuffix(PdtInternalType.Number);
|
||||
}
|
||||
@@ -536,6 +539,28 @@ namespace Cryville.Crtr {
|
||||
default: throw new ArgumentException("Not animatable");
|
||||
}
|
||||
}
|
||||
static Vector4 GetTransition(PdtVariableMemory op) {
|
||||
switch (op.Type) {
|
||||
case PdtInternalType.Number:
|
||||
var num = op.AsNumber();
|
||||
return new Vector4(num, num, num, num);
|
||||
case PdtInternalType.Vector:
|
||||
int arrtype, _;
|
||||
op.GetArraySuffix(out arrtype, out _);
|
||||
if (arrtype != PdtInternalType.Number)
|
||||
throw new ArgumentException("Not animatable");
|
||||
switch ((op.Length - sizeof(int)) / sizeof(float)) {
|
||||
case 0: throw new ArgumentException("Empty vector");
|
||||
case 1:
|
||||
num = op.AsNumber();
|
||||
return new Vector4(num, num, num, num);
|
||||
case 2: return op.As<Vector2>();
|
||||
case 3: return op.As<Vector3>();
|
||||
default: return op.As<Vector4>();
|
||||
}
|
||||
default: throw new ArgumentException("Not animatable");
|
||||
}
|
||||
}
|
||||
}
|
||||
class func_cubic_bezier : PdtOperator {
|
||||
readonly Func<PropSrc> _ctxcb;
|
||||
@@ -552,7 +577,7 @@ namespace Cryville.Crtr {
|
||||
default: throw new ArgumentException("Argument count not 4 or 5");
|
||||
}
|
||||
GetReturnFrame(PdtInternalType.Number, sizeof(float))
|
||||
.SetNumber(CubicBezier.Evaluate(time, x1, y1, x2, y2, 1e-5f));
|
||||
.SetNumber(CubicBezier.Evaluate(time, x1, y1, x2, y2, 1e-3f));
|
||||
}
|
||||
}
|
||||
class func_cubic_bezier_fixed : PdtOperator {
|
||||
@@ -571,17 +596,17 @@ namespace Cryville.Crtr {
|
||||
default: throw new ArgumentException("Argument count not 0 or 1");
|
||||
}
|
||||
GetReturnFrame(PdtInternalType.Number, sizeof(float))
|
||||
.SetNumber(CubicBezier.Evaluate(time, x1, y1, x2, y2, 1e-5f));
|
||||
.SetNumber(CubicBezier.Evaluate(time, x1, y1, x2, y2, 1e-3f));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Judge Functions
|
||||
static readonly int _var_fn = IdentifierManager.SharedInstance.Request("fn");
|
||||
static readonly int _var_tn = IdentifierManager.SharedInstance.Request("tn");
|
||||
static readonly int _var_ft = IdentifierManager.SharedInstance.Request("ft");
|
||||
static readonly int _var_tt = IdentifierManager.SharedInstance.Request("tt");
|
||||
static readonly int _var_fv = IdentifierManager.SharedInstance.Request("fv");
|
||||
static readonly int _var_tv = IdentifierManager.SharedInstance.Request("tv");
|
||||
static readonly int _var_fn = IdentifierManager.SharedInstance.Request("judge_clip_from");
|
||||
static readonly int _var_tn = IdentifierManager.SharedInstance.Request("judge_clip_to");
|
||||
static readonly int _var_ft = IdentifierManager.SharedInstance.Request("input_time_from");
|
||||
static readonly int _var_tt = IdentifierManager.SharedInstance.Request("input_time_to");
|
||||
static readonly int _var_fv = IdentifierManager.SharedInstance.Request("input_vec_from");
|
||||
static readonly int _var_tv = IdentifierManager.SharedInstance.Request("input_vec_to");
|
||||
abstract class JudgeFunction : PdtOperator {
|
||||
readonly Func<int, PropSrc> _ctxcb;
|
||||
protected JudgeFunction(int pc, Func<int, PropSrc> ctxcb) : base(pc) {
|
||||
|
Reference in New Issue
Block a user