re-implemented trace update code
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user