public virtual void DrawLMap(GraphicsDevice device, sbyte level) { if (ShadowComponent == null) { ShadowComponent = new RC.ObjectComponentRC(Obj); } if (!Visible) { return; } if (Container != null && Container is AvatarComponent) { return; } if (ShadowComponent.UnmoddedPosition != UnmoddedPosition) { ShadowComponent.Position = UnmoddedPosition; } if (ShadowComponent.DGRP != DGRP) { ShadowComponent.DGRP = DGRP; } if (ShadowComponent.Direction != Direction) { ShadowComponent.Direction = Direction; } if (ShadowComponent.Room != Room) { ShadowComponent.Room = Room; } if (ShadowComponent.DynamicSpriteFlags != DynamicSpriteFlags) { ShadowComponent.DynamicSpriteFlags = DynamicSpriteFlags; } if (ShadowComponent.DynamicSpriteFlags2 != DynamicSpriteFlags2) { ShadowComponent.DynamicSpriteFlags2 = DynamicSpriteFlags2; } if (ShadowComponent.Level != Level) { ShadowComponent.Level = Level; } ShadowComponent.DrawLMap(device, level); }
public void RemoveObject(ObjectComponent component) { if (component.TileX >= 0) { var currentOffset = GetOffset(component.TileX, component.TileY); var currentList = Objects[currentOffset]; if (currentList != null) { currentList.RemoveObject(component); } } if (All.Contains(component)) { All.Remove(component); } Damage.Add(new BlueprintDamage(BlueprintDamageType.OBJECT_MOVE, component.TileX, component.TileY, component.Level) { Component = component }); OccupiedTilesDirty = true; }
public void ChangeObjectLocation(ObjectComponent component, LotTilePos pos) { short tileX = (pos.x < 0) ? (short)0 : pos.TileX; short tileY = (pos.y < 0) ? (short)0 : pos.TileY; sbyte level = pos.Level; /** It has never been placed before if tileX == -2 **/ if (component.TileX != -2){ var currentOffset = GetOffset(component.TileX, component.TileY); var currentList = Objects[currentOffset]; if (currentList != null){ currentList.RemoveObject(component); } } if (tileX != -2) { var newOffset = GetOffset(tileX, tileY); var newList = Objects[newOffset]; if (newList == null) { newList = Objects[newOffset] = new BlueprintObjectList(); } newList.AddObject(component); if (!All.Contains(component)) { All.Add(component); } } else if (All.Contains(component)) { All.Remove(component); } Damage.Add(new BlueprintDamage(BlueprintDamageType.OBJECT_MOVE, tileX, tileY, level) { Component = component }); OccupiedTilesDirty = true; component.blueprint = this; component.TileX = tileX; component.TileY = tileY; component.Level = level; component.Position = new Microsoft.Xna.Framework.Vector3(pos.x / 16.0f, pos.y / 16.0f, (level - 1) * 3.0f); }
public void RemoveObject(ObjectComponent component) { Damage.Add(new BlueprintDamage(BlueprintDamageType.OBJECT_MOVE, component.TileX, component.TileY, component.Level) { Component = component }); Objects.Remove(component); }
/// <summary> /// Gets an object group's thumbnail provided an array of objects. /// </summary> /// <param name="objects">The object components to draw.</param> /// <param name="gd">GraphicsDevice instance.</param> /// <param name="state">WorldState instance.</param> /// <returns>Object's ID if the object was found at the given position.</returns> public Texture2D GetObjectThumb(ObjectComponent[] objects, Vector3[] positions, GraphicsDevice gd, WorldState state) { var oldZoom = state.Zoom; var oldRotation = state.Rotation; /** Center average position **/ Vector3 average = new Vector3(); for (int i = 0; i < positions.Length; i++) { average += positions[i]; } average /= positions.Length; state.SilentZoom = WorldZoom.Near; state.SilentRotation = WorldRotation.BottomRight; state.WorldSpace.Invalidate(); state.InvalidateCamera(); state.TempDraw = true; var pxOffset = new Vector2(442, 275) - state.WorldSpace.GetScreenFromTile(average); var _2d = state._2D; Promise<Texture2D> bufferTexture = null; state._2D.OBJIDMode = false; Rectangle bounds = new Rectangle(); using (var buffer = state._2D.WithBuffer(BUFFER_THUMB, ref bufferTexture)) { while (buffer.NextPass()) { for (int i=0; i<objects.Length; i++) { var obj = objects[i]; var tilePosition = positions[i]; //we need to trick the object into believing it is in a set world state. var oldObjRot = obj.Direction; obj.Direction = Direction.NORTH; state.SilentZoom = WorldZoom.Near; state.SilentRotation = WorldRotation.BottomRight; obj.OnRotationChanged(state); obj.OnZoomChanged(state); _2d.OffsetPixel(state.WorldSpace.GetScreenFromTile(tilePosition) + pxOffset); _2d.OffsetTile(tilePosition); _2d.SetObjID(obj.ObjectID); obj.Draw(gd, state); //return everything to normal obj.Direction = oldObjRot; state.SilentZoom = oldZoom; state.SilentRotation = oldRotation; obj.OnRotationChanged(state); obj.OnZoomChanged(state); } bounds = _2d.GetSpriteListBounds(); } } bounds.X = Math.Max(0, Math.Min(1023, bounds.X)); bounds.Y = Math.Max(0, Math.Min(1023, bounds.Y)); if (bounds.Width + bounds.X > 1024) bounds.Width = 1024 - bounds.X; if (bounds.Height + bounds.Y > 1024) bounds.Height = 1024 - bounds.Y; //return things to normal state.WorldSpace.Invalidate(); state.InvalidateCamera(); state.TempDraw = false; var tex = bufferTexture.Get(); return TextureUtils.Clip(gd, tex, bounds); }
public void SetInfo(VMEntity entity, bool bought) { var obj = entity.Object; var def = entity.MasterDefinition; if (def == null) def = entity.Object.OBJ; CTSS catString = obj.Resource.Get<CTSS>(def.CatalogStringsID); if (catString != null) { DescriptionText.CurrentText = catString.GetString(0) + "\r\n" + catString.GetString(1); ObjectNameText.Caption = catString.GetString(0); } else { DescriptionText.CurrentText = entity.ToString(); ObjectNameText.Caption = entity.ToString(); } StringBuilder motivesString = new StringBuilder(); motivesString.AppendFormat(GameFacade.Strings.GetString("206", "19") + "${0}\r\n", def.Price); if (def.RatingHunger != 0) { motivesString.AppendFormat(AdStrings[0], def.RatingHunger); } if (def.RatingComfort != 0) { motivesString.AppendFormat(AdStrings[1], def.RatingComfort); } if (def.RatingHygiene != 0) { motivesString.AppendFormat(AdStrings[2], def.RatingHygiene); } if (def.RatingBladder != 0) { motivesString.AppendFormat(AdStrings[3], def.RatingBladder); } if (def.RatingEnergy != 0) { motivesString.AppendFormat(AdStrings[4], def.RatingEnergy); } if (def.RatingFun != 0) { motivesString.AppendFormat(AdStrings[5], def.RatingFun); } if (def.RatingRoom != 0) { motivesString.AppendFormat(AdStrings[6], def.RatingRoom); } var sFlags = def.RatingSkillFlags; for (int i = 0; i < 7; i++) { if ((sFlags & (1 << i)) > 0) motivesString.Append(AdStrings[i+7]); } MotivesText.CurrentText = motivesString.ToString(); ObjectOwnerText.Caption = GameFacade.Strings.GetString("206", "24", new string[] { "You" }); SpecificTabButton.Disabled = !bought; if (entity is VMGameObject) { var objects = entity.MultitileGroup.Objects; ObjectComponent[] objComps = new ObjectComponent[objects.Count]; for (int i=0; i<objects.Count; i++) { objComps[i] = (ObjectComponent)objects[i].WorldUI; } var thumb = World.GetObjectThumb(objComps, entity.MultitileGroup.GetBasePositions(), GameFacade.GraphicsDevice); if (Thumbnail.Texture != null) Thumbnail.Texture.Dispose(); Thumbnail.Texture = thumb; UpdateImagePosition(); } else { if (Thumbnail.Texture != null) Thumbnail.Texture.Dispose(); Thumbnail.Texture = null; } }
public void ChangeObjectLocation(ObjectComponent component, LotTilePos pos) { short tileX = (pos.x < 0) ? (short)0 : pos.TileX; short tileY = (pos.y < 0) ? (short)0 : pos.TileY; sbyte level = pos.Level; Damage.Add(new BlueprintDamage(BlueprintDamageType.OBJECT_MOVE, tileX, tileY, level) { Component = component }); component.blueprint = this; component.TileX = tileX; component.TileY = tileY; component.Level = level; }
private void UpdateThumb() { if (Thumb != null) { Thumb.Dispose(); Thumb = null; } if (TargetOBJ == null) return; var objects = TargetOBJ.Objects; ObjectComponent[] objComps = new ObjectComponent[objects.Count]; for (int i = 0; i < objects.Count; i++) { objComps[i] = (ObjectComponent)objects[i].WorldUI; } Thumb = TempVM.Context.World.GetObjectThumb(objComps, TargetOBJ.GetBasePositions(), GameFacade.GraphicsDevice); }
/** Definition **/ public VMGameObject(GameObject def, ObjectComponent worldUI) : base(def) { this.WorldUI = worldUI; }
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(); }
public void SetInEOD(EODLiveModeOpt options, UIEOD eod) { bool eodPresent = (options != null); bool inEOD = eodPresent && !HideEOD; if (ActiveEOD != null) Remove(ActiveEOD); LastEODConfig = options; ActiveEOD = eod; EODHelpButton.Visible = inEOD; EODCloseButton.Visible = inEOD; EODExpandButton.Visible = false; //todo EODContractButton.Visible = false; EODButton.Visible = eodPresent; bool tall = inEOD && options.Height == EODHeight.Tall; EODPanel.Visible = inEOD && !tall; EODPanelTall.Visible = inEOD && tall; EODButtonLayoutNone.Visible = inEOD && !tall && options.Buttons == 0; EODButtonLayoutNoneTall.Visible = inEOD && tall && options.Buttons == 0; EODButtonLayoutOne.Visible = inEOD && !tall && options.Buttons == 1; EODButtonLayoutOneTall.Visible = inEOD && tall && options.Buttons == 1; EODButtonLayoutTwo.Visible = inEOD && !tall && options.Buttons == 2; EODButtonLayoutTwoTall.Visible = inEOD && tall && options.Buttons == 2; EODSubFullLength.Visible = inEOD && !tall && options.Length == EODLength.Full; EODSubFullLengthTall.Visible = inEOD && tall && options.Length == EODLength.Full; EODSubMediumLength.Visible = inEOD && !tall && options.Length == EODLength.Medium; EODSubMediumLengthTall.Visible = inEOD && tall && options.Length == EODLength.Medium; EODSubShortLength.Visible = inEOD && !tall && options.Length == EODLength.Short; EODSubShortLengthTall.Visible = inEOD && tall && options.Length == EODLength.Short; EODMsgWinLong.Visible = inEOD && options.Tips == EODTextTips.Long; EODMsgWinShort.Visible = inEOD && options.Tips == EODTextTips.Short; EODTimer.Visible = inEOD && options.Timer == EODs.EODTimer.Normal; MsgWinTextEntry.Visible = inEOD && options.Tips != EODTextTips.None; TimerTextEntry.Visible = inEOD && options.Timer != EODs.EODTimer.None; MoodPanelButton.Position = (eodPresent) ? new Vector2(20, 7) : new Vector2(31, 63); if (EODImage.Texture != null) EODImage.Texture.Dispose(); EODImage.Texture = null; if (inEOD) { Add(ActiveEOD); ActiveEOD.Position = new Vector2(120, 0); } if (eodPresent) { Vector2 TopXOffset = new Vector2(); Vector2 MoodButtonOff = new Vector2(); var offHeight = options.Height; if (HideEOD) offHeight = EODHeight.Normal; switch (offHeight) { case EODHeight.Normal: TopXOffset = (Vector2)Script.GetControlProperty("EODActiveOffset"); MoodButtonOff = TopXOffset; break; case EODHeight.Tall: TopXOffset = (Vector2)Script.GetControlProperty("EODActiveOffset"); MoodButtonOff = (Vector2)Script.GetControlProperty("EODActiveOffsetTall"); break; } MoodPanelButton.Position += MoodButtonOff; EODCloseButton.Position = EODCloseBase + TopXOffset; EODHelpButton.Position = EODHelpBase + MoodButtonOff; EODButton.Position = (Vector2)Script.GetControlProperty("EODButtonPosition") + MoodButtonOff; var ava = SelectedAvatar; if (ava != null) { var blockInfo = ava.Thread.BlockingState; if (blockInfo is VMEODPluginThreadState) { var eodInfo = (VMEODPluginThreadState)blockInfo; var entity = LotController.vm.GetObjectById(eodInfo.ObjectID); if (entity is VMGameObject) { var objects = entity.MultitileGroup.Objects; ObjectComponent[] objComps = new ObjectComponent[objects.Count]; for (int i = 0; i < objects.Count; i++) { objComps[i] = (ObjectComponent)objects[i].WorldUI; } var thumb = LotController.World.GetObjectThumb(objComps, entity.MultitileGroup.GetBasePositions(), GameFacade.GraphicsDevice); EODImage.Texture = thumb; } } } if (EODImage.Texture != null) { var imgScale = 22f / Math.Max(EODImage.Texture.Width, EODImage.Texture.Height); EODImage.SetSize(EODImage.Texture.Width * imgScale, EODImage.Texture.Height * imgScale); EODImage.Position = EODButton.Position + new Vector2((EODButton.Texture.Width / 4 - EODImage.Width) / 2, (EODButton.Texture.Height - EODImage.Height) / 2); } } this.Y = (inEOD && options.Height == EODHeight.Tall) ? 41: 61; Divider.Visible = !inEOD; MotiveDisplay.Visible = !inEOD; PersonGrid.Visible = !inEOD; MotivesLabel.Visible = !inEOD; PeopleListBg.Visible = !inEOD; PreviousPageButton.Visible = !inEOD; NextPageButton.Visible = !inEOD; Background.Visible = !inEOD; PersonGrid.Columns = (eodPresent || (GlobalSettings.Default.GraphicsWidth < 1024)) ?4:9; PersonGrid.DrawPage(); PeopleListBg.Texture = (eodPresent && PeopleListEODBackgroundImg != null) ? PeopleListEODBackgroundImg : PeopleListBackgroundImg; PeopleListBg.SetSize(PeopleListBg.Texture.Width, PeopleListBg.Texture.Height); var small800 = (GlobalSettings.Default.GraphicsWidth < 1024) || FSOEnvironment.UIZoomFactor > 1f; NextPageButton.Position = (eodPresent && !small800) ? (Vector2)Script.GetControlProperty("NextPageEODButton") : DefaultNextPagePos; Background.Texture = (eodPresent) ? BackgroundEODImg : DefaultBGImage; Background.SetSize(Background.Texture.Width, Background.Texture.Height); UpdateThumbPosition(); }
/// <summary> /// Gets an object group's thumbnail provided an array of objects. /// </summary> /// <param name="objects">The object components to draw.</param> /// <param name="gd">GraphicsDevice instance.</param> /// <param name="state">WorldState instance.</param> /// <returns>Object's ID if the object was found at the given position.</returns> public Texture2D GetObjectThumb(ObjectComponent[] objects, Vector3[] positions, GraphicsDevice gd) { State._2D.Begin(this.State.Camera); return _2DWorld.GetObjectThumb(objects, positions, gd, State); }
void vm_OnDialog(FSO.SimAntics.Model.VMDialogInfo info) { if (info != null && ((info.DialogID == LastDialogID && info.DialogID != 0 && info.Block) || info.Caller != null && info.Caller != ActiveEntity)) return; //return if same dialog as before, or not ours if ((info == null || info.Block) && BlockingDialog != null) { //cancel current dialog because it's no longer valid UIScreen.RemoveDialog(BlockingDialog); LastDialogID = 0; BlockingDialog = null; } if (info == null) return; //return if we're just clearing a dialog. var options = new UIAlertOptions { Title = info.Title, Message = info.Message, Width = 325 + (int)(info.Message.Length / 3.5f), Alignment = TextAlignment.Left, TextSize = 12 }; var b0Event = (info.Block) ? new ButtonClickDelegate(DialogButton0) : null; var b1Event = (info.Block) ? new ButtonClickDelegate(DialogButton1) : null; var b2Event = (info.Block) ? new ButtonClickDelegate(DialogButton2) : null; VMDialogType type = (info.Operand == null) ? VMDialogType.Message : info.Operand.Type; switch (type) { default: case VMDialogType.Message: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.OK, b0Event, info.Yes) }; break; case VMDialogType.YesNo: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, b0Event, info.Yes), new UIAlertButton(UIAlertButtonType.No, b1Event, info.No), }; break; case VMDialogType.YesNoCancel: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, b0Event, info.Yes), new UIAlertButton(UIAlertButtonType.No, b1Event, info.No), new UIAlertButton(UIAlertButtonType.Cancel, b2Event, info.Cancel), }; break; case VMDialogType.TextEntry: case VMDialogType.NumericEntry: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.OK, b0Event, info.Yes) }; options.TextEntry = true; break; } var alert = UIScreen.ShowAlert(options, true); if (info.Block) { BlockingDialog = alert; LastDialogID = info.DialogID; } var entity = info.Icon; if (entity is VMGameObject) { var objects = entity.MultitileGroup.Objects; ObjectComponent[] objComps = new ObjectComponent[objects.Count]; for (int i = 0; i < objects.Count; i++) { objComps[i] = (ObjectComponent)objects[i].WorldUI; } var thumb = World.GetObjectThumb(objComps, entity.MultitileGroup.GetBasePositions(), GameFacade.GraphicsDevice); alert.SetIcon(thumb, 110, 110); } }
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(); }
public void AddObject(ObjectComponent comp) { Objects.Add(comp); }
public VMMultitileGroup CreateObjectInstance(UInt32 GUID, LotTilePos pos, Direction direction, short MainStackOBJ, short MainParam, bool ghostImage) { VMMultitileGroup group = new VMMultitileGroup(); var objDefinition = FSO.Content.Content.Get().WorldObjects.Get(GUID); if (objDefinition == null) { return null; } var master = objDefinition.OBJ.MasterID; if (master != 0) { group.MultiTile = true; var objd = objDefinition.Resource.List<OBJD>(); for (int i = 0; i < objd.Count; i++) { if (objd[i].MasterID == master && objd[i].SubIndex != -1) //if sub-part of this object, make it! { var subObjDefinition = FSO.Content.Content.Get().WorldObjects.Get(objd[i].GUID); if (subObjDefinition != null) { var worldObject = new ObjectComponent(subObjDefinition); var vmObject = new VMGameObject(subObjDefinition, worldObject); vmObject.GhostImage = ghostImage; vmObject.MasterDefinition = objDefinition.OBJ; vmObject.UseTreeTableOf(objDefinition); vmObject.MainParam = MainParam; vmObject.MainStackOBJ = MainStackOBJ; group.Objects.Add(vmObject); vmObject.MultitileGroup = group; if (!ghostImage) VM.AddEntity(vmObject); } } } group.Init(this); VMPlacementError couldPlace = group.ChangePosition(pos, direction, this).Status; return group; } else { if (objDefinition.OBJ.ObjectType == OBJDType.Person) //person { var vmObject = new VMAvatar(objDefinition); vmObject.MultitileGroup = group; group.Objects.Add(vmObject); vmObject.GhostImage = ghostImage; if (!ghostImage) VM.AddEntity(vmObject); if (UseWorld) Blueprint.AddAvatar((AvatarComponent)vmObject.WorldUI); vmObject.MainParam = MainParam; vmObject.MainStackOBJ = MainStackOBJ; group.Init(this); vmObject.SetPosition(pos, direction, this); return group; } else { var worldObject = new ObjectComponent(objDefinition); var vmObject = new VMGameObject(objDefinition, worldObject); vmObject.MultitileGroup = group; group.Objects.Add(vmObject); vmObject.GhostImage = ghostImage; if (!ghostImage) VM.AddEntity(vmObject); vmObject.MainParam = MainParam; vmObject.MainStackOBJ = MainStackOBJ; group.Init(this); vmObject.SetPosition(pos, direction, this); return group; } } }
public void RemoveObject(ObjectComponent comp) { Objects.Remove(comp); }
void vm_OnDialog(FSO.SimAntics.Model.VMDialogInfo info) { if (info.Caller != null && info.Caller != ActiveEntity) return; var options = new UIAlertOptions { Title = info.Title, Message = info.Message, Width = 325 + (int)(info.Message.Length / 3.5f), Alignment = TextAlignment.Left, TextSize = 12 }; var b0Event = (info.Block) ? new ButtonClickDelegate(DialogButton0) : null; var b1Event = (info.Block) ? new ButtonClickDelegate(DialogButton1) : null; var b2Event = (info.Block) ? new ButtonClickDelegate(DialogButton2) : null; switch (info.Operand.Type) { default: case VMDialogType.Message: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.OK, b0Event, info.Yes) }; break; case VMDialogType.YesNo: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, b0Event, info.Yes), new UIAlertButton(UIAlertButtonType.No, b1Event, info.No), }; break; case VMDialogType.YesNoCancel: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, b0Event, info.Yes), new UIAlertButton(UIAlertButtonType.No, b1Event, info.No), new UIAlertButton(UIAlertButtonType.Cancel, b2Event, info.Cancel), }; break; case VMDialogType.TextEntry: case VMDialogType.NumericEntry: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.OK, b0Event, info.Yes) }; options.TextEntry = true; break; } var alert = UIScreen.ShowAlert(options, true); if (info.Block) BlockingDialog = alert; var entity = info.Icon; if (entity is VMGameObject) { var objects = entity.MultitileGroup.Objects; ObjectComponent[] objComps = new ObjectComponent[objects.Count]; for (int i = 0; i < objects.Count; i++) { objComps[i] = (ObjectComponent)objects[i].WorldUI; } var thumb = World.GetObjectThumb(objComps, entity.MultitileGroup.GetBasePositions(), GameFacade.GraphicsDevice); alert.SetIcon(thumb, 110, 110); } }