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); }
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); }
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); }