// License: GPL. For details, see LICENSE file.
package indoor_sweepline;
public class CorridorPart {
public enum Type {
VOID,
PASSAGE,
WALL,
STAIRS_UP,
STAIRS_DOWN,
ESCALATOR_UP_LEAVING,
ESCALATOR_UP_ARRIVING,
ESCALATOR_UP_BIDIRECTIONAL,
ESCALATOR_DOWN_LEAVING,
ESCALATOR_DOWN_ARRIVING,
ESCALATOR_DOWN_BIDIRECTIONAL,
ELEVATOR
}
public enum ReachableSide {
ALL,
FRONT,
BACK,
LEFT,
RIGHT
}
public CorridorPart(double width, Type type, ReachableSide side) {
this.width = width;
this.type = type;
this.side = side;
}
public boolean isObstacle(ReachableSide beamSide) {
if (type == Type.VOID)
return false;
if (type == Type.PASSAGE)
return (beamSide != ReachableSide.ALL);
return true;
}
public Type getType() {
return type;
}
public void setType(Type type, ReachableSide beamSide) {
this.type = type;
adjustSideType(beamSide);
}
public ReachableSide getSide() {
return side;
}
public void setSide(ReachableSide side, ReachableSide beamSide) {
this.side = side;
adjustSideType(beamSide);
}
public double width;
private Type type;
private ReachableSide side;
private void adjustSideType(ReachableSide beamSide) {
if (type == Type.PASSAGE || type == Type.VOID)
side = ReachableSide.ALL;
else if (side == ReachableSide.ALL) {
if (beamSide == ReachableSide.RIGHT)
side = ReachableSide.RIGHT;
else
side = ReachableSide.LEFT;
}
}
}