package polly.rx.core.orion.pathplanning; import polly.rx.core.orion.model.Wormhole; import polly.rx.core.orion.pathplanning.Graph.EdgeCosts; class PathCostCalculator implements EdgeCosts<EdgeData> { private final static double COST_DIAGONAL = 1.5 / 60; private final static double COST_NORMAL = 1.0 / 60; private final static double COST_ENTRYPORTAL = COST_DIAGONAL * 3.0; private final static double WORMHOLE_OFFSET = 100000.0; @Override public double calculate(EdgeData data) { switch (data.getType()) { case NORMAL: return COST_NORMAL; case DIAGONAL: return COST_DIAGONAL; case ENTRYPORTAL: return COST_ENTRYPORTAL; case WORMHOLE: final Wormhole hole = data.getWormhole(); double modifier = 1.0; switch (hole.requiresLoad()) { case FULL: modifier = 50.0; break; case PARTIAL: modifier = 10.0; break; case NONE: } return WORMHOLE_OFFSET + modifier * Math.max(1, data.getWormhole().getMinUnload()); default: return Double.MAX_VALUE; } } }