Inheritance: VMSerializable
Example #1
0
        public void BlueprintReset(string path)
        {
            string filename = Path.GetFileName(path);

            try
            {
                using (var file = new BinaryReader(File.OpenRead(Path.Combine(FSOEnvironment.UserDir, "LocalHouse/") + filename.Substring(0, filename.Length - 4) + ".fsov")))
                {
                    var marshal = new FSO.SimAntics.Marshals.VMMarshal();
                    marshal.Deserialize(file);
                    //vm.SendCommand(new VMStateSyncCmd()
                    //{
                    //    State = marshal
                    //});

                    vm.Load(marshal);
                    vm.Reset();
                }
            }
            catch (Exception)
            {
                var floorClip  = Rectangle.Empty;
                var offset     = new Point();
                var targetSize = 0;

                var   isIff    = path.EndsWith(".iff");
                short jobLevel = -1;
                if (isIff)
                {
                    jobLevel = short.Parse(path.Substring(path.Length - 6, 2));
                }
                vm.SendCommand(new VMBlueprintRestoreCmd
                {
                    JobLevel = jobLevel,
                    XMLData  = File.ReadAllBytes(path),
                    IffData  = isIff,

                    FloorClipX      = floorClip.X,
                    FloorClipY      = floorClip.Y,
                    FloorClipWidth  = floorClip.Width,
                    FloorClipHeight = floorClip.Height,
                    OffsetX         = offset.X,
                    OffsetY         = offset.Y,
                    TargetSize      = targetSize
                });
            }

            vm.Tick();

            if (ActiveFamily == null)
            {
                vm.SetGlobalValue(32, 1);
                vm.SpeedMultiplier = -1;
            }
        }
Example #2
0
 public void LoadState(VM vm, string path)
 {
     using (var file = new BinaryReader(File.OpenRead(path)))
     {
         var marshal = new VMMarshal();
         marshal.Deserialize(file);
         vm.Load(marshal);
         CleanLot();
         vm.Reset();
     }
 }
Example #3
0
 public override void Deserialize(BinaryReader reader)
 {
     State = new VMMarshal();
     using (var decomp = new GZipStream(reader.BaseStream, CompressionMode.Decompress))
     {
         using (var bin = new BinaryReader(decomp))
         {
             State.Deserialize(bin);
         }
     }
 }
Example #4
0
        public void Load(VMMarshal input)
        {
            var clientJoin = (Context.Architecture == null);
            var oldWorld = Context.World;
            Context = new VMContext(input.Context, Context);
            Context.Globals = FSO.Content.Content.Get().WorldObjectGlobals.Get("global");
            Context.VM = this;
            Context.Architecture.RegenRoomMap();
            Context.RegeneratePortalInfo();

            var oldSounds = new List<VMSoundTransfer>();

            if (Entities != null) //free any object resources here.
            {
                foreach (var obj in Entities)
                {
                    obj.Dead = true;
                    if (obj.HeadlineRenderer != null) obj.HeadlineRenderer.Dispose();
                    oldSounds.AddRange(obj.GetActiveSounds());
                }
            }

            Entities = new List<VMEntity>();
            ObjectsById = new Dictionary<short, VMEntity>();
            foreach (var ent in input.Entities)
            {
                VMEntity realEnt;
                var objDefinition = FSO.Content.Content.Get().WorldObjects.Get(ent.GUID);
                if (ent is VMAvatarMarshal)
                {
                    var avatar = new VMAvatar(objDefinition);
                    avatar.Load((VMAvatarMarshal)ent);
                    if (UseWorld) Context.Blueprint.AddAvatar((AvatarComponent)avatar.WorldUI);
                    realEnt = avatar;
                }
                else
                {
                    var worldObject = new ObjectComponent(objDefinition);
                    var obj = new VMGameObject(objDefinition, worldObject);
                    obj.Load((VMGameObjectMarshal)ent);
                    Context.Blueprint.AddObject((ObjectComponent)obj.WorldUI);
                    Context.Blueprint.ChangeObjectLocation((ObjectComponent)obj.WorldUI, obj.Position);
                    obj.Position = obj.Position;
                    realEnt = obj;
                }
                realEnt.GenerateTreeByName(Context);
                Entities.Add(realEnt);
                Context.SetToNextCache.NewObject(realEnt);
                ObjectsById.Add(ent.ObjectID, realEnt);
            }

            int i = 0;
            foreach (var ent in input.Entities)
            {
                var threadMarsh = input.Threads[i];
                var realEnt = Entities[i++];

                realEnt.Thread = new VMThread(threadMarsh, Context, realEnt);

                if (realEnt is VMAvatar)
                    ((VMAvatar)realEnt).LoadCrossRef((VMAvatarMarshal)ent, Context);
                else
                    ((VMGameObject)realEnt).LoadCrossRef((VMGameObjectMarshal)ent, Context);
            }

            foreach (var multi in input.MultitileGroups)
            {
                new VMMultitileGroup(multi, Context); //should self register
            }

            foreach (var ent in Entities)
            {
                if (ent.Container == null) ent.PositionChange(Context, true); //called recursively for contained objects.
            }

            GlobalState = input.GlobalState;
            PlatformState = input.PlatformState;
            ObjectId = input.ObjectId;

            //just a few final changes to refresh everything, and avoid signalling objects
            var clock = Context.Clock;
            Context.Architecture.SetTimeOfDay(clock.Hours / 24.0 + clock.Minutes / (24.0 * 60) + clock.Seconds / (24.0 * 60 * 60));

            Context.Architecture.RegenRoomMap();
            Context.RegeneratePortalInfo();
            Context.Architecture.WallDirtyState(input.Context.Architecture);

            foreach (var snd in oldSounds)
            {
                //find new owners
                var obj = GetObjectById(snd.SourceID);
                if (obj == null || obj.Object.GUID != snd.SourceGUID) snd.SFX.Sound.RemoveOwner(snd.SourceID);
                else obj.SoundThreads.Add(snd.SFX); // successfully transfer sound to new object
            }

            if (clientJoin)
            {
                //run clientJoin functions to play object sounds, update some gfx.
                foreach (var obj in Entities)
                {
                    obj.ExecuteEntryPoint(30, Context, true);
                }
            }

            if (OnFullRefresh != null) OnFullRefresh();
        }
Example #5
0
 public override void Deserialize(BinaryReader reader)
 {
     State = new VMMarshal();
     State.Deserialize(reader);
 }
Example #6
0
File: VM.cs Project: Daribon/FreeSO
        public void Load(VMMarshal input)
        {
            var oldWorld = Context.World;
            Context = new VMContext(input.Context, oldWorld);
            Context.Globals = FSO.Content.Content.Get().WorldObjectGlobals.Get("global");
            Context.VM = this;
            Context.Architecture.RegenRoomMap();
            Context.RegeneratePortalInfo();
            Entities = new List<VMEntity>();
            ObjectsById = new Dictionary<short, VMEntity>();
            foreach (var ent in input.Entities)
            {
                VMEntity realEnt;
                var objDefinition = FSO.Content.Content.Get().WorldObjects.Get(ent.GUID);
                if (ent is VMAvatarMarshal)
                {
                    var avatar = new VMAvatar(objDefinition);
                    avatar.Load((VMAvatarMarshal)ent);
                    if (UseWorld) Context.Blueprint.AddAvatar((AvatarComponent)avatar.WorldUI);
                    realEnt = avatar;
                }
                else
                {
                    var worldObject = new ObjectComponent(objDefinition);
                    var obj = new VMGameObject(objDefinition, worldObject);
                    obj.Load((VMGameObjectMarshal)ent);
                    obj.RefreshBlueprint(Context);
                    obj.Position = obj.Position;
                    realEnt = obj;
                }
                realEnt.GenerateTreeByName(Context);
                Entities.Add(realEnt);
                ObjectsById.Add(ent.ObjectID, realEnt);
            }

            int i = 0;
            foreach (var ent in input.Entities)
            {
                var threadMarsh = input.Threads[i];
                var realEnt = Entities[i++];

                realEnt.Thread = new VMThread(threadMarsh, Context, realEnt);

                if (realEnt is VMAvatar)
                    ((VMAvatar)realEnt).LoadCrossRef((VMAvatarMarshal)ent, Context);
                else
                    ((VMGameObject)realEnt).LoadCrossRef((VMGameObjectMarshal)ent, Context);
            }

            foreach (var multi in input.MultitileGroups)
            {
                new VMMultitileGroup(multi, Context); //should self register
            }

            foreach (var ent in Entities) ent.PositionChange(Context, true);

            GlobalState = input.GlobalState;
            ObjectId = input.ObjectId;

            //just a few final changes to refresh everything, and avoid signalling objects
            Context.Architecture.RegenRoomMap();
            Context.RegeneratePortalInfo();
            Context.Architecture.WallDirtyState(input.Context.Architecture);

            if (OnFullRefresh != null) OnFullRefresh();
        }