diff --git a/Assets/Cryville/Crtr/PdtEvaluator.cs b/Assets/Cryville/Crtr/PdtEvaluator.cs index f8e8597..e22bef9 100644 --- a/Assets/Cryville/Crtr/PdtEvaluator.cs +++ b/Assets/Cryville/Crtr/PdtEvaluator.cs @@ -261,11 +261,16 @@ namespace Cryville.Crtr { int _; var op0 = GetOperand(0); var op1 = (int)Math.Round(GetOperand(1).AsNumber()); - if (op0.Type != PdtInternalType.Vector) throw new InvalidOperationException("Not a vector"); - op0.GetArraySuffix(out _, out _); - if (op1 >= (op0.Length - sizeof(int)) / sizeof(float)) throw new IndexOutOfRangeException(); - float result = GetOperand(0).AsNumber(op1 * sizeof(float)); - GetReturnFrame(PdtInternalType.Number, sizeof(float)).SetNumber(result); + if (op0.Type == PdtInternalType.Vector) { + op0.GetArraySuffix(out _, out _); + if (op1 >= (op0.Length - sizeof(int)) / sizeof(float)) throw new IndexOutOfRangeException(); + GetReturnFrame(PdtInternalType.Number, sizeof(float)).SetNumber(op0.AsNumber(op1 * sizeof(float))); + } + else if (op0.Type == PdtInternalType.Number) { + if (op1 != 0) throw new IndexOutOfRangeException(); + GetReturnFrame(PdtInternalType.Number, sizeof(float)).SetNumber(op0.AsNumber()); + } + else throw new InvalidOperationException("Not a vector or number"); } } class func_frame_seq : PdtOperator {