Archived
0

add orders previous vendors if current hasn't market

This commit is contained in:
Mo
2015-10-23 19:22:45 +03:00
parent 35c88fc4b1
commit 7ce10465af
2 changed files with 50 additions and 7 deletions

View File

@@ -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));
}

View File

@@ -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> {