Exemplo n.º 1
0
        public Room GetNearestRoomOfType(string typeName, Vector3 position)
        {
            List <Room> rooms           = GetRooms();
            Room        desiredRoom     = null;
            float       nearestDistance = float.MaxValue;

            foreach (Room room in rooms)
            {
                if (room.RoomData != RoomLibrary.GetData(typeName))
                {
                    continue;
                }
                float dist =
                    (room.GetNearestVoxel(position).Position - position).LengthSquared();

                if (dist < nearestDistance)
                {
                    nearestDistance = dist;
                    desiredRoom     = room;
                }
            }


            return(desiredRoom);
        }
Exemplo n.º 2
0
 public RoomBuilder(Faction faction)
 {
     DesignatedRooms   = new List <Room>();
     BuildDesignations = new List <BuildRoomOrder>();
     CurrentRoomData   = RoomLibrary.GetData("BedRoom");
     Faction           = faction;
 }
Exemplo n.º 3
0
 public Stockpile(Faction faction, WorldManager world) :
     base(false, new List <Voxel>(), RoomLibrary.GetData(StockpileName), world)
 {
     Boxes           = new List <Body>();
     ReplacementType = VoxelLibrary.GetVoxelType("Stockpile");
     faction.Stockpiles.Add(this);
     Faction = faction;
 }
Exemplo n.º 4
0
 public RoomBuilder(Faction faction, WorldManager world)
 {
     World             = world;
     DesignatedRooms   = new List <Room>();
     BuildDesignations = new List <BuildRoomOrder>();
     CurrentRoomData   = RoomLibrary.GetData("BedRoom");
     Faction           = faction;
 }
Exemplo n.º 5
0
 public Treasury(Faction faction, IEnumerable <VoxelHandle> voxels, WorldManager world) :
     base(voxels, RoomLibrary.GetData(TreasuryName), world, faction)
 {
     Coins           = new List <Body>();
     ReplacementType = VoxelLibrary.GetVoxelType("Blue Tile");
     faction.Treasurys.Add(this);
     Faction = faction;
 }
Exemplo n.º 6
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));
            }
        }
Exemplo n.º 7
0
        public void SetupBuildRoomTab()
        {
            BuildRoomTab = new BuildTab()
            {
                Tab = Selector.AddTab("Rooms")
            };

            CreateBuildTab(BuildRoomTab);
            BuildRoomTab.BuildButton.OnClicked += BuildRoomButton_OnClicked;
            List <string> roomTypes = RoomLibrary.GetRoomTypes().ToList();

            int        numRooms   = roomTypes.Count();
            int        numColumns = 1;
            GridLayout layout     = new GridLayout(GUI, BuildRoomTab.Scroller, numRooms, numColumns)
            {
                LocalBounds    = new Rectangle(0, 0, 720, 40 * numRooms),
                EdgePadding    = 0,
                WidthSizeMode  = SizeMode.Fit,
                HeightSizeMode = SizeMode.Fixed
            };

            int i = 0;

            foreach (string roomType in roomTypes)
            {
                RoomData room = RoomLibrary.GetData(roomType);

                GridLayout roomLayout = new GridLayout(GUI, layout, 1, 3)
                {
                    WidthSizeMode  = SizeMode.Fixed,
                    HeightSizeMode = SizeMode.Fixed,
                    EdgePadding    = 0
                };

                roomLayout.OnClicked += () => RoomTabOnClicked(room);
                int i1 = i;
                roomLayout.OnHover += () => HoverItem(layout, i1);

                layout.SetComponentPosition(roomLayout, 0, i, 1, 1);

                ImagePanel icon = new ImagePanel(GUI, roomLayout, room.Icon)
                {
                    KeepAspectRatio = true
                };
                roomLayout.SetComponentPosition(icon, 0, 0, 1, 1);

                Label description = new Label(GUI, roomLayout, room.Name, GUI.SmallFont)
                {
                    ToolTip = room.Description
                };
                roomLayout.SetComponentPosition(description, 1, 0, 1, 1);
                i++;
            }
            layout.UpdateSizes();
        }
Exemplo n.º 8
0
 public Stockpile(Faction faction, WorldManager world) :
     base(false, new List <VoxelHandle>(), RoomLibrary.GetData(StockpileName), world, faction)
 {
     Boxes           = new List <Body>();
     ReplacementType = VoxelLibrary.GetVoxelType("Stockpile");
     faction.Stockpiles.Add(this);
     Faction            = faction;
     BlacklistResources = new List <Resource.ResourceTags>()
     {
         Resource.ResourceTags.Corpse
     };
 }
Exemplo n.º 9
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));
                 */
            }
        }
Exemplo n.º 10
0
 public Stockpile(string id, ChunkManager chunk) :
     base(false, new List <Voxel>(), RoomLibrary.GetData(StockpileName), PlayState.ChunkManager)
 {
     Boxes           = new List <Body>();
     ReplacementType = VoxelLibrary.GetVoxelType("Stockpile");
 }