Exemple #1
0
        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);
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #7
0
        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);
            }
        }