private void DeleteVoxels(IEnumerable <Voxel> refs) { foreach (Voxel v in refs.Select(r => r).Where(v => !v.IsEmpty)) { if (IsBuildDesignation(v)) { BuildVoxelOrder vox = GetBuildDesignation(v); vox.ToBuild.Destroy(); BuildDesignations.Remove(vox.Order); } else if (IsInRoom(v)) { Room existingRoom = GetMostLikelyRoom(v); if (existingRoom == null) { continue; } World.NewGui.ShowDialog(new NewGui.Confirm { Text = "Do you want to destroy this" + existingRoom.RoomData.Name + "?", OnClose = (sender) => destroyDialog_OnClosed((sender as NewGui.Confirm).DialogResult, existingRoom) }); break; } } }
private void DeleteVoxels(IEnumerable <Voxel> refs) { foreach (Voxel v in refs.Select(r => r).Where(v => !v.IsEmpty)) { if (IsBuildDesignation(v)) { BuildVoxelOrder vox = GetBuildDesignation(v); vox.ToBuild.Destroy(); BuildDesignations.Remove(vox.Order); } else if (IsInRoom(v)) { Room existingRoom = GetMostLikelyRoom(v); if (existingRoom == null) { continue; } Dialog destroyDialog = Dialog.Popup(PlayState.GUI, "Destroy room?", "Do you want to destroy this " + existingRoom.RoomData.Name + "?", Dialog.ButtonType.OkAndCancel); destroyDialog.OnClosed += (status) => destroyDialog_OnClosed(status, existingRoom); break; } } }
private void BuildNewVoxels(IEnumerable <Voxel> refs) { BuildRoomOrder order = null; IEnumerable <Voxel> designations = refs as IList <Voxel> ?? refs.ToList(); IEnumerable <Voxel> nonEmpty = designations.Select(r => r).Where(v => !v.IsEmpty); foreach (Voxel v in nonEmpty) { if (IsBuildDesignation(v) || IsInRoom(v)) { continue; } if (!v.GetVoxelAbove().IsEmpty) { continue; } if (order == null) { order = GetMostLikelyDesignation(v); } if (order != null) { order.VoxelOrders.Add(new BuildVoxelOrder(order, order.ToBuild, v)); } else { if (CurrentRoomData != RoomLibrary.GetData("Stockpile")) { 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 { 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); } } } if (order != null) { order.CreateFences(World.ComponentManager); TaskManager.AssignTasks(new List <Task>() { new BuildRoomTask(order) }, Faction.FilterMinionsWithCapability(World.Master.SelectedMinions, GameMaster.ToolMode.Build)); } }
public void CheckRemovals() { List <BuildRoomOrder> toRemove = BuildDesignations.Where(build => build.IsBuilt).ToList(); foreach (BuildRoomOrder build in toRemove) { BuildDesignations.Remove(build); } }
public void CheckRemovals() { List <BuildRoomOrder> toRemove = BuildDesignations.Where(build => build.IsBuilt).ToList(); foreach (BuildRoomOrder build in toRemove) { if (build.DisplayWidget != null) { World.Gui.DestroyWidget(build.DisplayWidget); } BuildDesignations.Remove(build); } }
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(); } }
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(); } }
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(); } }
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 IsBuildDesignation(Room r) { return(BuildDesignations.Any(room => room.ToBuild == r)); }
public bool IsBuildDesignation(Voxel v) { return(BuildDesignations.SelectMany(room => room.VoxelOrders).Any(buildDesignation => buildDesignation.Voxel.Equals(v))); }
public BuildVoxelOrder GetBuildDesignation(Voxel v) { return(BuildDesignations.SelectMany(room => room.VoxelOrders).FirstOrDefault(buildDesignation => (buildDesignation.Voxel.Position - v.Position).LengthSquared() < 0.1f)); }
public BuildVoxelOrder GetBuildDesignation(VoxelHandle v) { return(BuildDesignations.SelectMany(room => room.VoxelOrders).FirstOrDefault(buildDesignation => buildDesignation.Voxel == v)); }
public bool IsBuildDesignation(VoxelHandle v) { return(BuildDesignations.SelectMany(room => room.VoxelOrders).Any(buildDesignation => buildDesignation.Voxel == 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)); */ } }