Esempio n. 1
0
        private void PlaceRoom(int sx, int sy, CForestRoomMeta meta)
        {
            for (int x = 0; x < meta.Size.x; x++)
            {
                for (int y = 0; y < meta.Size.y; y++)
                {
                    SetTileData(sx + x, sy + y, meta.sId, meta.GetSpot(x, y));
                }
            }

            var room = new CForestRoomData(meta.sId, sx, sy);

            m_roomList.Add(room);
        }
Esempio n. 2
0
        private void TunnelTwoRoom(CForestRoomData a, CForestRoomData b)
        {
            bool v = CheckTunnelDoor(a, b);

            if (!v)
            {
                return;
            }

            m_starGrid.SetStartNode(a.DoorForTunnel);
            m_starGrid.SetEndNode(b.DoorForTunnel);
            m_astar.FindPath(m_starGrid);
            var path = m_astar.Path;

            foreach (var node in path)
            {
                SetTileData(node.Col, node.Row, "-1", CForestRoomTileType.OuterRoad);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 根据两个房子的方向, 确认两个房子的连接路时的门
        /// </summary>
        private bool CheckTunnelDoor(CForestRoomData a, CForestRoomData b)
        {
            if (a.Meta.DoorPosList.Count == 0)
            {
                return(false);
            }
            if (b.Meta.DoorPosList.Count == 0)
            {
                return(false);
            }

            int minDis = int.MaxValue;
            int aIndex = -1;
            int bIndex = -1;

            for (int i = 0; i < a.Meta.DoorPosList.Count; i++)
            {
                Vector2Int ad = a.GetDoorPosition(i);
                for (int j = 0; j < b.Meta.DoorPosList.Count; j++)
                {
                    Vector2Int bd  = b.GetDoorPosition(j);
                    int        dis = ad.ManhattanMagnitude(bd);
                    if (dis < minDis)
                    {
                        minDis = dis;
                        aIndex = i;
                        bIndex = j;
                    }
                }
            }

            a.SetTempDoorForTunnel(aIndex);
            b.SetTempDoorForTunnel(bIndex);

            return(true);
        }