예제 #1
0
    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]);
    }
예제 #2
0
    public Attic(Material material, AtticParams _atticParams, Transform parent)
    {
        atticParams = _atticParams;

        Vector3Int baseObjSize = BaseObjSizes.atticSize;

        GenerateBaseCube(material, baseObjSize, name);
        obj.transform.parent = parent;
        AlterMesh();
    }
    public void GenerateAtticOpenings(BaseParams lastBaseParams, AtticParams atticParams, ref List <WindowParams> windowParams, bool rowSameLit)
    {
        if (atticParams.finalSize.y < lastBaseParams.finalSize.y)
        {
            return;
        }
        float maxGap =
            Random.Range(minDistanceBetweenWindows,
                         maxDistanceBetweenWindows);

        maxGap /= 2;
        List <Quaternion> rotations = new List <Quaternion>();
        List <Vector3>    positions = new List <Vector3>();
        Vector3           winSize   = lastBaseParams.windowParams[0].finalSize;
        float             y         = GetGapBetweemTopAndBottom(lastBaseParams.finalSize, winSize);
        float             minX      = lastBaseParams.finalSize.y / (Mathf.Tan(Mathf.Atan(atticParams.finalSize.y / (atticParams.finalSize.x / 2))));


        float spaceForWindows = atticParams.finalSize.x - minX * 2;

        float spaceForOneWin = winSize.x + maxGap * 2;

        int winCount = (int)(spaceForWindows / spaceForOneWin);

        float SpaceForOneWindow = spaceForWindows / winCount; //atemus tarpa nuo kampo kiek lieka vienam langui
        float step = (SpaceForOneWindow - winSize.x) / 2;

        Vector3 addBefore = new Vector3(step, 0, 0);
        Vector3 addAfter  = new Vector3(winSize.x + step, 0, 0);

        DistributePostionsAndRotationsEvenly(
            new Vector3(minX + winSize.x, y, windowOffset),
            Quaternion.Euler(new Vector3(0, 180, 0)),
            addBefore,
            addAfter,
            winCount,
            ref positions,
            ref rotations
            );
        if (lastBaseParams.backFirewall == false)
        {
            DistributePostionsAndRotationsEvenly(
                new Vector3(minX, y, atticParams.finalSize.z - windowOffset),
                Quaternion.Euler(Vector3.zero),
                addBefore,
                addAfter,
                winCount,
                ref positions,
                ref rotations
                );
        }
        Vector2Int glassColor = RandomiseWindowColor();

        GenerateArcParameters(winSize);
        GenerateSegmentsPositions(winSize);

        for (int i = 0; i < positions.Count; i++)
        {
            WindowParams windowParam = new WindowParams();

            if (!rowSameLit)
            {
                glassColor = RandomiseWindowColor();
            }

            if (lastBaseParams.windowStyle == OpeningStyle.ARCH)
            {
                windowParam.archedOpeningParams = new ArchedOpeningParams(outerArcF, outerArcB, innerArcF, innerArcB, frameDimensions);
                windowParam.glassParams         = new PlaneParams(lastBaseParams.windowStyle, glassColor, BaseObjSizes.planeArcSize, innerArcF, winSize, windowOffset);
            }
            else
            {
                windowParam.squareOpeningParams = new SquareOpeningParams(frameDimensions);
                windowParam.glassParams         = new PlaneParams(lastBaseParams.windowStyle, glassColor, BaseObjSizes.planeSqSize, winSize, windowOffset);
            }

            windowParam.segmentationParams = new SegmentationParams(vertSegPositions, horSegPositions, segmentDimensions);
            windowParam.finalSize          = winSize;
            windowParam.finalPos           = positions[i];
            windowParam.finalRot           = rotations[i];
            windowParam.openingStyle       = lastBaseParams.windowStyle;
            windowParams.Add(windowParam);
        }
    }