private List <BuildingSegment> GenerateFloor(int level) { List <BuildingSegment> newFloor = new List <BuildingSegment>(); float floorWidth = 0; for (int i = 0; i < floor.Segments[level].segments.Count; ++i) { FloorSegmentType segmentType = floor.Segments[level].segments[i]; if (level == 0 && segmentType == FloorSegmentType.stairsDown) { segmentType = FloorSegmentType.empty; } if (level == floorsNumber - 1 && segmentType == FloorSegmentType.stairsUp) { segmentType = FloorSegmentType.empty; } BuildingSegment segment = Instantiate(floor.GetSegmentPrefab(segmentType), buildingParent); segment.transform.localPosition = new Vector3(floorWidth + segment.GetRoomWidth() / 2, ((float)level + .5f) * segment.GetSegmentHeight()); segment.SetApartmentRoomBounds(segment.transform.position.x + segment.GetHallWidth() / 2 - segment.GetSegmentWidth() / 2 + 1.5f, segment.transform.position.x + segment.GetHallWidth() / 2 + segment.GetSegmentWidth() / 2 - 3); newFloor.Add(segment); floorWidth += segment.GetSegmentWidth(); } for (int i = 0; i < newFloor.Count; ++i) { newFloor[i].SetApartmentCorridorBounds(0, floorWidth); } return(newFloor); }
public BuildingSegment GetSegmentPrefab(FloorSegmentType segmentType) { switch (segmentType) { case FloorSegmentType.empty: return(EmptySegment); case FloorSegmentType.apartment: return(GetRandomApartment()); case FloorSegmentType.stairsUp: return(stairsUpSegment); case FloorSegmentType.stairsDown: return(stairsDownSegment); case FloorSegmentType.caretakerRoom: return(caretakerRoomSegment); case FloorSegmentType.roofLeft: return(RoofLeft); case FloorSegmentType.roofRight: return(RoofRight); case FloorSegmentType.roofCenterWide: return(RoofCenterWide); case FloorSegmentType.roofCenterNarrow: return(RoofCenterNarrow); default: return(null); } }