コード例 #1
0
ファイル: VMStackFrame.cs プロジェクト: pepster98/FreeSO
        public virtual void Load(VMStackFrameMarshal input, VMContext context)
        {
            CodeOwner = FSO.Content.Content.Get().WorldObjects.Get(input.CodeOwnerGUID);

            BHAV bhav = null;

            if (input.RoutineID >= 8192)
            {
                bhav = ScopeResource.SemiGlobal.Get <BHAV>(input.RoutineID);
            }
            else if (input.RoutineID >= 4096)
            {
                bhav = ScopeResource.Get <BHAV>(input.RoutineID);
            }
            else
            {
                bhav = Global.Resource.Get <BHAV>(input.RoutineID);
            }
            Routine = VM.Assemble(bhav);

            InstructionPointer = input.InstructionPointer;
            Caller             = context.VM.GetObjectById(input.Caller);
            Callee             = context.VM.GetObjectById(input.Callee);
            StackObject        = context.VM.GetObjectById(input.StackObject);
            Locals             = input.Locals;
            Args = input.Args;
        }
コード例 #2
0
        public virtual void Load(VMStackFrameMarshal input, VMContext context)
        {
            CodeOwner = GameContent.Get.WorldObjects.Get(input.CodeOwnerGUID);

            Routine = null;
            if (input.RoutineID >= 8192)
            {
                Routine = (VMRoutine)ScopeResource.SemiGlobal.GetRoutine(input.RoutineID);
            }
            else if (input.RoutineID >= 4096)
            {
                Routine = (VMRoutine)ScopeResource.GetRoutine(input.RoutineID);
            }
            else
            {
                Routine = (VMRoutine)Global.Resource.GetRoutine(input.RoutineID);
            }

            InstructionPointer = input.InstructionPointer;
            Caller             = context.VM.GetObjectById(input.Caller);
            Callee             = context.VM.GetObjectById(input.Callee);
            StackObjectID      = input.StackObject;
            Locals             = input.Locals;
            Args          = input.Args;
            DiscardResult = input.DiscardResult;
            ActionTree    = input.ActionTree;
        }
コード例 #3
0
ファイル: VMStackFrame.cs プロジェクト: fHachenberg/FreeSO
        public virtual void Load(VMStackFrameMarshal input, VMContext context)
        {
            CodeOwner = FSO.Content.Content.Get().WorldObjects.Get(input.CodeOwnerGUID);

            Routine = null;
            if (input.RoutineID >= 8192)
            {
                Routine = (VMRoutine)ScopeResource.SemiGlobal.GetRoutine(input.RoutineID);
            }
            else if (input.RoutineID >= 4096)
            {
                Routine = (VMRoutine)ScopeResource.GetRoutine(input.RoutineID);
            }
            else
            {
                Routine = (VMRoutine)Global.Resource.GetRoutine(input.RoutineID);
            }

            InstructionPointer = (byte)input.InstructionPointer;
            Caller             = context.VM.GetObjectById(input.Caller);
            Callee             = context.VM.GetObjectById(input.Callee);
            StackObjectID      = input.StackObject;
            if (Routine != null && input.Locals != null && Routine.Locals > input.Locals.Length)
            {
                Locals = new short[Routine.Locals];
                Array.Copy(input.Locals, Locals, input.Locals.Length);
            }
            else
            {
                Locals = input.Locals;
            }
            Args          = input.Args;
            DiscardResult = input.DiscardResult;
            ActionTree    = input.ActionTree;
        }