Exemple #1
0
        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;
                }
            }
        }
Exemple #2
0
        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;
                }
            }
        }
Exemple #3
0
        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));
            }
        }
Exemple #4
0
        public void CheckRemovals()
        {
            List <BuildRoomOrder> toRemove = BuildDesignations.Where(build => build.IsBuilt).ToList();

            foreach (BuildRoomOrder build in toRemove)
            {
                BuildDesignations.Remove(build);
            }
        }
Exemple #5
0
        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);
            }
        }
Exemple #6
0
        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();
            }
        }
Exemple #7
0
        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();
            }
        }
Exemple #8
0
        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;
                }
            }
        }
Exemple #9
0
        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();
            }
        }
Exemple #10
0
        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));
        }
Exemple #11
0
 public bool IsBuildDesignation(Room r)
 {
     return(BuildDesignations.Any(room => room.ToBuild == r));
 }
Exemple #12
0
 public bool IsBuildDesignation(Voxel v)
 {
     return(BuildDesignations.SelectMany(room => room.VoxelOrders).Any(buildDesignation => buildDesignation.Voxel.Equals(v)));
 }
Exemple #13
0
 public BuildVoxelOrder GetBuildDesignation(Voxel v)
 {
     return(BuildDesignations.SelectMany(room => room.VoxelOrders).FirstOrDefault(buildDesignation => (buildDesignation.Voxel.Position - v.Position).LengthSquared() < 0.1f));
 }
Exemple #14
0
 public BuildVoxelOrder GetBuildDesignation(VoxelHandle v)
 {
     return(BuildDesignations.SelectMany(room => room.VoxelOrders).FirstOrDefault(buildDesignation => buildDesignation.Voxel == v));
 }
Exemple #15
0
 public bool IsBuildDesignation(VoxelHandle v)
 {
     return(BuildDesignations.SelectMany(room => room.VoxelOrders).Any(buildDesignation => buildDesignation.Voxel == v));
 }
Exemple #16
0
        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));
                 */
            }
        }