add orders previous vendors if current hasn't market
This commit is contained in:
@@ -3,10 +3,7 @@ package ru.trader.analysis;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.trader.analysis.graph.*;
|
||||
import ru.trader.core.Order;
|
||||
import ru.trader.core.Place;
|
||||
import ru.trader.core.Profile;
|
||||
import ru.trader.core.Vendor;
|
||||
import ru.trader.core.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -128,6 +125,16 @@ public class RouteSearcher {
|
||||
}
|
||||
}
|
||||
|
||||
private static RouteEntry find(Vendor vendor, List<RouteEntry> entries){
|
||||
for (int i = entries.size() - 1; i >= 0; i--) {
|
||||
RouteEntry entry = entries.get(i);
|
||||
if (entry.getVendor().equals(vendor)){
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException(String.format("Wrong route, vendor %s not found", vendor));
|
||||
}
|
||||
|
||||
public static Route toRoute(List<Edge<Vendor>> edges, final Scorer scorer){
|
||||
List<RouteEntry> entries = new ArrayList<>(edges.size()+1);
|
||||
Vendor buyer = null;
|
||||
@@ -149,8 +156,20 @@ public class RouteSearcher {
|
||||
entry.setFullTime(vEdge.getTime());
|
||||
List<Order> orders = vEdge.getOrders();
|
||||
if (!orders.isEmpty()) {
|
||||
Vendor seller = orders.get(0).getSeller();
|
||||
RouteEntry sellerEntry;
|
||||
if (entry.getVendor().equals(seller)){
|
||||
sellerEntry = entry;
|
||||
} else {
|
||||
sellerEntry = find(seller, entries);
|
||||
entry.setLand(true);
|
||||
}
|
||||
buyer = orders.get(0).getBuyer();
|
||||
entry.addAll(orders);
|
||||
sellerEntry.addAll(orders);
|
||||
} else {
|
||||
if (!(vendor instanceof TransitVendor)){
|
||||
entry.setLand(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (prev != null){
|
||||
@@ -162,7 +181,7 @@ public class RouteSearcher {
|
||||
}
|
||||
if (vEdge != null) {
|
||||
RouteEntry entry = new RouteEntry(vEdge.getTarget().getEntry(), 0, 0, 0);
|
||||
if (buyer != null) entry.setLand(true);
|
||||
if (!(entry.getVendor() instanceof TransitVendor)) entry.setLand(true);
|
||||
if (prev != null){
|
||||
prev.setTime(scorer.getTime(entry, prev));
|
||||
}
|
||||
|
||||
@@ -3,10 +3,13 @@ package ru.trader.analysis;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import ru.trader.analysis.graph.*;
|
||||
import ru.trader.core.Order;
|
||||
import ru.trader.core.SERVICE_TYPE;
|
||||
import ru.trader.core.Vendor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class VendorsCrawler extends Crawler<Vendor> {
|
||||
@@ -77,7 +80,16 @@ public class VendorsCrawler extends Crawler<Vendor> {
|
||||
Path<Vendor> path = edge.getPath(fuel);
|
||||
if (path == null) return null;
|
||||
VendorsEdge res = new VendorsEdge(edge.getSource(), edge.getTarget(), new TransitPath(path, fuel));
|
||||
res.setOrders(MarketUtils.getStack(edge.getOrders(), balance, getScorer().getProfile().getShip().getCargo()));
|
||||
List<Order> orders = Collections.emptyList();
|
||||
if (edge.getSource().getEntry().has(SERVICE_TYPE.MARKET) || !edge.getTarget().getEntry().has(SERVICE_TYPE.MARKET)){
|
||||
orders = edge.getOrders();
|
||||
} else {
|
||||
Vendor seller = findMarket();
|
||||
if (seller != null) {
|
||||
orders = MarketUtils.getOrders(seller, edge.getTarget().getEntry());
|
||||
}
|
||||
}
|
||||
res.setOrders(MarketUtils.getStack(orders, balance, getScorer().getProfile().getShip().getCargo()));
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -88,6 +100,18 @@ public class VendorsCrawler extends Crawler<Vendor> {
|
||||
}
|
||||
return weight;
|
||||
}
|
||||
|
||||
|
||||
private Vendor findMarket(){
|
||||
Optional<Traversal<Vendor>> head = getHead();
|
||||
while (head.isPresent()) {
|
||||
Traversal<Vendor> curr = head.get();
|
||||
Vendor vendor = curr.getTarget().getEntry();
|
||||
if (vendor.has(SERVICE_TYPE.MARKET)) return vendor;
|
||||
head = curr.getHead();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class VendorsEdge extends ConnectibleEdge<Vendor> {
|
||||
|
||||
Reference in New Issue
Block a user