Beispiel #1
0
 public override void OnBuilt()
 {
     foreach (var fence in  Fence.CreateFences(World.ComponentManager, ContentPaths.Entities.DwarfObjects.fence, Voxels, false))
     {
         AddBody(fence);
         fence.Manager.RootComponent.AddChild(fence);
     }
 }
        private DestroyZoneTool DestroyZoneTool; // I should probably be fired for this.

        public override void OnVoxelsSelected(List <VoxelHandle> voxels, InputManager.MouseButton button)
        {
            if (button == InputManager.MouseButton.Left)
            {
                foreach (BuildZoneOrder order in World.PersistentData.BuildDesignations)
                {
                    order.SetTint(Color.White);
                }

                foreach (var room in World.EnumerateZones())
                {
                    room.SetTint(Color.White);
                }

                if (CurrentZoneType == null)
                {
                    return;
                }

                if (button == InputManager.MouseButton.Left)
                {
                    if (CurrentZoneType.CanBuildHere(voxels, World))
                    {
                        if (Library.CreateZone(CurrentZoneType.Name, World).HasValue(out var toBuild))
                        {
                            var order = new BuildZoneOrder(toBuild, World);
                            World.PersistentData.BuildDesignations.Add(order);
                            World.PersistentData.Zones.Add(toBuild);

                            foreach (var v in voxels.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.TaskManager.AddTask(new BuildZoneTask(order));
                        }
                    }
                }
            }
            else
            {
                DestroyZoneTool.OnVoxelsSelected(voxels, button);
            }
        }
Beispiel #3
0
 public override void OnBuilt()
 {
     foreach (var body in ZoneBodies)
     {
         body.GetRoot().Delete();
     }
     ZoneBodies.Clear();
     foreach (
         var fence in
         Fence.CreateFences(World.ComponentManager, ContentPaths.Entities.DwarfObjects.fence, Voxels,
                            false))
     {
         AddBody(fence);
         fence.Manager.RootComponent.AddChild(fence);
     }
 }
Beispiel #4
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));
        }
Beispiel #5
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));
                 */
            }
        }