Archived
0

remove routes from search if don't can reserve cargo

This commit is contained in:
iMoHax
2016-03-23 11:14:51 +03:00
parent 08850417be
commit 828dcf84b0
4 changed files with 50 additions and 23 deletions

View File

@@ -8,6 +8,8 @@ import ru.trader.view.support.autocomplete.AutoCompletion;
import ru.trader.view.support.autocomplete.CachedSuggestionProvider; import ru.trader.view.support.autocomplete.CachedSuggestionProvider;
import ru.trader.view.support.autocomplete.SystemsProvider; import ru.trader.view.support.autocomplete.SystemsProvider;
import java.util.Collection;
import java.util.Iterator;
import java.util.Optional; import java.util.Optional;
public class RouteSearchController { public class RouteSearchController {
@@ -104,11 +106,16 @@ public class RouteSearchController {
specificator.setFullScan(cbFullScan.isSelected()); specificator.setFullScan(cbFullScan.isSelected());
missionsList.getItems().forEach(m -> m.toSpecification(specificator)); missionsList.getItems().forEach(m -> m.toSpecification(specificator));
market.getRoutes(f, fS, t, tS, profile.getBalance(), specificator, routes -> { market.getRoutes(f, fS, t, tS, profile.getBalance(), specificator, routes -> {
for (Iterator<RouteModel> iterator = routes.iterator(); iterator.hasNext(); ) {
RouteModel route = iterator.next();
Collection<MissionModel> notAdded = route.addAll(0, missionsList.getItems());
if (!notAdded.isEmpty()){
iterator.remove();
}
}
Optional<RouteModel> path = Screeners.showRouters(routes); Optional<RouteModel> path = Screeners.showRouters(routes);
if (path.isPresent()) { if (path.isPresent()) {
RouteModel route = path.get(); profile.setRoute(path.get());
route.addAll(0, missionsList.getItems());
profile.setRoute(route);
Screeners.showTrackTab(); Screeners.showTrackTab();
} }
}); });

View File

@@ -223,22 +223,24 @@ public class RouteModel {
if (offer != null){ if (offer != null){
Collection<RouteReserve> reserves = RouteFiller.getReserves(_route, offset, offer); Collection<RouteReserve> reserves = RouteFiller.getReserves(_route, offset, offer);
if (!reserves.isEmpty()) { if (!reserves.isEmpty()) {
_route.reserve(reserves); if (_route.reserve(reserves)){
mission.setReserves(reserves); mission.setReserves(reserves);
completeIndex = RouteReserve.getCompleteIndex(reserves, offset); completeIndex = RouteReserve.getCompleteIndex(reserves, offset);
refresh(); refresh();
} }
}
} else } else
if (mission.isDelivery()){ if (mission.isDelivery()){
RouteReserve reserve = RouteFiller.getReserves(_route, offset, ModelFabric.get(mission.getTarget()), mission.getCount()); RouteReserve reserve = RouteFiller.getReserves(_route, offset, ModelFabric.get(mission.getTarget()), mission.getCount());
if (reserve != null) { if (reserve != null) {
_route.reserve(reserve); if (_route.reserve(reserve)){
mission.setReserves(Collections.singleton(reserve)); mission.setReserves(Collections.singleton(reserve));
completeIndex = reserve.getToIndex(); completeIndex = reserve.getToIndex();
for (RouteEntryModel entry : entries) { for (RouteEntryModel entry : entries) {
entry.refresh(market); entry.refresh(market);
} }
} }
}
} else } else
if (mission.isCourier()){ if (mission.isCourier()){
completeIndex = _route.find(ModelFabric.get(mission.getTarget()), offset+1); completeIndex = _route.find(ModelFabric.get(mission.getTarget()), offset+1);
@@ -264,18 +266,20 @@ public class RouteModel {
reserves = RouteFiller.getReserves(_route, offset, offer); reserves = RouteFiller.getReserves(_route, offset, offer);
} }
if (!reserves.isEmpty()) { if (!reserves.isEmpty()) {
_route.reserve(reserves); if (_route.reserve(reserves)){
mission.setReserves(reserves); mission.setReserves(reserves);
completeIndex = RouteReserve.getCompleteIndex(reserves, offset); completeIndex = RouteReserve.getCompleteIndex(reserves, offset);
} }
}
} else } else
if (mission.isDelivery()){ if (mission.isDelivery()){
RouteReserve reserve = RouteFiller.getReserves(_route, offset, ModelFabric.get(mission.getTarget()), mission.getCount()); RouteReserve reserve = RouteFiller.getReserves(_route, offset, ModelFabric.get(mission.getTarget()), mission.getCount());
if (reserve != null) { if (reserve != null) {
_route.reserve(reserve); if (_route.reserve(reserve)){
mission.setReserves(Collections.singleton(reserve)); mission.setReserves(Collections.singleton(reserve));
completeIndex = reserve.getToIndex(); completeIndex = reserve.getToIndex();
} }
}
} else } else
if (mission.isCourier()){ if (mission.isCourier()){
completeIndex = _route.find(ModelFabric.get(mission.getTarget()), offset+1); completeIndex = _route.find(ModelFabric.get(mission.getTarget()), offset+1);

View File

@@ -167,22 +167,30 @@ public class Route implements Comparable<Route> {
return -1; return -1;
} }
public void reserve(final RouteReserve reserve){ public boolean reserve(final RouteReserve reserve){
for (Route.LoopIterator iterator = loopIterator(reserve.getFromIndex()); iterator.hasNext(); ) { for (Route.LoopIterator iterator = loopIterator(reserve.getFromIndex()); iterator.hasNext(); ) {
RouteEntry entry = iterator.next(); RouteEntry entry = iterator.next();
if (entry.isTransit()) continue; if (entry.isTransit()) continue;
if (iterator.getRealIndex() == reserve.getToIndex() && (reserve.getFromIndex() != reserve.getToIndex() || iterator.getIndex() > 0)) { if (iterator.getRealIndex() == reserve.getToIndex() && (reserve.getFromIndex() != reserve.getToIndex() || iterator.getIndex() > 0)) {
break; break;
} }
entry.reserve(reserve.getCount(), cargo); if (!entry.reserve(reserve.getCount(), cargo)){
return false;
}
} }
if (reserve.getOrder() != null) { if (reserve.getOrder() != null) {
entries.get(reserve.getFromIndex()).addOrder(reserve.getOrder()); entries.get(reserve.getFromIndex()).addOrder(reserve.getOrder());
} }
return true;
} }
public void reserve(Collection<RouteReserve> reserves){ public boolean reserve(Collection<RouteReserve> reserves){
reserves.forEach(this::reserve); for (RouteReserve reserve : reserves) {
if (!reserve(reserve)){
return false;
}
}
return true;
} }
public void unreserve(final RouteReserve reserve){ public void unreserve(final RouteReserve reserve){
@@ -268,6 +276,13 @@ public class Route implements Comparable<Route> {
LOG.trace("new stats profit={}, distance={}, lands={}, fuel={}, time={}", profit, distance, lands, fuel, time); LOG.trace("new stats profit={}, distance={}, lands={}, fuel={}, time={}", profit, distance, lands, fuel, time);
} }
public boolean isOverload(){
for (RouteEntry entry : entries) {
if (entry.getCargo() > cargo) return true;
}
return false;
}
@Override @Override
public int compareTo(@NotNull Route o) { public int compareTo(@NotNull Route o) {
return Double.compare(getScore(), o.getScore()); return Double.compare(getScore(), o.getScore());

View File

@@ -142,7 +142,7 @@ public class RouteEntry {
return orders.stream().filter(o -> o.fixed).collect(Collectors.toList()); return orders.stream().filter(o -> o.fixed).collect(Collectors.toList());
} }
void reserve(final long count, final long cargo){ boolean reserve(final long count, final long cargo){
long empty = cargo - getCargo(); long empty = cargo - getCargo();
long need = count - empty; long need = count - empty;
if (need > 0){ if (need > 0){
@@ -159,6 +159,7 @@ public class RouteEntry {
} }
} }
reserved += count; reserved += count;
return need <= 0;
} }
void fill(long count){ void fill(long count){