Ejemplo n.º 1
0
 public override int GetHashCode()
 {
     return(RoomA.GetHashCode() + RoomB.GetHashCode());
 }
Ejemplo n.º 2
0
    private void ConnectCloseRoom(List <Room> Rooms, bool forceAccessibleFromMainRoom = false)
    {
        List <Room> roomListA = new List <Room>();
        List <Room> roomListB = new List <Room>();

        if (forceAccessibleFromMainRoom)
        {
            foreach (Room room in Rooms)
            {
                if (room.isAccessibleFromMainRoom)
                {
                    roomListB.Add(room);
                }
                else
                {
                    roomListA.Add(room);
                }
            }
        }
        else
        {
            roomListA = roomListB = Rooms;
        }

        int   bestDistance        = 0;
        Coord bestTileA           = new Coord();
        Coord bestTileB           = new Coord();
        Room  bestRoomA           = new Room();
        Room  bestRoomB           = new Room();
        bool  bestConnectionFound = false;

        foreach (Room RoomA in roomListA)
        {
            if (!forceAccessibleFromMainRoom)
            {
                bestConnectionFound = false;
                if (RoomA.connectedRooms.Count > 0)
                {
                    continue;
                }
            }

            foreach (Room RoomB in roomListB)
            {
                if (RoomA == RoomB || RoomA.IsConnected(RoomB))
                {
                    continue;
                }

                /*
                 * if (RoomA.IsConnected(RoomB))
                 * {
                 *  bestConnectionFound = false;
                 *  break;
                 * }
                 */
                for (int tileIndexA = 0; tileIndexA < RoomA.edgeTiles.Count; tileIndexA++)
                {
                    for (int tileIndexB = 0; tileIndexB < RoomB.edgeTiles.Count; tileIndexB++)
                    {
                        Coord tileA           = RoomA.edgeTiles[tileIndexA];
                        Coord tileB           = RoomB.edgeTiles[tileIndexB];
                        int   distanceBWRooms = (int)(Mathf.Pow(tileA.tileX - tileB.tileX, 2) + Mathf.Pow(tileA.tileY - tileB.tileY, 2));

                        if (distanceBWRooms < bestDistance || !bestConnectionFound)
                        {
                            bestDistance        = distanceBWRooms;
                            bestConnectionFound = true;
                            bestTileA           = tileA;
                            bestTileB           = tileB;
                            bestRoomA           = RoomA;
                            bestRoomB           = RoomB;
                        }
                    }
                }
            }
            if (bestConnectionFound && !forceAccessibleFromMainRoom)
            {
                CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB);
            }
        }
        if (bestConnectionFound && forceAccessibleFromMainRoom)
        {
            CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB);
            ConnectCloseRoom(Rooms, true);
        }
        if (!forceAccessibleFromMainRoom)
        {
            ConnectCloseRoom(Rooms, true);
        }
    }