public void CleanupLastWorld() { if (vm == null) { return; } //clear our cache too, if the setting lets us do that TimedReferenceController.Clear(); TimedReferenceController.Clear(); vm.Context.Ambience.Kill(); foreach (var ent in vm.Entities) { //stop object sounds var threads = ent.SoundThreads; for (int i = 0; i < threads.Count; i++) { threads[i].Sound.RemoveOwner(ent.ObjectID); } threads.Clear(); } vm.CloseNet(VMCloseNetReason.LeaveLot); GameFacade.Scenes.Remove(World); World.Dispose(); vm.SuppressBHAVChanges(); vm = null; World = null; Driver = null; }
public void PopulateList(FAMI family) { var world = new FSO.LotView.World(GameFacade.GraphicsDevice); world.Initialize(GameFacade.Scenes); var context = new VMContext(world); var vm = new VM(context, new VMServerDriver(new VMTS1GlobalLinkStub()), new VMNullHeadlineProvider()); vm.Init(); var blueprint = new Blueprint(1, 1); //world.InitBlueprint(blueprint); context.Blueprint = blueprint; context.Architecture = new VMArchitecture(1, 1, blueprint, vm.Context); int i = 0; var baseX = 0; foreach (var sim in family.FamilyGUIDs) { var fam = vm.Context.CreateObjectInstance(sim, LotTilePos.OUT_OF_WORLD, Direction.NORTH, true).BaseObject; var btn = new UIAvatarSelectButton(UIIconCache.GetObject(fam)); btn.Opacity = 1f; var id = i; btn.Name = fam.Name; btn.X = baseX + (i++) * 100; btn.Y = 0; btn.DeregisterHandler(); Btns.Add(btn); Add(btn); fam.Delete(true, vm.Context); } world.Dispose(); }
public void InitializeLot() { CleanupLastWorld(); if (FSOEnvironment.Enable3D) { var rc = new FSO.LotView.RC.WorldRC(GameFacade.GraphicsDevice); World = rc; } else { World = new FSO.LotView.World(GameFacade.GraphicsDevice); } World.Opacity = 1; GameFacade.Scenes.Add(World); var globalLink = new VMTS1GlobalLinkStub(); Driver = new VMServerDriver(globalLink); vm = new VM(new VMContext(World), Driver, new UIHeadlineRendererProvider()); vm.ListenBHAVChanges(); vm.Init(); using (var file = new BinaryReader(File.OpenRead(Path.Combine(FSOEnvironment.ContentDir, "cas.fsov")))) { var marshal = new FSO.SimAntics.Marshals.VMMarshal(); marshal.Deserialize(file); marshal.PlatformState = new VMTS1LotState(); vm.Load(marshal); vm.Reset(); } vm.Tick(); vm.Context.Clock.Hours = 12; vm.MyUID = uint.MaxValue; var settings = GlobalSettings.Default; var myClient = new VMNetClient { PersistID = uint.MaxValue, RemoteIP = "local", AvatarState = new VMNetAvatarPersistState() { Name = settings.LastUser ?? "", DefaultSuits = new VMAvatarDefaultSuits(settings.DebugGender), BodyOutfit = settings.DebugBody, HeadOutfit = settings.DebugHead, PersistID = uint.MaxValue, SkinTone = (byte)settings.DebugSkin, Gender = (short)(settings.DebugGender ? 1 : 0), Permissions = FSO.SimAntics.Model.TSOPlatform.VMTSOAvatarPermissions.Admin, Budget = 1000000 } }; var server = (VMServerDriver)Driver; server.ConnectClient(myClient); HeadAvatars = new VMAvatar[18]; for (int i = 0; i < 18; i++) { HeadAvatars[i] = (VMAvatar)vm.Context.CreateObjectInstance(0x7FD96B54, LotTilePos.OUT_OF_WORLD, Direction.NORTH, true).BaseObject; } BodyAvatars = new VMAvatar[18]; for (int i = 0; i < 18; i++) { BodyAvatars[i] = (VMAvatar)vm.Context.CreateObjectInstance(0x7FD96B54, LotTilePos.OUT_OF_WORLD, Direction.NORTH, true).BaseObject; } PopulateSimType("ma"); }