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