package dev.llan.model.board.generation;
import dev.llan.model.board.Connection;
import dev.llan.model.board.Point;
import java.util.List;
public record RoomConnection(Room to, Room from) {
public static RoomConnection getMinimalDistance(List<Room> added, List<Room> toAdd) {
int minFromIndex = 0;
int minToIndex = 0;
double minDistance = getMinHallwayDistance(added.get(minFromIndex), toAdd.get(minToIndex));
for(int i = 0; i < added.size(); i++) {
for(int j = 0; j < toAdd.size(); j++) {
double dist = getMinHallwayDistance(added.get(i), toAdd.get(j));
if(dist < minDistance) {
minDistance = dist;
minFromIndex = i;
minToIndex = j;
}
}
}
return new RoomConnection(toAdd.get(minToIndex), added.get(minFromIndex));
}
private static double getMinHallwayDistance(Room to, Room from) {
List<DirectedPoint> toPoints = to.getConnectionPoints();
List<DirectedPoint> fromPoints = from.getConnectionPoints();
Connection connection = Connection.getClosestPair(fromPoints, toPoints);
Point toPoint = connection.getTo().point();
Point fromPoint = connection.getFrom().point();
return Point.getDistance(toPoint, fromPoint);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("RoomConnection{");
sb.append("to=").append(to);
sb.append(", from=").append(from);
sb.append('}');
return sb.toString();
}
}