re-implemented trace update code

This commit is contained in:
Stephan Richter
2021-03-14 15:07:30 +01:00
parent 2647b4c43d
commit c4e57d2b8a
7 changed files with 99 additions and 53 deletions

View File

@@ -80,6 +80,11 @@ public abstract class Block extends StretchableTile{
return trains.remove(b);
}
public void set(Train train, Direction newDirection) {
dirs.put(train, newDirection);
}
@Override
public String toString() {
return trains.toString();
@@ -388,7 +393,7 @@ public abstract class Block extends StretchableTile{
}
@Override
public boolean lockFor(Context context) {
public boolean lockFor(Context context, boolean downgrade) {
Train newTrain = context.train();
Route route = context.route();
LOG.debug("{}.lock({})",this,newTrain);
@@ -398,6 +403,8 @@ public abstract class Block extends StretchableTile{
switch (status) {
case DISABLED:
return false;
case OCCUPIED:
if (!downgrade) break;
case FREE:
case RESERVED:
status = Status.LOCKED;
@@ -406,7 +413,6 @@ public abstract class Block extends StretchableTile{
add(newTrain,dir);
plan.place(this);
break;
case OCCUPIED:
case LOCKED:
break; // do not downgrade
}
@@ -482,6 +488,11 @@ public abstract class Block extends StretchableTile{
return routes().stream().filter(route -> route.startBlock() == Block.this).collect(Collectors.toList());
}
public void set(Train train, Direction direction) {
trains.set(train,direction);
}
public abstract List<Connector> startPoints();
@Override

View File

@@ -478,7 +478,7 @@ public abstract class Tile extends BaseClass implements Comparable<Tile> {
plan.place(this);
}
public boolean lockFor(Context context) {
public boolean lockFor(Context context,boolean downgrade) {
Train newTrain = context.train();
LOG.debug("{}.lockFor({})",this,newTrain);
if (isNull(newTrain)) return false;
@@ -486,14 +486,15 @@ public abstract class Tile extends BaseClass implements Comparable<Tile> {
switch (status) {
case DISABLED:
return false;
case OCCUPIED:
if (!downgrade) break;
case FREE:
case RESERVED:
status = Status.LOCKED;
plan.place(this);
break;
case OCCUPIED:
case LOCKED:
break; // do not downgrade
break; // already locked
}
return true;
}