Example #1
0
    void updateInfo(State_Construction state)
    {
        int            i = 0;
        BuildingParams buildingParams = null;

        if (state.Building is ActiveBuilding activeBuilding)
        {
            buildingParams = activeBuilding.AbParams;
        }
        else if (state.Building is PassiveBuilding passiveBuilding)
        {
            buildingParams = passiveBuilding.PBParams;
        }

        for (; i < buildingParams.ConstructRecources.Count; i++)
        {
            if (state.RecourcesLeftToDeliver.ContainsKey(buildingParams.ConstructRecources[i].Type))
            {
                images[i].SetActive(true);
                images[i].GetComponent <Image>().sprite        = recourceIcons.Sprites[(int)buildingParams.ConstructRecources[i].Type];
                images[i].GetComponentInChildren <Text>().text = state.RecourcesLeftToDeliver[buildingParams.ConstructRecources[i].Type].ToString();
            }
        }
        for (; i < 4; i++)
        {
            images[i].SetActive(false);
        }
    }
    public void GenerateWindowsParams(BuildingParams buildingParams, BaseParams lastBaseParams)
    {
        windowParams = new List <WindowParams>();
        OpeningsGenerator openingsGenerator = new OpeningsGenerator();

        openingsGenerator.GenerateAtticOpenings(lastBaseParams, this, ref windowParams, buildingParams.rowSameLit);
    }
Example #3
0
    public void Test_BaseSizeRightFirewall()
    {
        BuildingParams buildingParams = new BuildingParams();

        buildingParams.leftFirewall  = false;
        buildingParams.rightFirewall = true;
        buildingParams.backFirewall  = false;

        Vector3    lastFloorSize = new Vector3(2.5f, 2f, 2f);
        BaseParams baseParams    = new BaseParams(lastFloorSize, buildingParams, 1, OpeningStyle.ARCH);
        Vector3    addTolastSize = new Vector3(1, 1, 1);

        Vector3 expextedMaxSize = lastFloorSize + new Vector3(addTolastSize.x / 2, addTolastSize.y, addTolastSize.z);
        Vector3 expextedMinSize = lastFloorSize;


        Vector3 size = baseParams.GetFinalSize(lastFloorSize, addTolastSize);

        Assert.That(size.x, Is.GreaterThanOrEqualTo(expextedMinSize.x));
        Assert.That(size.x, Is.LessThanOrEqualTo(expextedMaxSize.x));

        Assert.That(size.y, Is.GreaterThanOrEqualTo(expextedMinSize.y));
        Assert.That(size.y, Is.LessThanOrEqualTo(expextedMaxSize.y));

        Assert.That(size.z, Is.GreaterThanOrEqualTo(expextedMinSize.z));
        Assert.That(size.z, Is.LessThanOrEqualTo(expextedMaxSize.z));
    }
    public Foundation(Material material, Transform parent, FoundationParams _foundationParams,
                      BuildingParams buildingParams)
    {
        foundationParams = _foundationParams;

        CreateBase(material, parent, buildingParams);
    }
    void GenerateSegmentParams(BuildingParams buildingParams)
    {
        foundationParams = new FoundationParams(buildingParams);

        for (int i = 0; i < floorCount; i++)
        {
            if (i == 0)
            {
                baseParams[i] = new BaseParams(foundationParams.finalSize, buildingParams, GetOpeningStyle(buildingParams), GetOpeningStyle(buildingParams));
                baseParams[i].GenerateWindowsAndDoorParams(buildingParams);
            }
            else
            {
                //2 auktas nustato visu sekanciu aukstu langu isvaizda, pirmas aukstas turi savo
                baseParams[i] = new BaseParams(baseParams[i - 1].finalSize, buildingParams, i, i >= 2 ? baseParams[i - 1].windowStyle : GetOpeningStyle(buildingParams));
                if (i == 1)
                {
                    baseParams[i].GenerateWindowsParams(buildingParams);
                }
                else
                {
                    baseParams[i].GenerateWindowsParams(buildingParams, baseParams[i - 1].windowParams[0].finalSize);
                }
            }
        }

        atticParams = new AtticParams(baseParams[floorCount - 1].finalSize);
        atticParams.GenerateWindowsParams(buildingParams, baseParams[floorCount - 1]);

        roofParams    = new RoofParams(atticParams.finalSize, baseParams[floorCount - 1].finalSize);
        chimneyParams = new ChimneyParams(roofParams, baseParams[floorCount - 1]);
    }
    void GenerateSegments(BuildingParams buildingParams, Material material, Transform parent)
    {
        foundation = new Foundation(material, parent, foundationParams, buildingParams);

        for (int i = 0; i < floorCount; i++)
        {
            if (i == 0)
            {
                bases[i] = new Base(ref baseParams[i], foundation.obj.transform, material, buildingParams, null);
                bases[i].GenerateDoor(baseParams[i].doorParams, material);
            }
            else
            {
                bases[i] = new Base(ref baseParams[i], bases[i - 1].obj.transform, material, buildingParams, baseParams[i - 1]);
            }


            bases[i].GenerateWindows(baseParams[i], material);
        }

        attic = new Attic(material, atticParams, bases[floorCount - 1].obj.transform);
        attic.GenerateWindows(material);

        roof = new Roof(material, baseParams[floorCount - 1], roofParams, bases[floorCount - 1].obj.transform);

        chimney = new Chimney(chimneyParams, material, roof.obj.transform);
    }
    void CreateBase(Material material, Transform parent, BuildingParams buildingParams)
    {
        Vector3Int baseObjSize = foundationParams.baseObjSize;

        GenerateBaseCube(material, baseObjSize, name);
        obj.transform.parent = parent;

        AlterMesh(baseObjSize, buildingParams.generateCornerPillars);
    }
    public void Generate()
    {
        startTime = EditorApplication.timeSinceStartup;

        CreateParent("Building");
        BuildingParams bParams = CreateBuildingParams();

        new Building(bParams, material, parentObj.transform);
        endTime = EditorApplication.timeSinceStartup;
        Debug.Log("Generation finished. Duration: " + (endTime - startTime) * 1000 + " ms");
    }
 public State_Construction(BuildingNearRoad building)
 {
     Building = building;
     if (building is ActiveBuilding activeBuilding)
     {
         buildingParams = activeBuilding.AbParams;
     }
     if (building is PassiveBuilding passiveBuilding)
     {
         buildingParams = passiveBuilding.PBParams;
     }
 }
Example #10
0
    public Building(BuildingParams buildingParams, Material material, Transform parent)
    {
        floorCount = RandomizeFloorCount(buildingParams.minStoriesCount, buildingParams.maxStoriesCount);
        bases      = new Base[floorCount];
        baseParams = new BaseParams[floorCount];

        ColorManager.SetColorPalleteID(RandomiseColorPallete());

        GenerateSegmentParams(buildingParams);

        GenerateSegments(buildingParams, material, parent);
    }
Example #11
0
    OpeningStyle GetOpeningStyle(BuildingParams buildingParams)
    {
        if (buildingParams.onlySquareOpenings)
        {
            return(OpeningStyle.SQUARE);
        }
        else if (buildingParams.onlyArchedOpenings)
        {
            return(OpeningStyle.ARCH);
        }

        OpeningStyle openingStyle = (OpeningStyle)Random.Range(0, 2);

        return(openingStyle);
    }
    public void Test_BasePosGroundFloor()
    {
        BuildingParams buildingParams = new BuildingParams();
        Vector3        lastFloorSize  = new Vector3(2.5f, 2f, 2f);
        Vector3        addTolastSize  = new Vector3(1f, 1f, 1f);

        BaseParams baseParams = new BaseParams(lastFloorSize, buildingParams, 1, OpeningStyle.ARCH);

        baseParams.finalSize = lastFloorSize + addTolastSize;

        Vector3 expextedPos = new Vector3(-0.5f, 2, -0.5f);

        Vector3 pos = baseParams.GetGroundFloorFinalPosition(lastFloorSize);

        Assert.That(pos.x, Is.EqualTo(expextedPos.x).Within(0.001));
    }
    BuildingParams CreateBuildingParams()
    {
        BuildingParams buildingParams = new BuildingParams(
            leftFirewall,
            rightFirewall,
            backFirewall,
            useCustomBuildingSize,
            customBuildingSizeX,
            customBuildingSizeZ,
            rowSameLit,
            sameSizeFloors,
            minStoriesCount,
            maxStoriesCount,
            generateCornerPillars,
            onlySquareOpenings,
            onlyArchedOpenings);

        return(buildingParams);
    }
Example #14
0
    public void Test_BaseSizeGroundFloor()
    {
        BuildingParams buildingParams = new BuildingParams();
        Vector3        foundationSize = new Vector3(2.5f, 0.5f, 0.5f);
        BaseParams     baseParams     = new BaseParams(foundationSize, buildingParams, OpeningStyle.ARCH, OpeningStyle.ARCH);
        Vector3        addTolastSize  = baseParams.addToFoundationSize;

        Vector3 expextedMaxSize = foundationSize + addTolastSize;
        Vector3 expextedMinSize = baseParams.minBaseSize;


        Vector3 size = baseParams.GetGroundFloorFinalSize(foundationSize, expextedMinSize, addTolastSize);

        Assert.That(size.x, Is.EqualTo(expextedMaxSize.x).Within(0.01));
        Assert.That(size.z, Is.EqualTo(expextedMaxSize.z).Within(0.01));

        Assert.That(size.y, Is.GreaterThanOrEqualTo(expextedMinSize.y));
        Assert.That(size.y, Is.LessThanOrEqualTo(expextedMaxSize.y));
    }
Example #15
0
    public void Generate(Material material, BuildingParams buildingParams, Transform parent)
    {
        combineMeshes = new CombineMeshes();
        float          rowLength = GetRowLength(buildingCountSide);
        List <Vector2> sizes     = GetFoundionSizes(buildingCountSide, rowLength);
        int            gridSize  = 3;

        float quarterLength = rowLength + sizes[sizes.Count - 1].y;
        float roadWidth     = 2;

        for (int y = 0; y < gridSize; y++)
        {
            for (int x = 0; x < gridSize; x++)
            {
                GameObject quarter = GenerateQuarter(material, sizes, buildingParams);
                quarter.transform.parent   = parent;
                quarter.transform.position = new Vector3(x * quarterLength + roadWidth * x, 0, y * quarterLength + roadWidth * y);
            }
        }
    }
    public void GenerationTest()
    {
        double totalTime  = 0;
        int    retryCount = 1000;

        for (int i = 0; i < retryCount; i++)
        {
            startTime = EditorApplication.timeSinceStartup;

            CreateParent("Building");
            BuildingParams bParams = CreateBuildingParams();

            new Building(bParams, material, parentObj.transform);
            endTime = EditorApplication.timeSinceStartup;

            totalTime += (endTime - startTime);
        }

        Debug.Log("Generation test finished. Total time spent: " + totalTime + " sec; Average duration: " + totalTime / retryCount * 1000 + " ms");
    }
Example #17
0
    public void Test_BaseSizeNoFirewalls()
    {
        BuildingParams buildingParams = new BuildingParams();
        Vector3        lastFloorSize  = new Vector3(2.5f, 2f, 2f);
        BaseParams     baseParams     = new BaseParams(lastFloorSize, buildingParams, 1, OpeningStyle.ARCH);
        Vector3        addTolastSize  = new Vector3(0.1f, 0.1f, 0.1f);

        Vector3 expextedMaxSize = lastFloorSize + addTolastSize;
        Vector3 expextedMinSize = lastFloorSize;


        Vector3 size = baseParams.GetFinalSize(lastFloorSize, addTolastSize);

        Assert.That(size.x, Is.GreaterThanOrEqualTo(expextedMinSize.x));
        Assert.That(size.y, Is.GreaterThanOrEqualTo(expextedMinSize.y));
        Assert.That(size.z, Is.GreaterThanOrEqualTo(expextedMinSize.z));

        Assert.That(size.x, Is.LessThanOrEqualTo(expextedMaxSize.x));
        Assert.That(size.y, Is.LessThanOrEqualTo(expextedMaxSize.y));
        Assert.That(size.z, Is.LessThanOrEqualTo(expextedMaxSize.z));
    }
    public void Test_BasePosRightFirewall()
    {
        BuildingParams buildingParams = new BuildingParams();

        buildingParams.leftFirewall  = false;
        buildingParams.rightFirewall = true;
        buildingParams.backFirewall  = false;

        Vector3 lastFloorSize = new Vector3(2.5f, 2f, 2f);
        Vector3 addTolastSize = new Vector3(1f, 1f, 1f);

        BaseParams baseParams = new BaseParams(lastFloorSize, buildingParams, 1, OpeningStyle.ARCH);

        baseParams.finalSize = lastFloorSize + addTolastSize;

        Vector3 expextedPos = new Vector3(-1, 2, -0.5f);

        Vector3 pos = baseParams.GetFinalPosition(lastFloorSize);

        Assert.That(pos.x, Is.EqualTo(expextedPos.x).Within(0.001));
    }
    public FoundationParams(BuildingParams buildingParams)
    {
        if (buildingParams.useCustomBuildingSize)
        {
            finalSize = new Vector3(buildingParams.customBuildingSizeX, minFoundationSize.y, buildingParams.customBuildingSizeZ);
        }
        else
        {
            finalSize = GetFinalSize();
        }

        finalPos = GetFinalPosition();
        if (buildingParams.generateCornerPillars)
        {
            baseObjSize = BaseObjSizes.baseSizeWPillars;
        }
        else
        {
            baseObjSize = BaseObjSizes.baseSizeNoPillars;
        }
    }
Example #20
0
    GameObject GenerateQuarter(Material material, List <Vector2> sizes, BuildingParams buildingParams)
    {
        buildingParams.useCustomBuildingSize = true;
        buildingParams.rightFirewall         = true;
        buildingParams.backFirewall          = false;
        buildingParams.leftFirewall          = false;


        quarterParent = new GameObject();
        quarterParent.transform.position = Vector3.zero;
        quarterParent.name = "CityBlock";


        Vector3 posToSet = Vector3.zero;

        buildings = new List <Building>();

        int id     = 0;
        int yAngle = 0;

        posToSet.x += sizes[0].y;

        for (int j = 0; j < 4; j++)
        {
            for (int i = 0; i < buildingCountSide - 1; i++, id++)
            {
                parentObj = new GameObject();
                parentObj.transform.position = Vector3.zero;
                parentObj.name = "Building";

                buildingParams.customBuildingSizeX = sizes[i].x;
                buildingParams.customBuildingSizeZ = sizes[i].y;

                if (i == buildingCountSide - 2)
                {
                    buildingParams.rightFirewall = false;
                    buildingParams.backFirewall  = true;
                }
                else
                {
                    buildingParams.leftFirewall = true;
                    buildingParams.backFirewall = false;
                }
                buildings.Add(new Building(buildingParams, material, parentObj.transform));
                if (i != 0)
                {
                    switch (j)
                    {
                    case 0:
                        posToSet.x += buildings[id - 1].foundationParams.finalSize.x;
                        break;

                    case 1:
                        posToSet.z += buildings[id - 1].foundationParams.finalSize.x;
                        break;

                    case 2:
                        posToSet.x -= buildings[id - 1].foundationParams.finalSize.x;
                        break;

                    case 3:
                        posToSet.z -= buildings[id - 1].foundationParams.finalSize.x;
                        break;
                    }
                }

                combineMeshes.MergeChildren(parentObj);

                parentObj.transform.position = posToSet;
                parentObj.transform.rotation = Quaternion.Euler(new Vector3(0, yAngle, 0));
                parentObj.transform.parent   = quarterParent.transform;
            }

            yAngle -= 90;
            buildingParams.rightFirewall = true;
            switch (j)
            {
            case 0:
                posToSet.x += buildings[id - 1].foundationParams.finalSize.x;
                posToSet.z += buildings[id - 1].foundationParams.finalSize.z;
                break;

            case 1:
                posToSet.z += buildings[id - 1].foundationParams.finalSize.x;
                posToSet.x -= buildings[id - 1].foundationParams.finalSize.z;

                break;

            case 2:
                posToSet.x -= buildings[id - 1].foundationParams.finalSize.x;
                posToSet.z -= buildings[id - 1].foundationParams.finalSize.z;
                break;
            }
        }

        return(quarterParent);
    }