Inheritance: Location
コード例 #1
0
        public LocationDetailsComponent(Settlement settlement, int x, int y)
        {
            this.settlement = settlement;
            this.x = x;
            this.y = y;

            this.PerformDrag(0, 0);
        }
コード例 #2
0
        /// <summary>
        /// Puts settlement items on a particular location pertianing to a particular settlement.
        /// </summary>
        /// <param name="capital">Whether it's the capital or not</param>
        /// <param name="settlement">The settlement which it represents</param>
        /// <param name="block">The block making up the center</param>
        private static SettlementItem CreateSettlement(bool capital, Settlement settlement, MapBlock block, int owner)
        {
            //Put an entire group of SettlementItems on it
            MapCoordinate[] settlementCoordinates = new MapCoordinate[10];

            SettlementItem retItem = null;

            settlementCoordinates[7] = new MapCoordinate(block.Tile.Coordinate.X - 1, block.Tile.Coordinate.Y - 1, 0, MapType.GLOBAL);
            settlementCoordinates[8] = new MapCoordinate(block.Tile.Coordinate.X, block.Tile.Coordinate.Y - 1, 0, MapType.GLOBAL);
            settlementCoordinates[9] = new MapCoordinate(block.Tile.Coordinate.X + 1, block.Tile.Coordinate.Y - 1, 0, MapType.GLOBAL);
            settlementCoordinates[4] = new MapCoordinate(block.Tile.Coordinate.X - 1, block.Tile.Coordinate.Y, 0, MapType.GLOBAL);
            settlementCoordinates[5] = new MapCoordinate(block.Tile.Coordinate.X, block.Tile.Coordinate.Y, 0, MapType.GLOBAL);
            settlementCoordinates[6] = new MapCoordinate(block.Tile.Coordinate.X + 1, block.Tile.Coordinate.Y, 0, MapType.GLOBAL);
            settlementCoordinates[1] = new MapCoordinate(block.Tile.Coordinate.X - 1, block.Tile.Coordinate.Y + 1, 0, MapType.GLOBAL);
            settlementCoordinates[2] = new MapCoordinate(block.Tile.Coordinate.X, block.Tile.Coordinate.Y + 1, 0, MapType.GLOBAL);
            settlementCoordinates[3] = new MapCoordinate(block.Tile.Coordinate.X + 1, block.Tile.Coordinate.Y + 1, 0, MapType.GLOBAL);

            //Block the radius around it from colonising
            MapBlock[] regionalBlocks = GetBlocksAroundPoint(block.Tile.Coordinate, HUMAN_COLONY_BLOCKING_RADIUS);

            foreach (MapBlock rblock in regionalBlocks)
            {
                (rblock.Tile as GlobalTile).IsBlockedForColonisation = true;
            }

            //Claim the land around it
            MapBlock[] claimedBlocks = GetBlocksAroundPoint(block.Tile.Coordinate, HUMAN_COLONY_CLAIMING_RADIUS);

            foreach (MapBlock rblock in claimedBlocks)
            {
                //This is a disputed region. For now let's not allow creep.
                //Later this might be cause for war
                if (!(rblock.Tile as GlobalTile).Owner.HasValue)
                {
                    (rblock.Tile as GlobalTile).Owner = owner;
                }
            }

            for (int corner = 1; corner < 10; corner++)
            {
                var cornerBlock = GameState.GlobalMap.GetBlockAtCoordinate(settlementCoordinates[corner]);

                //Cut any forests down
                switch ((cornerBlock.Tile as GlobalTile).Biome)
                {
                    case GlobalBiome.DENSE_FOREST:
                        (cornerBlock.Tile as GlobalTile).Biome = GlobalBiome.GRASSLAND;
                        break;
                    case GlobalBiome.WOODLAND:
                        (cornerBlock.Tile as GlobalTile).Biome = GlobalBiome.GRASSLAND;
                        break;
                    case GlobalBiome.POLAR_FOREST:
                        (cornerBlock.Tile as GlobalTile).Biome = GlobalBiome.POLAR_DESERT;
                        break;
                }

                var settlementItem = new SettlementItem()
                {
                    Coordinate = settlementCoordinates[corner],
                    IsCapital = capital,
                    MayContainItems = true,
                    SettlementCorner = corner,
                    SettlementSize = settlement.SettlementSize,
                    Description = (capital ? "the capital of " + settlement.Name : "the settlement of " + settlement.Name) + " owned by " + settlement.Civilisation.Name,
                    Name = settlement.Name,
                    Settlement = settlement,
                    OwnerID = owner
                };

                GameState.GlobalMap.GetBlockAtCoordinate(settlementCoordinates[corner])
                .ForcePutItemOnBlock(settlementItem);

                if (settlementItem.SettlementCorner == 5) //center
                {
                    retItem = settlementItem;
                }
            }

               return retItem;
        }