Example #1
0
        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);
                    }
                }
            }
        }
Example #2
0
        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);
        }
Example #4
0
        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]);
            }
        }
Example #5
0
        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);
                }
            }
        }