Modify logic for "at" operator.
This commit is contained in:
@@ -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");
|
||||
if (op0.Type == PdtInternalType.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);
|
||||
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 {
|
||||
|
Reference in New Issue
Block a user