feat(marathon): add marathonArcInspector

This commit is contained in:
Paul Alnet 2024-05-25 17:28:08 +02:00
parent f45f0027f0
commit b7012ee892

View file

@ -0,0 +1,62 @@
package org.insa.graphs.algorithm.marathon;
import java.util.EnumSet;
import org.insa.graphs.algorithm.AbstractInputData.Mode;
import org.insa.graphs.algorithm.ArcInspector;
import org.insa.graphs.model.AccessRestrictions.AccessMode;
import org.insa.graphs.model.AccessRestrictions.AccessRestriction;
import org.insa.graphs.model.Arc;
import org.insa.graphs.model.Path;
public class MarathonArcInspector implements ArcInspector{
static final int maxPedestrianSpeed = 10 ; // ie a 4:13 time
private Path path;
private Arc currentArc;
public MarathonArcInspector(Path path, Arc currentArc) {
this.path = path;
this.currentArc = currentArc;
}
/*
* Checks whether the arc is accessible and whether it would create a cycle,
* leading to unhappy marathoners.
*/
@Override
public boolean isAllowed(Arc arc) {
/*final boolean runnersCanAccess = arc.getRoadInformation().getAccessRestrictions()
.isAllowedForAny(AccessMode.FOOT, EnumSet.complementOf(EnumSet
.of(AccessRestriction.FORBIDDEN, AccessRestriction.PRIVATE)));*/
final boolean runnersCanAccess = true;
final boolean isCurrentArc = arc.getOrigin().equals(currentArc.getOrigin())
&& arc.getDestination().equals(currentArc.getDestination());
final boolean passesThroughOrigin = arc.getDestination().equals(path.getArcs().get(0).getOrigin());
boolean createsCycle = false;
for (Arc pathArc : this.path.getArcs()) {
if (arc.getDestination().equals(pathArc.getDestination())
&& !arc.getDestination().equals(currentArc.getDestination()))
createsCycle = true;
}
return runnersCanAccess && !isCurrentArc && !passesThroughOrigin && !createsCycle;
}
@Override
public double getCost(Arc arc) {
return arc.getLength();
}
@Override
public String toString() {
return "MarathonArcInspector";
}
@Override
public Mode getMode() {
return Mode.LENGTH;
}
}