/// <summary> /// Assigns a new value to a subscript of an existing value /// </summary> /// <param name="destList">The list to retrieve the value from</param> /// <param name="destIndex">The index of the item to change</param> /// <param name="subIndex">The subscript index to change</param> /// <param name="subScriptValue">The new value for the subscript</param> /// <returns>The old subscript value</returns> private float _AssignSubscript(object[] destList, int destIndex, int subIndex, object subScriptValue, SubScriptOp op) { object currLocal = destList[destIndex]; if (currLocal is Vector3) { Vector3 vlocal = (Vector3)currLocal; switch (subIndex) { case 0: if (op == SubScriptOp.INC) { subScriptValue = vlocal.X + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = vlocal.X - 1; } destList[destIndex] = new Vector3((float)subScriptValue, vlocal.Y, vlocal.Z); return(vlocal.X); case 1: if (op == SubScriptOp.INC) { subScriptValue = vlocal.Y + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = vlocal.Y - 1; } destList[destIndex] = new Vector3(vlocal.X, (float)subScriptValue, vlocal.Z); return(vlocal.Y); case 2: if (op == SubScriptOp.INC) { subScriptValue = vlocal.Z + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = vlocal.Z - 1; } destList[destIndex] = new Vector3(vlocal.X, vlocal.Y, (float)subScriptValue); return(vlocal.Z); default: throw new VMException("Op_LoadSub: Invalid subscript index for vector"); } } else if (currLocal is Quaternion) { Quaternion qlocal = (Quaternion)currLocal; switch (subIndex) { case 0: if (op == SubScriptOp.INC) { subScriptValue = qlocal.X + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.X - 1; } destList[destIndex] = new Quaternion((float)subScriptValue, qlocal.Y, qlocal.Z, qlocal.W); return(qlocal.X); case 1: if (op == SubScriptOp.INC) { subScriptValue = qlocal.Y + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.Y - 1; } destList[destIndex] = new Quaternion(qlocal.X, (float)subScriptValue, qlocal.Z, qlocal.W); return(qlocal.Y); case 2: if (op == SubScriptOp.INC) { subScriptValue = qlocal.Z + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.Z - 1; } destList[destIndex] = new Quaternion(qlocal.X, qlocal.Y, (float)subScriptValue, qlocal.W); return(qlocal.Z); case 3: if (op == SubScriptOp.INC) { subScriptValue = qlocal.W + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.W - 1; } destList[destIndex] = new Quaternion(qlocal.X, qlocal.Y, qlocal.Z, (float)subScriptValue); return(qlocal.W); default: throw new VMException("Op_LoadSub: Invalid subscript index for rotation"); } } else { throw new VMException("Op_LoadSub: Subscript access on non-subscriptable type"); } }
/// <summary> /// Assigns a new value to a subscript of an existing value /// </summary> /// <param name="destList">The list to retrieve the value from</param> /// <param name="destIndex">The index of the item to change</param> /// <param name="subIndex">The subscript index to change</param> /// <param name="subScriptValue">The new value for the subscript</param> /// <returns>The old subscript value</returns> private float _AssignSubscript(object[] destList, int destIndex, int subIndex, object subScriptValue, SubScriptOp op) { object currLocal = destList[destIndex]; if (currLocal is Vector3) { Vector3 vlocal = (Vector3)currLocal; switch (subIndex) { case 0: if (op == SubScriptOp.INC) { subScriptValue = vlocal.X + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = vlocal.X - 1; } destList[destIndex] = new Vector3((float)subScriptValue, vlocal.Y, vlocal.Z); return vlocal.X; case 1: if (op == SubScriptOp.INC) { subScriptValue = vlocal.Y + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = vlocal.Y - 1; } destList[destIndex] = new Vector3(vlocal.X, (float)subScriptValue, vlocal.Z); return vlocal.Y; case 2: if (op == SubScriptOp.INC) { subScriptValue = vlocal.Z + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = vlocal.Z - 1; } destList[destIndex] = new Vector3(vlocal.X, vlocal.Y, (float)subScriptValue); return vlocal.Z; default: throw new VMException("Op_LoadSub: Invalid subscript index for vector"); } } else if (currLocal is Quaternion) { Quaternion qlocal = (Quaternion)currLocal; switch (subIndex) { case 0: if (op == SubScriptOp.INC) { subScriptValue = qlocal.X + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.X - 1; } destList[destIndex] = new Quaternion((float)subScriptValue, qlocal.Y, qlocal.Z, qlocal.W); return qlocal.X; case 1: if (op == SubScriptOp.INC) { subScriptValue = qlocal.Y + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.Y - 1; } destList[destIndex] = new Quaternion(qlocal.X, (float)subScriptValue, qlocal.Z, qlocal.W); return qlocal.Y; case 2: if (op == SubScriptOp.INC) { subScriptValue = qlocal.Z + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.Z - 1; } destList[destIndex] = new Quaternion(qlocal.X, qlocal.Y, (float)subScriptValue, qlocal.W); return qlocal.Z; case 3: if (op == SubScriptOp.INC) { subScriptValue = qlocal.W + 1; } else if (op == SubScriptOp.DEC) { subScriptValue = qlocal.W - 1; } destList[destIndex] = new Quaternion(qlocal.X, qlocal.Y, qlocal.Z, (float)subScriptValue); return qlocal.W; default: throw new VMException("Op_LoadSub: Invalid subscript index for rotation"); } } else { throw new VMException("Op_LoadSub: Subscript access on non-subscriptable type"); } }