remove routes from search if don't can reserve cargo
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
Reference in New Issue
Block a user