mirror of
https://gitlab.com/arnekeller/kit-programmieren-ws1920-final1.git
synced 2024-11-24 01:15:05 +00:00
Train collision checking fixes
This commit is contained in:
parent
aa547d3568
commit
16eae42fa3
@ -518,24 +518,6 @@ public class ModelRailwaySimulation {
|
||||
|
||||
private ArrayList<Set<Train>> getCollisionsOfOneStep() {
|
||||
ArrayList<Set<Train>> collisions = new ArrayList<>();
|
||||
// check touching trains
|
||||
/*
|
||||
for (Train train : trains) {
|
||||
if (!train.isPlaced()) {
|
||||
continue;
|
||||
}
|
||||
for (Train otherTrain : trains) {
|
||||
if (!otherTrain.isPlaced() || train == otherTrain) {
|
||||
continue;
|
||||
}
|
||||
if (train.getFrontPosition().equals(otherTrain.getFrontPosition())) {
|
||||
train.removeFromRails();
|
||||
otherTrain.removeFromRails();
|
||||
collisions.add(Arrays.asList(train, otherTrain));
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
Map<Train, Set<Rail>> occupiedRails = new HashMap<>();
|
||||
for (Train train : trains) {
|
||||
if (train.isPlaced()) {
|
||||
@ -570,9 +552,12 @@ public class ModelRailwaySimulation {
|
||||
continue; // already included in collision
|
||||
}
|
||||
Set<Rail> occupiedByThisTrain = nextOccupiedRails.get(train);
|
||||
trains.stream().filter((x) -> x != train && x.isPlaced()).forEach((otherTrain) -> {
|
||||
trains.stream().filter((x) -> x != train).forEach((otherTrain) -> {
|
||||
Set<Rail> occupiedByOtherTrainPreviously = occupiedRails.get(otherTrain);
|
||||
Set<Rail> occupiedByOtherTrain = nextOccupiedRails.get(otherTrain);
|
||||
if (occupiedByOtherTrain == null || occupiedByOtherTrainPreviously == null) {
|
||||
return;
|
||||
}
|
||||
boolean anyIntersection = occupiedByOtherTrain.stream().anyMatch(occupiedByThisTrain::contains)
|
||||
|| occupiedByOtherTrainPreviously.stream().anyMatch(occupiedByThisTrain::contains);
|
||||
if (anyIntersection) {
|
||||
@ -589,6 +574,9 @@ public class ModelRailwaySimulation {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (existingCollision == null) {
|
||||
collisions.add(new HashSet<>(Arrays.asList(train, otherTrain)));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -597,24 +585,6 @@ public class ModelRailwaySimulation {
|
||||
|
||||
private ArrayList<Set<Train>> getCollisionsOfOneReverseStep() {
|
||||
ArrayList<Set<Train>> collisions = new ArrayList<>();
|
||||
// check touching trains
|
||||
/*
|
||||
for (Train train : trains) {
|
||||
if (!train.isPlaced()) {
|
||||
continue;
|
||||
}
|
||||
for (Train otherTrain : trains) {
|
||||
if (!otherTrain.isPlaced() || train == otherTrain) {
|
||||
continue;
|
||||
}
|
||||
if (train.getBackPosition().equals(otherTrain.getBackPosition())) {
|
||||
train.removeFromRails();
|
||||
otherTrain.removeFromRails();
|
||||
collisions.add(new HashSet<>(Arrays.asList(train, otherTrain)));
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
Map<Train, Set<Rail>> occupiedRails = new HashMap<>();
|
||||
for (Train train : trains) {
|
||||
if (train.isPlaced()) {
|
||||
@ -649,9 +619,12 @@ public class ModelRailwaySimulation {
|
||||
continue; // already included in collision
|
||||
}
|
||||
Set<Rail> occupiedByThisTrain = nextOccupiedRails.get(train);
|
||||
trains.stream().filter((x) -> x != train && train.isPlaced()).forEach((otherTrain) -> {
|
||||
trains.stream().filter((x) -> x != train).forEach((otherTrain) -> {
|
||||
Set<Rail> occupiedByOtherTrainPreviously = occupiedRails.get(otherTrain);
|
||||
Set<Rail> occupiedByOtherTrain = nextOccupiedRails.get(otherTrain);
|
||||
if (occupiedByOtherTrain == null || occupiedByOtherTrainPreviously == null) {
|
||||
return;
|
||||
}
|
||||
boolean anyIntersection = occupiedByOtherTrain.stream().anyMatch(occupiedByThisTrain::contains)
|
||||
|| occupiedByOtherTrainPreviously.stream().anyMatch(occupiedByThisTrain::contains);
|
||||
if (anyIntersection) {
|
||||
|
Loading…
Reference in New Issue
Block a user