void destroyDialog_OnClosed(NewGui.Confirm.Result status, Room room) { if (status == NewGui.Confirm.Result.OKAY) { DesignatedRooms.Remove(room); List <BuildVoxelOrder> existingDesignations = GetDesignationsAssociatedWithRoom(room); BuildRoomOrder buildRoomDes = null; foreach (BuildVoxelOrder des in existingDesignations) { des.Order.VoxelOrders.Remove(des); buildRoomDes = des.Order; } BuildDesignations.Remove(buildRoomDes); room.Destroy(); } }
void destroyDialog_OnClosed(Dialog.ReturnStatus status, Room room) { if (status == Dialog.ReturnStatus.Ok) { DesignatedRooms.Remove(room); List <BuildVoxelOrder> existingDesignations = GetDesignationsAssociatedWithRoom(room); BuildRoomOrder buildRoomDes = null; foreach (BuildVoxelOrder des in existingDesignations) { des.Order.VoxelOrders.Remove(des); buildRoomDes = des.Order; } BuildDesignations.Remove(buildRoomDes); room.Destroy(); } }
private void DeleteVoxels(IEnumerable <VoxelHandle> Voxels) { if (Voxels == null) { return; } foreach (var v in Voxels.Where(v => v.IsValid && !v.IsEmpty)) { if (IsBuildDesignation(v)) { BuildVoxelOrder vox = GetBuildDesignation(v); if (vox != null && vox.Order != null) { vox.Order.Destroy(); if (vox.Order.DisplayWidget != null) { World.Gui.DestroyWidget(vox.Order.DisplayWidget); } BuildDesignations.Remove(vox.Order); DesignatedRooms.Remove(vox.Order.ToBuild); } } else if (IsInRoom(v)) { Room existingRoom = GetMostLikelyRoom(v); if (existingRoom == null) { continue; } World.Gui.ShowModalPopup(new Gui.Widgets.Confirm { Text = "Do you want to destroy this " + existingRoom.RoomData.Name + "?", OnClose = (sender) => destroyDialog_OnClosed((sender as Gui.Widgets.Confirm).DialogResult, existingRoom) }); break; } } }
void destroyDialog_OnClosed(Gui.Widgets.Confirm.Result status, Room room) { if (status == Gui.Widgets.Confirm.Result.OKAY) { DesignatedRooms.Remove(room); List <BuildVoxelOrder> existingDesignations = GetDesignationsAssociatedWithRoom(room); BuildRoomOrder buildRoomDes = null; foreach (BuildVoxelOrder des in existingDesignations) { des.Order.VoxelOrders.Remove(des); buildRoomDes = des.Order; } if (buildRoomDes != null && buildRoomDes.DisplayWidget != null) { World.Gui.DestroyWidget(buildRoomDes.DisplayWidget); } BuildDesignations.Remove(buildRoomDes); room.Destroy(); } }
public void OnVoxelDestroyed(VoxelHandle voxDestroyed) { List <Room> toDestroy = new List <Room>(); lock (DesignatedRooms) { List <Room> toCheck = new List <Room>(); toCheck.AddRange(DesignatedRooms.Where(r => r.IsBuilt)); foreach (Room r in toCheck) { if (r.RemoveVoxel(voxDestroyed)) { toDestroy.Add(r); } } foreach (Room r in toDestroy) { DesignatedRooms.Remove(r); r.Destroy(); } } }
private void BuildNewVoxels(IEnumerable <VoxelHandle> designations) { Room toBuild = RoomLibrary.CreateRoom(Faction, CurrentRoomData.Name, World); var order = new BuildRoomOrder(toBuild, Faction, Faction.World); BuildDesignations.Add(order); DesignatedRooms.Add(toBuild); foreach (var v in designations.Where(v => v.IsValid && !v.IsEmpty)) { order.VoxelOrders.Add(new BuildVoxelOrder(order, order.ToBuild, v)); } order.WorkObjects.AddRange(Fence.CreateFences(World.ComponentManager, ContentPaths.Entities.DwarfObjects.constructiontape, order.VoxelOrders.Select(o => o.Voxel), true)); foreach (var obj in order.WorkObjects) { obj.Manager.RootComponent.AddChild(obj); } World.Master.TaskManager.AddTask(new BuildRoomTask(order)); }
public bool IsInRoom(Voxel v) { Voxel vRef = v; return(DesignatedRooms.Any(r => r.ContainsVoxel(vRef)) || Faction.IsInStockpile(v)); }
public List <Room> FilterRoomsByType(string type) { return(DesignatedRooms.Where(r => r.RoomData.Name == type).ToList()); }
public Room GetRoomThatContainsVoxel(VoxelHandle V) { return(DesignatedRooms.FirstOrDefault(r => r.ContainsVoxel(V))); }
public bool IsInRoom(VoxelHandle v) { return(DesignatedRooms.Any(r => r.ContainsVoxel(v)) || Faction.IsInStockpile(v)); }
private void BuildNewVoxels(IEnumerable <VoxelHandle> designations) { BuildRoomOrder order = null; foreach (var v in designations.Where(v => v.IsValid && !v.IsEmpty)) { if (IsBuildDesignation(v) || IsInRoom(v)) { continue; } // This check should be rendered pointless by the call to Verify made just // before calling this function. var above = VoxelHelpers.GetVoxelAbove(v); if (above.IsValid && !above.IsEmpty) { continue; } if (order == null) { order = GetMostLikelyDesignation(v); } if (order != null && order.ToBuild.RoomData == CurrentRoomData && !order.IsBuilt) { order.VoxelOrders.Add(new BuildVoxelOrder(order, order.ToBuild, v)); } else if (order == null) { if (CurrentRoomData == RoomLibrary.GetData("Stockpile")) { Stockpile toBuild = new Stockpile(Faction, World); DesignatedRooms.Add(toBuild); order = new BuildStockpileOrder(toBuild, this.Faction); order.VoxelOrders.Add(new BuildVoxelOrder(order, toBuild, v)); BuildDesignations.Add(order); } else if (CurrentRoomData == RoomLibrary.GetData("Treasury")) { Treasury toBuild = new Treasury(Faction, World); DesignatedRooms.Add(toBuild); order = new BuildRoomOrder(toBuild, this.Faction, Faction.World); order.VoxelOrders.Add(new BuildVoxelOrder(order, toBuild, v)); BuildDesignations.Add(order); } else { Room toBuild = RoomLibrary.CreateRoom(Faction, CurrentRoomData.Name, designations.ToList(), true, World); DesignatedRooms.Add(toBuild); order = new BuildRoomOrder(toBuild, Faction, Faction.World); order.VoxelOrders.Add(new BuildVoxelOrder(order, toBuild, v)); BuildDesignations.Add(order); } } else if (order.ToBuild.RoomData != CurrentRoomData || order.IsBuilt) { order = null; } } if (order != null) { order.WorkObjects.AddRange(Fence.CreateFences(World.ComponentManager, ContentPaths.Entities.DwarfObjects.constructiontape, order.VoxelOrders.Select(o => o.Voxel), true)); foreach (var obj in order.WorkObjects) { obj.Manager.RootComponent.AddChild(obj); } World.Master.TaskManager.AddTask(new BuildRoomTask(order)); /* * TaskManager.AssignTasks(new List<Task>() * { * new BuildRoomTask(order) * }, Faction.FilterMinionsWithCapability(World.Master.SelectedMinions, GameMaster.ToolMode.BuildZone)); */ } }