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]); }
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); } }