// Generate houses based on noise height value private void GenerateHouses() { int aboveGroundPlaceholderY = 10; int checkForEveryCoordinates = 50; float minNoiseHeight = 0.05f; float[,] noiseMap = GenerateCityNoiseMap(this.mapWidth, this.mapHeight, this.offsets); for (int y = 0; y < mapHeight; y += checkForEveryCoordinates) { for (int x = 0; x < mapWidth; x += checkForEveryCoordinates) { // If the current location is within the noisemap position if (noiseMap[x, y] <= minNoiseHeight) { Vector3 position = new Vector3(x + this.offsets.x, aboveGroundPlaceholderY, y + this.offsets.y); // Get random building index from thhe list of buildings GameObject building = buildingGenerator.Generate(position); building.SetActive(false); // Calculate bounds and calculate the houseposition for the center of the house, also get the correct Y value for the building Bounds houseBounds = CalculateBounds(building); Vector3 housePosition = PositionCorrection(position); Vector3 tilePosition = new Vector3(this.offsets.x, 0, this.offsets.y); // Get tile and check if it exists before making a house Tile tile = WorldBuilder.GetTile(tilePosition); // Check if valid position if (tile != null && ValidHousePosition(housePosition, houseBounds)) { building.transform.position = housePosition; building.SetActive(true); // Turn house with consistent random numbers int xRandomIndex = terrainGenerator.RandomNumbers[(x + 1) * (y + 1) * Math.Abs((int)this.offsets.x) % terrainGenerator.RandomNumbers.Length]; int zRandomIndex = terrainGenerator.RandomNumbers[(x + 1) * (y + 1) * Math.Abs((int)this.offsets.y) % (terrainGenerator.RandomNumbers.Length - 1)]; Vector3 lookAtPosition = new Vector3(xRandomIndex, building.transform.position.y, zRandomIndex); building.transform.LookAt(lookAtPosition); // Add house to tile tile.AddBuilding(building); } else { Destroy(building); } } } } }
public static bool AddBuilding(Tile givenTile, string buildingType, Character builder) { Building newBuilding; switch (buildingType) { case "Farm": newBuilding = new Farm(); break; case "LumberMill": newBuilding = new LumberMill(); break; case "City": newBuilding = new City(); break; case "Road": newBuilding = new Road(); break; default: newBuilding = null; throw new KeyNotFoundException("The building type: " + buildingType + " does not exist and an attempt was made to create it"); } if (newBuilding != null && builder.RulesDomain(givenTile.GetDomain())) { givenTile.AddBuilding(newBuilding); // DomainDictionary.GetDomain(givenTile.GetDomain()).AddBuilding(givenTile.GetPosition()); return(true); } else { Debug.Log("You can't build " + newBuilding + " at " + givenTile.GetDomain()); return(false); } }
public void AddBuilding(Tile givenTile, Character givenCharacter, string buildingType) { Building newBuilding; switch (buildingType) { case "Farm": newBuilding = new Farm(); break; case "LumberMill": newBuilding = new LumberMill(); break; case "City": newBuilding = new City(); break; case "Road": newBuilding = new Road(); break; default: newBuilding = null; Debug.Log("Building doesn't exist"); break; } if (newBuilding != null && givenCharacter.RulesDomain(givenTile.GetDomain())) { givenTile.AddBuilding(newBuilding); throw new System.NotImplementedException(); //DomainDictionary.GetDomain(givenTile.GetDomain()).AddBuilding(givenTile.GetPosition()); } else { Debug.Log("You can't build " + newBuilding + " at " + givenTile.GetDomain()); } }
public void AddComponentOnTile(Tile tile) { GameObject b = Instantiate(buildingManager.GetPrefab(currentBuilding)); Building building = b.GetComponent <Building>(); Tile t2 = GetTile(FindTile(tile)); Vector2 v1 = FindTile(currentTile); Vector2 v2 = FindTile(tile); Vector2 v = v1 - v2; switch (currentBuilding) { case BUILDING_TYPE.CABLE: if (v == new Vector2(1, 0)) { tile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, false, false); } if (v == new Vector2(0, -1)) { tile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, false, false); } if (v == new Vector2(-1, 0)) { tile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, false, false); } if (v == new Vector2(0, 1)) { tile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, false, false); } break; case BUILDING_TYPE.WIFI: if (v == new Vector2(1, 1)) { tile.AddBuilding(building, DIRECTION.TOP_RIGHT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.BOTTOM_LEFT, POSITION_TYPE.CENTER, false, false); } if (v == new Vector2(1, -1)) { tile.AddBuilding(building, DIRECTION.BOTTOM_RIGHT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.TOP_LEFT, POSITION_TYPE.CENTER, false, false); } if (v == new Vector2(-1, -1)) { tile.AddBuilding(building, DIRECTION.BOTTOM_LEFT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.TOP_RIGHT, POSITION_TYPE.CENTER, false, false); } if (v == new Vector2(-1, 1)) { tile.AddBuilding(building, DIRECTION.TOP_LEFT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.BOTTOM_RIGHT, POSITION_TYPE.CENTER, false, false); } break; case BUILDING_TYPE.LASER: if (v.x > 1 && v.y == 0) { tile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, false, false); } if (v.x == 0 && v.y < -1) { tile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, false, false); } if (v.x < -1 && v.y == 0) { tile.AddBuilding(building, DIRECTION.LEFT, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.RIGHT, POSITION_TYPE.CENTER, false, false); } if (v.x == 0 && v.y > 1) { tile.AddBuilding(building, DIRECTION.TOP, POSITION_TYPE.CENTER, true, false); currentTile.AddBuilding(building, DIRECTION.BOTTOM, POSITION_TYPE.CENTER, false, false); } break; case BUILDING_TYPE.SATELLITE: tile.AddBuilding(building, DIRECTION.CENTER, POSITION_TYPE.LEFT, true, false); currentTile.AddBuilding(building, DIRECTION.CENTER, POSITION_TYPE.RIGHT, false, false); break; } }