private void GenerateGround() { if (m_roads == null || m_roads.Length == 0) { Debug.LogError("[RoadObjectGenerator] - The road data is null or empty."); return; } Corridor cacheRoad = null; int indexX; int indexZ; int minValue; int maxValue; Ground cacheGround = null; for (int i = 0; i < m_roads.Length; i++) { cacheRoad = m_roads[i]; indexX = (int)cacheRoad.Start.x; indexZ = (int)cacheRoad.Start.z; minValue = (int)cacheRoad.MinBorder; maxValue = (int)cacheRoad.MaxBorder; if (maxValue != cacheRoad.MaxBorder) { maxValue++; } if (cacheRoad.IsVertical) { for (int z = minValue; z < maxValue; z++) { cacheGround = new Ground(indexX, z); if (m_groundList.Contains(cacheGround)) { continue; } m_groundList.Add(cacheGround); } } else { for (int x = minValue; x < maxValue; x++) { cacheGround = new Ground(x, indexZ); if (m_groundList.Contains(cacheGround)) { continue; } m_groundList.Add(cacheGround); } } } }
public List <Corridor> GenerateCorridors() { var count = Random.Range(minCorridorCount, maxCorridorCount); Corridor currentCorridor = GenerateCorridor(new MapPoint(0, 0), CorridorDirection.North); // first corridor generation for (int i = 0; i < count; i++) { var dir = currentCorridor.RandomPerpendicularDir; var newStartingPoint = currentCorridor.GetRandomCorridorPoint.GetNextPointTowardsDir(dir); currentCorridor = GenerateCorridor(newStartingPoint, dir); } return(corridors); }
private List <Room> GetRoadCrossedRooms(Corridor road) { List <Room> crossedRooms = new List <Room>(); Room cacheRoom; for (int i = 0; i < m_rooms.Length; i++) { cacheRoom = m_rooms[i]; if (road.IsVertical) { if (road.Start.x <= cacheRoom.MinBorder.x || road.Start.x >= cacheRoom.MaxBorder.x) { continue; } else if (road.MinBorder >= cacheRoom.MaxBorder.z || road.MaxBorder <= cacheRoom.MinBorder.z) { continue; } else { crossedRooms.Add(cacheRoom); } } else { if (road.Start.z <= cacheRoom.MinBorder.z || road.Start.z >= cacheRoom.MaxBorder.z) { continue; } else if (road.MinBorder >= cacheRoom.MaxBorder.x || road.MaxBorder <= cacheRoom.MinBorder.x) { continue; } else { crossedRooms.Add(cacheRoom); } } } return(crossedRooms); }
private void RemoveCrossedWalls() { Wall cacheWall = null; Corridor cacheRoad = null; List <Wall> crossedWalls = new List <Wall>(); for (int i = 0; i < m_wallList.Count; i++) { cacheWall = m_wallList[i]; if (cacheWall.IsVertical) { for (int j = 0; j < m_roads.Length; j++) { cacheRoad = m_roads[j]; if (cacheRoad.IsVertical) { continue; } if (cacheWall.X < cacheRoad.MinBorder || cacheWall.X > cacheRoad.MaxBorder) { continue; } if ((int)cacheRoad.Start.z != cacheWall.Z) { continue; } crossedWalls.Add(cacheWall); break; } } else { for (int j = 0; j < m_roads.Length; j++) { cacheRoad = m_roads[j]; if (!cacheRoad.IsVertical) { continue; } if (cacheWall.Z < cacheRoad.MinBorder || cacheWall.Z > cacheRoad.MaxBorder) { continue; } if ((int)cacheRoad.Start.x != cacheWall.X) { continue; } crossedWalls.Add(cacheWall); break; } } } for (int i = 0; i < crossedWalls.Count; i++) { m_wallList.Remove(crossedWalls[i]); } }
private void GenerateWall() { if (m_roads == null || m_roads.Length == 0) { Debug.LogError("[RoadObjectGenerator] - The road data is null or empty."); return; } Corridor cacheRoad = null; int indexX; int indexZ; int minValue; int maxValue; Wall cacheWall = null; for (int i = 0; i < m_roads.Length; i++) { cacheRoad = m_roads[i]; indexX = (int)cacheRoad.Start.x; indexZ = (int)cacheRoad.Start.z; minValue = (int)cacheRoad.MinBorder; maxValue = (int)cacheRoad.MaxBorder; if (maxValue != cacheRoad.MaxBorder) { maxValue++; } if (cacheRoad.IsVertical) { for (int z = minValue; z < maxValue; z++) { cacheWall = new Wall(indexX, z, cacheRoad.IsVertical); if (!m_wallList.Contains(cacheWall)) { m_wallList.Add(cacheWall); } cacheWall = new Wall(indexX + 1, z, cacheRoad.IsVertical); if (!m_wallList.Contains(cacheWall)) { m_wallList.Add(cacheWall); } } } else { for (int x = minValue; x < maxValue; x++) { cacheWall = new Wall(x, indexZ, cacheRoad.IsVertical); if (!m_wallList.Contains(cacheWall)) { m_wallList.Add(cacheWall); } cacheWall = new Wall(x, indexZ + 1, cacheRoad.IsVertical); if (!m_wallList.Contains(cacheWall)) { m_wallList.Add(cacheWall); } } } } }
private void GenerateRoads() { if (m_roadList == null) { m_roadList = new List <Corridor>(); } else { m_roadList.Clear(); } Room cacheRoomA; Room cacheRoomB; Vector3 roadCenter; Vector3 roadStartA; Vector3 roadStartB; Corridor cacheRoad; for (int i = 0; i < m_spanningTree.Segments.Count; i++) { cacheRoomA = GetRoomByPoint(m_spanningTree.Segments[i].PointA); cacheRoomB = GetRoomByPoint(m_spanningTree.Segments[i].PointB); roadCenter = GetRoadCenter(cacheRoomA, cacheRoomB); if (!cacheRoomA.InBoundary(roadCenter)) { roadStartA = cacheRoomA.Center + cacheRoomA.CenterBias; if (roadStartA.x == roadCenter.x) { if (roadCenter.z > roadStartA.z) { roadStartA.z = cacheRoomA.MaxBorder.z; roadStartA.x = cacheRoomA.Center.x + cacheRoomA.CenterBias.x; } else { roadStartA.z = cacheRoomA.MinBorder.z; roadStartA.x = cacheRoomA.Center.x + cacheRoomA.CenterBias.x; } } else if (roadStartA.z == roadCenter.z) { if (roadCenter.x > roadStartA.x) { roadStartA.x = cacheRoomA.MaxBorder.x; roadStartA.z = cacheRoomA.Center.z + cacheRoomA.CenterBias.z; } else { roadStartA.x = cacheRoomA.MinBorder.x; roadStartA.z = cacheRoomA.Center.z + cacheRoomA.CenterBias.z; } } cacheRoad = new Corridor(roadStartA, roadCenter); m_roadList.Add(cacheRoad); } if (!cacheRoomB.InBoundary(roadCenter)) { roadStartB = cacheRoomB.Center + cacheRoomB.CenterBias; if (roadStartB.x == roadCenter.x) { if (roadCenter.z > roadStartB.z) { roadStartB.z = cacheRoomB.MaxBorder.z; roadStartB.x = cacheRoomB.Center.x + cacheRoomB.CenterBias.x; } else { roadStartB.z = cacheRoomB.MinBorder.z; roadStartB.x = cacheRoomB.Center.x + cacheRoomB.CenterBias.x; } } else if (roadStartB.z == roadCenter.z) { if (roadCenter.x > roadStartB.x) { roadStartB.x = cacheRoomB.MaxBorder.x; roadStartB.z = cacheRoomB.Center.z + cacheRoomB.CenterBias.z; } else { roadStartB.x = cacheRoomB.MaxBorder.x; roadStartB.z = cacheRoomB.Center.z + cacheRoomB.CenterBias.z; } } cacheRoad = new Corridor(roadStartB, roadCenter); m_roadList.Add(cacheRoad); } } }