private Building ConstructBuilding(Transform root, BuildingConfig buildingConfig, bool isBuildingIn) { var floorScheme = BuildingsDatabase.GetRandomFloorScheme(); var segmentSize = new SegmentSize() { Width = floorScheme.segmentWidth, Height = floorScheme.segmentHeight, Depth = floorScheme.segmentDepth }; var building = new Building(ItemsSpawner, segmentSize, buildingConfig) { root = root, isBuildingIn = isBuildingIn }; Vector3 position = root.position; Quaternion rotation = root.rotation; GenerateFloor(ref building, floorScheme, root, position, root.rotation, 0, FloorType.GroundFloor); int index = 1; for (; index <= buildingConfig.buildingFloorsCount; index++) { position += new Vector3(0f, floorScheme.segmentHeight, 0f); GenerateFloor(ref building, floorScheme, root, position, root.rotation, index, FloorType.MiddleFloor); } position += new Vector3(0f, floorScheme.segmentHeight, 0f); var roofScheme = BuildingsDatabase.GetRandomRoofScheme(); GenerateFloor(ref building, roofScheme, root, position, root.rotation, index, FloorType.Roof); return(building); }
private void SetupBuildingOut(bool useOldItems = false) { if (buildingsGenerator == null) { Debug.Log("building generator == null"); return; } if (placeBuildingOut != null) { if (currentBuildingConfig == null) { currentBuildingConfig = buildingConfigurator.BuildingParameterGenerator(currentBuildingId); } var maxFreeSegments = (currentBuildingConfig.floorSegmentsCount - 1) * currentBuildingConfig.buildingFloorsCount; if (!useOldItems) { var minItemsCount = (int)(currentBuildingConfig.minItemsCountToMaxFreeSegmentsRatio * maxFreeSegments); var itemsCount = UnityEngine.Random.Range(minItemsCount, maxFreeSegments); var items = buildingsGenerator.ItemsSpawner.ItemsDatabase.GetRandomItems(itemsCount); buildingOut = buildingsGenerator.GenerateBuilding(placeBuildingOut.transform, currentBuildingConfig, false, items); } else { buildingOut = buildingsGenerator.GenerateBuildingBasedOnOldOne(placeBuildingOut.transform, currentBuildingConfig, itemsFromLastInBuilding); } buildingFloorNumber = currentBuildingConfig.buildingFloorsCount; } }
public Building(ItemsSpawner itemsSpawner, SegmentSize segmentSize, BuildingConfig config) { Floors = new Dictionary <int, Floor>(); Stairs = new Dictionary <int, DoorPortal>(); //FloorSize = floorSize; this.itemsSpawner = itemsSpawner; SegmentSize = segmentSize; Config = config; }
public Building GenerateBuildingBasedOnOldOne(Transform root, BuildingConfig buildingConfig, Dictionary <int, List <ItemScheme> > oldItems) { var building = ConstructBuilding(root, buildingConfig, isBuildingIn: false); if (oldItems != null && oldItems.Count > 0) { building.SpawnItemsInside(oldItems); } Debug.Log($"Generated building COPY"); return(building); }
public Building GenerateBuilding(Transform root, BuildingConfig buildingConfig, bool isBuildingIn, List <ItemScheme> items = null) { var building = ConstructBuilding(root, buildingConfig, isBuildingIn); if (items != null) { building.SpawnItemsInside(items); } Debug.Log($"Generated building with {buildingConfig.floorSegmentsCount} segments width, {buildingConfig.buildingFloorsCount} floors and stairs at each {buildingConfig.stairsSegmentIndex} floor segment"); return(building); }
public BuildingConfig BuildingParameterGenerator(int buildingId) { var buildingConfig = new BuildingConfig(); buildingConfig.floorSegmentsCount = Random.Range(5, 8); buildingConfig.stairsSegmentIndex = Random.Range(1, buildingConfig.floorSegmentsCount - 1); buildingConfig.buildingFloorsCount = Random.Range(2, 5); buildingConfig.minItemsCountToMaxFreeSegmentsRatio = 0.8f; buildingConfig.wallsColor = Random.ColorHSV(0, 1, 0, 1, 0.65f, 0.95f); return(buildingConfig); }
private void SetupBuildingIn() { if (buildingsGenerator == null) { Debug.Log("building generator == null"); return; } if (placeBuildingIn != null) { currentBuildingConfig = buildingConfigurator.BuildingParameterGenerator(currentBuildingId); buildingIn = buildingsGenerator.GenerateBuilding(placeBuildingIn.transform, currentBuildingConfig, true); } }