Skip to content

Commit

Permalink
Merge pull request #238 from erik-vos/master
Browse files Browse the repository at this point in the history
Dual trains and a partial fix for runTo=tokenonly.
  • Loading branch information
erik-vos authored Jun 8, 2020
2 parents 45efb30 + 8d6ba99 commit 34415e1
Show file tree
Hide file tree
Showing 52 changed files with 1,085 additions and 485 deletions.
15 changes: 11 additions & 4 deletions src/main/java/net/sf/rails/algorithms/NetworkAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,15 @@ public NetworkGraph getMapGraph() {
return mapGraph;
}

public NetworkGraph getRouteGraph(PublicCompany company, boolean addHQ) {
routeGraph = NetworkGraph.createRouteGraph(getMapGraph(), company, addHQ);
/**
*
* @param company
* @param addHQ
* @param running true for train runs, false for tile or token lay allowances
* @return
*/
public NetworkGraph getRouteGraph(PublicCompany company, boolean addHQ, boolean running) {
routeGraph = NetworkGraph.createRouteGraph(getMapGraph(), company, addHQ, running);
this.company = company;
this.addHQ = addHQ;
log.info("RouteGraph created");
Expand All @@ -51,9 +58,9 @@ public NetworkGraph getRouteGraph(PublicCompany company, boolean addHQ) {
public NetworkGraph getRouteGraphCached(PublicCompany company, boolean addHQ) {
if (routeGraph == null || company != this.company || addHQ != this.addHQ) {
if (mapGraph != null) {
routeGraph = NetworkGraph.createRouteGraph(mapGraph, company, addHQ);
routeGraph = NetworkGraph.createRouteGraph(mapGraph, company, addHQ, true);
} else {
getRouteGraph(company, addHQ);
getRouteGraph(company, addHQ, true);
}
}
return routeGraph;
Expand Down
23 changes: 19 additions & 4 deletions src/main/java/net/sf/rails/algorithms/NetworkGraph.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,17 @@ public static NetworkGraph createMapGraph(RailsRoot root) {
return graph;
}

public static NetworkGraph createRouteGraph(NetworkGraph mapGraph, PublicCompany company, boolean addHQ) {
/**
*
* @param mapGraph
* @param company
* @param addHQ
* @param running true for train runs, false for tile or token lay allowances
* @return
*/
public static NetworkGraph createRouteGraph(NetworkGraph mapGraph, PublicCompany company, boolean addHQ, boolean running) {
NetworkGraph newGraph = new NetworkGraph();
newGraph.initRouteGraph(mapGraph, company, addHQ);
newGraph.initRouteGraph(mapGraph, company, addHQ, running);
newGraph.rebuildVertices();
return newGraph;
}
Expand Down Expand Up @@ -342,7 +350,14 @@ private boolean removeVertexes(Collection<NetworkVertex> protectedVertices) {
return removed;
}

private void initRouteGraph(NetworkGraph mapGraph, PublicCompany company, boolean addHQ) {
/**
*
* @param mapGraph
* @param company
* @param addHQ
* @param running true for train runs, false for tile or token lay allowances
*/
private void initRouteGraph(NetworkGraph mapGraph, PublicCompany company, boolean addHQ, boolean running) {

// add graph modifiers
RevenueManager revenueManager = company.getRoot().getRevenueManager();
Expand All @@ -351,7 +366,7 @@ private void initRouteGraph(NetworkGraph mapGraph, PublicCompany company, boolea
}

// set sinks on mapgraph
NetworkVertex.initAllRailsVertices(mapGraph, company, null);
NetworkVertex.initAllRailsVertices(mapGraph, company, null, running);

// add Company HQ
NetworkVertex hqVertex = new NetworkVertex(company);
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/net/sf/rails/algorithms/NetworkVertex.java
Original file line number Diff line number Diff line change
Expand Up @@ -226,9 +226,10 @@ public boolean isOfType(VertexType vertexType, StationType stationType) {

/**
* Initialize for rails vertexes
* @param running true for train runs, false for tile or token lay allowances
* @return true = can stay inside the network, false = has to be removed
*/
public boolean initRailsVertex(PublicCompany company) {
public boolean initRailsVertex(PublicCompany company, boolean running) {
// side vertices use the defaults, virtuals cannot use this function
if (virtual || type == VertexType.SIDE) return true;

Expand All @@ -239,7 +240,7 @@ public boolean initRailsVertex(PublicCompany company) {

// check if it has to be removed because it is run-to only
// if company == null, then no vertex gets removed
if (company != null && !stop.isRunToAllowedFor(company)) {
if (company != null && !stop.isRunToAllowedFor(company, running)) {
log.info("Vertex is removed");
return false;
}
Expand Down Expand Up @@ -319,15 +320,16 @@ public int compare(NetworkVertex vA, NetworkVertex vB) {
* @param graph network graph
* @param company the company (with regard to values, sinks and removals)
* @param phase the current phase (with regard to values)
* @param running true for train runs, false for tile or token lay allowances
*/
public static void initAllRailsVertices(NetworkGraph graph,
PublicCompany company, Phase phase) {
PublicCompany company, Phase phase, boolean running) {

// store vertices for removal
List<NetworkVertex> verticesToRemove = new ArrayList<NetworkVertex>();
for (NetworkVertex v:graph.getGraph().vertexSet()) {
if (company != null) {
if (!v.initRailsVertex(company)) {
if (!v.initRailsVertex(company, running)) {
verticesToRemove.add(v);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/sf/rails/algorithms/RevenueAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ public void populateFromRails() {
graph = networkAdapter.getRouteGraphCached(company, false);

// initialize vertices
NetworkVertex.initAllRailsVertices(graph, company, phase);
NetworkVertex.initAllRailsVertices(graph, company, phase, true);

// define startVertexes
addStartVertices(graph.getCompanyBaseTokenVertexes(company));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ private boolean convertVertices(RevenueBonus bonus, NetworkGraph graph, MapHex h

private void convertTrainTypes(RevenueBonus bonus, TrainManager tm) {
for (String identTrainType:identTrainTypes) {
TrainType trainType = tm.getTypeByName(identTrainType);
TrainType trainType = tm.getTrainTypeByName(identTrainType);
if (trainType != null) {
bonus.addTrainType(trainType);
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/net/sf/rails/game/GameDef.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public enum Parm {
REMOVE_TRAIN_BEFORE_SR(false),
EMERGENCY_MUST_BUY_CHEAPEST_TRAIN (true),
EMERGENCY_MAY_ALWAYS_BUY_NEW_TRAIN (false),
EMERGENCY_MAY_BUY_FROM_COMPANY (true);
EMERGENCY_MAY_BUY_FROM_COMPANY (true),
DUAL_TRAIN_BECOMES_UNDECIDED_IN_POOL (false);

private Object defaultValue;

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/sf/rails/game/MapHex.java
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,7 @@ public PrivateCompany getBlockingPrivateCompany() {
}

/**
* @param private company that blocks the hex (use argument null to unblock)
* @param company private company that blocks the hex (use argument null to unblock)
*/
public void setBlockingPrivateCompany(PrivateCompany company) {
blockingPrivateCompany.set(company);
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/net/sf/rails/game/MapManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ public MapManager(RailsRoot parent, String id) {
super(parent, id);
}

/**
/*
* @see net.sf.rails.common.parser.Configurable#configureFromXML(org.w3c.dom.Element)
*/
public void configureFromXML(Tag tag) throws ConfigurationException {

mapOrientation = MapOrientation.create(tag);

List<Tag> hexTags = tag.getChildren("Hex");
ImmutableMap.Builder<MapHex.Coordinates, MapHex> hexBuilder = ImmutableMap.builder();
ImmutableSortedSet.Builder<Integer> tileCostsBuilder= ImmutableSortedSet.naturalOrder();
Expand Down Expand Up @@ -262,7 +262,7 @@ private void calculateHexDistances (MapHex initHex, MapHex currentHex, int depth
* Calculate the distances between a given tokenable city hex
* and all other tokenable city hexes.
* <p> Distances are cached.
* @param hex Start hex
* @param initHex Start hex
* @return Sorted integer list containing all occurring distances only once.
*/
public SortedSet<Integer> getCityDistances (MapHex initHex) {
Expand Down
Loading

0 comments on commit 34415e1

Please sign in to comment.