package mapmaker; /** links two rooms in a map */ public class Link { Room[] rooms; AreaMap map; /** automatically links room1 and room2 at the given exits * @param map the map containing the link */ public Link(AreaMap map, Room room1, int exit1, Room room2, int exit2) { rooms = new Room[2]; rooms[0] = room1; rooms[1] = room2; this.map = map; notifyRooms(exit1, exit2); } // Link /** initializes as a deep copy of orgLink */ public Link(AreaMap map, Link orgLink) { this.map = map; rooms = new Room[2]; Room[] orgRooms = orgLink.getRooms(); int[] exits = new int[2]; for (int i = 0; i < 2; i++) { rooms[i] = map.getRoom(orgRooms[i].getPos()); exits[i] = orgRooms[i].getExitDir(orgLink); } notifyRooms(exits[0], exits[1]); } // Link /** returns the rooms linked */ public Room[] getRooms() { return rooms; } // getRoom void notifyRooms(int exit1, int exit2) { rooms[0].setLink(this, exit1); rooms[1].setLink(this, exit2); } // notifyRooms /** should only be called by Room or Map object */ public void suicide() { unlinkRooms(); map.removeLink(this); } // suicide void unlinkRooms() { for (int i = 0; i < 2; i++) rooms[i].unlink(this); } // unlinkRooms /** from the two rooms linked, returns the one unequal to room * @param room must be one of the rooms linked */ public Room opposite(Room room) { if (rooms[0] == room) return rooms[1]; if (rooms[1] == room) return rooms[0]; throw new IllegalArgumentException(); } // opposite } // Link