mourning-ember / src / main / java / dev / llan / model / board / generation / RoomConnection.java
RoomConnection.java
Raw
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();
  }
}