private bool CanPlaceBuilding(IslandBuilding building, Vector2Int coord) { //TODO: sea level return(building.TryPlace(coord).All(x => //Tiles exists surface.PointMap.ContainsKey(x) && //No other structure overlapping (structureMap.ContainsKey(x) == false) )); }
private void CreateBuildingObject(IslandBuilding prefab, NavigablePoint point) { var building = Instantiate(prefab); building.transform.SetParent(transform); building.transform.localScale = building.transform.localScale * surface.CubeSize; building.transform.position = new Vector3(point.Position.x, Mathf.Max(surface.seaLevel, point.Position.y), point.Position.z); building.Place(point.GridPosition); }
private void PopulateBuildings(List <IslandPath> paths) { int buildingCount = (int)(Random.value * maxBuildingPerIteration); for (int j = 0; j < buildingCount; j++) { IslandBuilding b = buildingPrefabs.Random(); List <NavigablePoint> possiblePoints = PathAdjacentTiles(paths).Random(possibleBuildingSitesFactor); foreach (var pp in possiblePoints) { if (CanPlaceBuilding(b, pp.GridPosition)) { CreateBuildingObject(b, pp); } } } }