add isTransit method to vendor
This commit is contained in:
@@ -337,7 +337,7 @@ public class Route implements Comparable<Route> {
|
|||||||
|
|
||||||
public static Route singletone(Vendor root, double balance, long cargo){
|
public static Route singletone(Vendor root, double balance, long cargo){
|
||||||
RouteEntry entry = new RouteEntry(root, 0,0,0);
|
RouteEntry entry = new RouteEntry(root, 0,0,0);
|
||||||
if (!(root instanceof TransitVendor)){
|
if (!root.isTransit()){
|
||||||
entry.setLand(true);
|
entry.setLand(true);
|
||||||
}
|
}
|
||||||
Route route = new Route(entry);
|
Route route = new Route(entry);
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ public class RouteSearcher {
|
|||||||
buyer = orders.get(0).getBuyer();
|
buyer = orders.get(0).getBuyer();
|
||||||
sellerEntry.addAll(orders);
|
sellerEntry.addAll(orders);
|
||||||
} else {
|
} else {
|
||||||
if (!(vendor instanceof TransitVendor)){
|
if (!vendor.isTransit()){
|
||||||
entry.setLand(true);
|
entry.setLand(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,7 +203,7 @@ public class RouteSearcher {
|
|||||||
}
|
}
|
||||||
if (vEdge != null) {
|
if (vEdge != null) {
|
||||||
RouteEntry entry = new RouteEntry(vEdge.getTarget().getEntry(), 0, 0, 0);
|
RouteEntry entry = new RouteEntry(vEdge.getTarget().getEntry(), 0, 0, 0);
|
||||||
if (!(entry.getVendor() instanceof TransitVendor)) entry.setLand(true);
|
if (!entry.getVendor().isTransit()) entry.setLand(true);
|
||||||
if (prev != null){
|
if (prev != null){
|
||||||
prev.setTime(scorer.getTime(entry, prev));
|
prev.setTime(scorer.getTime(entry, prev));
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ public class RouteSearcher {
|
|||||||
ConnectibleEdge<Place> edge = (ConnectibleEdge<Place>) edges.get(i);
|
ConnectibleEdge<Place> edge = (ConnectibleEdge<Place>) edges.get(i);
|
||||||
Vendor vendor = i == 0 ? from : edge.getSource().getEntry().asTransit();
|
Vendor vendor = i == 0 ? from : edge.getSource().getEntry().asTransit();
|
||||||
RouteEntry entry = new RouteEntry(vendor, edge.getRefill(), edge.getFuelCost(), 0);
|
RouteEntry entry = new RouteEntry(vendor, edge.getRefill(), edge.getFuelCost(), 0);
|
||||||
if (i == 0) entry.setLand(!(vendor instanceof TransitVendor));
|
if (i == 0) entry.setLand(!vendor.isTransit());
|
||||||
if (prev != null){
|
if (prev != null){
|
||||||
prev.setTime(scorer.getTime(entry, prev));
|
prev.setTime(scorer.getTime(entry, prev));
|
||||||
prev.setFullTime(prev.getTime());
|
prev.setFullTime(prev.getTime());
|
||||||
@@ -239,7 +239,7 @@ public class RouteSearcher {
|
|||||||
prev = entry;
|
prev = entry;
|
||||||
if (i == edges.size()-1){
|
if (i == edges.size()-1){
|
||||||
entry = new RouteEntry(to, 0, 0, 0);
|
entry = new RouteEntry(to, 0, 0, 0);
|
||||||
entry.setLand(!(to instanceof TransitVendor));
|
entry.setLand(!to.isTransit());
|
||||||
prev.setTime(scorer.getTime(entry, prev));
|
prev.setTime(scorer.getTime(entry, prev));
|
||||||
prev.setFullTime(prev.getTime());
|
prev.setFullTime(prev.getTime());
|
||||||
entries.add(entry);
|
entries.add(entry);
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateVertexes(){
|
private void updateVertexes(){
|
||||||
vertexes.removeIf(v -> v.getEntry() instanceof TransitVendor);
|
vertexes.removeIf(v -> v.getEntry().isTransit());
|
||||||
updateLevels(root);
|
updateLevels(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,11 +124,11 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
BuildHelper<Vendor> helper = super.createHelper(buyer);
|
BuildHelper<Vendor> helper = super.createHelper(buyer);
|
||||||
if (helper.isConnected()){
|
if (helper.isConnected()){
|
||||||
Vendor seller = vertex.getEntry();
|
Vendor seller = vertex.getEntry();
|
||||||
if (buyer instanceof TransitVendor && (deep == 0 || seller.getPlace().equals(buyer.getPlace()))){
|
if (buyer.isTransit() && (deep == 0 || seller.getPlace().equals(buyer.getPlace()))){
|
||||||
LOG.trace("Buyer is transit of seller or is end, skipping");
|
LOG.trace("Buyer is transit of seller or is end, skipping");
|
||||||
return new BuildHelper<>(buyer, -1);
|
return new BuildHelper<>(buyer, -1);
|
||||||
}
|
}
|
||||||
if (seller instanceof TransitVendor && seller.getPlace().equals(buyer.getPlace())){
|
if (seller.isTransit() && seller.getPlace().equals(buyer.getPlace())){
|
||||||
LOG.trace("Seller is transit of buyer, skipping");
|
LOG.trace("Seller is transit of buyer, skipping");
|
||||||
return new BuildHelper<>(buyer, -1);
|
return new BuildHelper<>(buyer, -1);
|
||||||
}
|
}
|
||||||
@@ -147,10 +147,10 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
@Override
|
@Override
|
||||||
protected BuildEdge createEdge(BuildHelper<Vendor> helper, Vertex<Vendor> next) {
|
protected BuildEdge createEdge(BuildHelper<Vendor> helper, Vertex<Vendor> next) {
|
||||||
BuildEdge cEdge = super.createEdge(helper, next);
|
BuildEdge cEdge = super.createEdge(helper, next);
|
||||||
if (next.getEntry() instanceof TransitVendor){
|
if (next.getEntry().isTransit()){
|
||||||
return cEdge;
|
return cEdge;
|
||||||
}
|
}
|
||||||
if (vertex.getEntry() instanceof TransitVendor){
|
if (vertex.getEntry().isTransit()){
|
||||||
addEdgesToHead(cEdge);
|
addEdgesToHead(cEdge);
|
||||||
}
|
}
|
||||||
return new VendorsBuildEdge(cEdge);
|
return new VendorsBuildEdge(cEdge);
|
||||||
@@ -158,7 +158,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
|
|
||||||
private void addEdgesToHead(BuildEdge lastEdge){
|
private void addEdgesToHead(BuildEdge lastEdge){
|
||||||
Vertex<Vendor> target = lastEdge.getTarget();
|
Vertex<Vendor> target = lastEdge.getTarget();
|
||||||
assert vertex.getEntry() instanceof TransitVendor && !(target.getEntry() instanceof TransitVendor);
|
assert vertex.getEntry().isTransit() && !target.getEntry().isTransit();
|
||||||
VendorsGraphBuilder h = this;
|
VendorsGraphBuilder h = this;
|
||||||
Path<Vendor> path = new Path<>(Collections.singleton(lastEdge));
|
Path<Vendor> path = new Path<>(Collections.singleton(lastEdge));
|
||||||
while (h != null && h.edge != null){
|
while (h != null && h.edge != null){
|
||||||
@@ -177,7 +177,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
if (!source.equals(target)){
|
if (!source.equals(target)){
|
||||||
addEdge(source, target, path);
|
addEdge(source, target, path);
|
||||||
}
|
}
|
||||||
if (!(source.getEntry() instanceof TransitVendor)){
|
if (!source.getEntry().isTransit()){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
h = h.head;
|
h = h.head;
|
||||||
@@ -199,7 +199,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
LOG.trace("Check {}", entry);
|
LOG.trace("Check {}", entry);
|
||||||
if (limit >= e.getMinFuel() && limit <= e.getMaxFuel()) {
|
if (limit >= e.getMinFuel() && limit <= e.getMaxFuel()) {
|
||||||
LOG.trace("Connect {} to {}", entry, vertex);
|
LOG.trace("Connect {} to {}", entry, vertex);
|
||||||
if (vertex.getEntry() instanceof TransitVendor && !(entry instanceof TransitVendor)) {
|
if (vertex.getEntry().isTransit() && !entry.isTransit()) {
|
||||||
addCheckedEdgesToHead(e);
|
addCheckedEdgesToHead(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,7 +208,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
|
|
||||||
private void addCheckedEdgesToHead(VendorsBuildEdge lastEdge){
|
private void addCheckedEdgesToHead(VendorsBuildEdge lastEdge){
|
||||||
Vertex<Vendor> target = lastEdge.getTarget();
|
Vertex<Vendor> target = lastEdge.getTarget();
|
||||||
assert vertex.getEntry() instanceof TransitVendor && !(target.getEntry() instanceof TransitVendor);
|
assert vertex.getEntry().isTransit() && !target.getEntry().isTransit();
|
||||||
List<Path<Vendor>> paths = lastEdge.paths;
|
List<Path<Vendor>> paths = lastEdge.paths;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
Path<Vendor> path = paths != null ? paths.get(0) : new Path<>(Collections.singleton((BuildEdge)lastEdge));
|
Path<Vendor> path = paths != null ? paths.get(0) : new Path<>(Collections.singleton((BuildEdge)lastEdge));
|
||||||
@@ -232,7 +232,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
if (!source.equals(target)){
|
if (!source.equals(target)){
|
||||||
addEdge(source, target, path);
|
addEdge(source, target, path);
|
||||||
}
|
}
|
||||||
if (!(source.getEntry() instanceof TransitVendor)){
|
if (!source.getEntry().isTransit()){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
h = h.head;
|
h = h.head;
|
||||||
@@ -256,7 +256,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
|
|||||||
@Override
|
@Override
|
||||||
protected void addSubTask(Edge<Vendor> edge, double nextLimit) {
|
protected void addSubTask(Edge<Vendor> edge, double nextLimit) {
|
||||||
Vertex<Vendor> next = edge.getTarget();
|
Vertex<Vendor> next = edge.getTarget();
|
||||||
if (next.getLevel() >= deep && next.getEntry() instanceof TransitVendor) {
|
if (next.getLevel() >= deep && next.getEntry().isTransit()) {
|
||||||
if (deep > 0){
|
if (deep > 0){
|
||||||
VendorsGraphBuilder task = new VendorsGraphBuilder(this, (BuildEdge) edge, set, deep - 1, nextLimit);
|
VendorsGraphBuilder task = new VendorsGraphBuilder(this, (BuildEdge) edge, set, deep - 1, nextLimit);
|
||||||
task.isAdding = true;
|
task.isAdding = true;
|
||||||
|
|||||||
@@ -85,4 +85,8 @@ public interface Vendor extends Connectable<Vendor> {
|
|||||||
remove(offer);
|
remove(offer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default boolean isTransit(){
|
||||||
|
return this instanceof TransitVendor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user