public void Deserialize(BinaryReader reader) { var stackN = reader.ReadInt32(); Stack = new VMStackFrameMarshal[stackN]; for (int i = 0; i < stackN; i++) { var type = reader.ReadByte(); Stack[i] = (type==1)?new VMRoutingFrameMarshal():new VMStackFrameMarshal(); Stack[i].Deserialize(reader); } var queueN = reader.ReadInt32(); Queue = new VMQueuedActionMarshal[queueN]; for (int i = 0; i < queueN; i++) { Queue[i] = new VMQueuedActionMarshal(); Queue[i].Deserialize(reader); } TempRegisters = new short[20]; for (int i = 0; i < 20; i++) TempRegisters[i] = reader.ReadInt16(); TempXL = new int[2]; for (int i = 0; i < 2; i++) TempXL[i] = reader.ReadInt32(); LastStackExitCode = (VMPrimitiveExitCode)reader.ReadByte(); if (reader.ReadBoolean()) { BlockingDialog = new VMDialogResult(); BlockingDialog.Deserialize(reader); } else BlockingDialog = null; Interrupt = reader.ReadBoolean(); ActionUID = reader.ReadUInt16(); DialogCooldown = reader.ReadInt32(); }
public virtual void Load(VMThreadMarshal input, VMContext context) { Stack = new List<VMStackFrame>(); foreach (var item in input.Stack) { Stack.Add((item is VMRoutingFrameMarshal)? new VMRoutingFrame(item, context, this) : new VMStackFrame(item, context, this)); } Queue = new List<VMQueuedAction>(); foreach (var item in input.Queue) Queue.Add(new VMQueuedAction(item, context)); TempRegisters = input.TempRegisters; TempXL = input.TempXL; LastStackExitCode = input.LastStackExitCode; BlockingDialog = input.BlockingDialog; Interrupt = input.Interrupt; ActionUID = input.ActionUID; DialogCooldown = input.DialogCooldown; }