Beispiel #1
0
        public bool IsPurchasable(ushort x, ushort y)
        {
            //Cant buy lots on the very edge
            if (!MapCoordinates.InBounds(x, y, 1))
            {
                //Out of bounds!
                return(false);
            }

            //Cant build on water
            var terrain = _Map.GetTerrain(x, y);

            if (terrain == TerrainType.WATER)
            {
                return(false);
            }

            x += 1;
            //Check elevation is ok, get all 4 corners and then decide
            var tl      = _Map.GetElevation(x, y);
            var trPoint = MapCoordinates.Offset(x, y, 1, 0);
            var tr      = _Map.GetElevation(trPoint.X, trPoint.Y);
            var blPoint = MapCoordinates.Offset(x, y, 0, 1);
            var bl      = _Map.GetElevation(blPoint.X, blPoint.Y);
            var brPoint = MapCoordinates.Offset(x, y, 1, 1);
            var br      = _Map.GetElevation(brPoint.X, brPoint.Y);

            int max = Math.Max(tl, Math.Max(tr, Math.Max(bl, br)));
            int min = Math.Min(tl, Math.Min(tr, Math.Min(bl, br)));

            //10 is threshold for now
            return(max - min < 10);
        }
Beispiel #2
0
        public int GetSlope(ushort x, ushort y)
        {
            x += 1;
            //Check elevation is ok, get all 4 corners and then decide
            var tl      = _Map.GetElevation(x, y);
            var trPoint = MapCoordinates.Offset(x, y, 1, 0);
            var tr      = _Map.GetElevation(trPoint.X, trPoint.Y);
            var blPoint = MapCoordinates.Offset(x, y, 0, 1);
            var bl      = _Map.GetElevation(blPoint.X, blPoint.Y);
            var brPoint = MapCoordinates.Offset(x, y, 1, 1);
            var br      = _Map.GetElevation(brPoint.X, brPoint.Y);

            int max = Math.Max(tl, Math.Max(tr, Math.Max(bl, br)));
            int min = Math.Min(tl, Math.Min(tr, Math.Min(bl, br)));

            return(max - min);
        }
Beispiel #3
0
        public int GetPrice(CityMap map, ushort x, ushort y)
        {
            //TODO: Work on this scheme
            var terrain   = map.GetTerrain(x, y);
            var basePrice = 3000;

            switch (terrain)
            {
            case TerrainType.GRASS:
                basePrice += 1000;
                break;

            case TerrainType.SAND:
            case TerrainType.SNOW:
                basePrice += 2000;
                break;
            }

            var price = basePrice;

            //Altitude increase price
            var elevation = map.GetElevation(x, y);

            //$19 for each elevation increment
            price += (19 * elevation);

            //+2500 for every water edge
            var leftLocation = MapCoordinates.Offset(new MapCoordinate(x, y), -1, 0);
            var leftTerrain  = map.GetTerrain(leftLocation.X, leftLocation.Y);

            var rightLocation = MapCoordinates.Offset(new MapCoordinate(x, y), 1, 0);
            var rightTerrain  = map.GetTerrain(rightLocation.X, rightLocation.Y);

            var topLocation = MapCoordinates.Offset(new MapCoordinate(x, y), 0, -1);
            var topTerrain  = map.GetTerrain(topLocation.X, topLocation.Y);

            var bottomLocation = MapCoordinates.Offset(new MapCoordinate(x, y), 0, 1);
            var bottomTerrain  = map.GetTerrain(bottomLocation.X, bottomLocation.Y);

            if (leftTerrain == TerrainType.WATER)
            {
                price += 5000;
            }
            if (rightTerrain == TerrainType.WATER)
            {
                price += 5000;
            }
            if (topTerrain == TerrainType.WATER)
            {
                price += 5000;
            }
            if (bottomTerrain == TerrainType.WATER)
            {
                price += 5000;
            }

            //Extra for an island
            if (bottomTerrain == TerrainType.WATER && topTerrain == TerrainType.WATER &&
                leftTerrain == TerrainType.WATER && rightTerrain == TerrainType.WATER)
            {
                price += 10000;
            }

            return(price);
        }