From 829e3ac5f5636d3480e9c2a635d91991a862bf8f Mon Sep 17 00:00:00 2001 From: iMoHax Date: Fri, 25 Sep 2015 16:21:57 +0300 Subject: [PATCH] add missions to route entry --- .../trader/controllers/HelperController.java | 4 +++ .../controllers/RouteSearchController.java | 2 +- .../java/ru/trader/model/MissionModel.java | 12 ++++--- .../java/ru/trader/model/RouteEntryModel.java | 14 ++++++++ .../main/java/ru/trader/model/RouteModel.java | 35 +++++++++++++++---- client/src/main/resources/view/helper.fxml | 6 +++- .../main/java/ru/trader/analysis/Route.java | 16 +++++++++ .../java/ru/trader/analysis/RouteFiller.java | 18 +++++++--- .../ru/trader/analysis/RouteFillerTest.java | 3 +- 9 files changed, 93 insertions(+), 17 deletions(-) diff --git a/client/src/main/java/ru/trader/controllers/HelperController.java b/client/src/main/java/ru/trader/controllers/HelperController.java index b4b72a6..ee8b05f 100644 --- a/client/src/main/java/ru/trader/controllers/HelperController.java +++ b/client/src/main/java/ru/trader/controllers/HelperController.java @@ -12,6 +12,7 @@ import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.stage.Stage; import ru.trader.KeyBinding; +import ru.trader.model.MissionModel; import ru.trader.model.OrderModel; import ru.trader.model.RouteEntryModel; import ru.trader.model.RouteModel; @@ -36,6 +37,8 @@ public class HelperController { private ListView buyOrders; @FXML private ListView sellOrders; + @FXML + private ListView missions; private Stage stage; private RouteModel route; @@ -81,6 +84,7 @@ public class HelperController { refuel.setText(String.valueOf(entry.getRefill())); buyOrders.setItems(entry.orders()); sellOrders.setItems(entry.sellOrders()); + missions.setItems(entry.missions()); } @FXML diff --git a/client/src/main/java/ru/trader/controllers/RouteSearchController.java b/client/src/main/java/ru/trader/controllers/RouteSearchController.java index b10054f..afbecdc 100644 --- a/client/src/main/java/ru/trader/controllers/RouteSearchController.java +++ b/client/src/main/java/ru/trader/controllers/RouteSearchController.java @@ -82,7 +82,7 @@ public class RouteSearchController { Optional path = Screeners.showRouters(routes); if (path.isPresent()){ RouteModel route = path.get(); - route.addAll(missionsList.getItems()); + route.addAll(0, missionsList.getItems()); Screeners.showHelper(route); } }); diff --git a/client/src/main/java/ru/trader/model/MissionModel.java b/client/src/main/java/ru/trader/model/MissionModel.java index e02ecf6..06e5dac 100644 --- a/client/src/main/java/ru/trader/model/MissionModel.java +++ b/client/src/main/java/ru/trader/model/MissionModel.java @@ -9,12 +9,14 @@ public class MissionModel { private final ItemModel item; private final long count; private final double profit; + private final Offer offer; public MissionModel(StationModel target, double profit) { this.target = target; this.profit = profit; item = null; count = 0; + offer = null; } public MissionModel(StationModel target, long count, double profit) { @@ -22,6 +24,7 @@ public class MissionModel { this.count = count; this.profit = profit; this.item = null; + offer = null; } @@ -30,6 +33,7 @@ public class MissionModel { this.item = item; this.count = count; this.profit = profit; + offer = SimpleOffer.fakeBuy(target.getStation(), item.getItem(), profit/count, count); } public StationModel getTarget() { @@ -49,7 +53,7 @@ public class MissionModel { } public boolean isSupply(){ - return item != null; + return offer != null; } public boolean isDelivery(){ @@ -72,14 +76,14 @@ public class MissionModel { public void toSpecification(CrawlerSpecificator specificator){ if (isSupply()){ - specificator.buy(toOffer()); + specificator.buy(offer); } else if (isCourier() || isDelivery()){ specificator.add(target.getStation(), true); } } - Offer toOffer(){ - return isSupply() ? SimpleOffer.fakeBuy(target.getStation(), item.getItem(), profit/count, count) : null; + Offer getOffer(){ + return offer; } } diff --git a/client/src/main/java/ru/trader/model/RouteEntryModel.java b/client/src/main/java/ru/trader/model/RouteEntryModel.java index 2c2705f..f368e02 100644 --- a/client/src/main/java/ru/trader/model/RouteEntryModel.java +++ b/client/src/main/java/ru/trader/model/RouteEntryModel.java @@ -17,6 +17,7 @@ public class RouteEntryModel { private final DoubleProperty profit; private final ObservableList orders; private final ObservableList sellOrders; + private final ObservableList missions; RouteEntryModel(RouteEntry entry, MarketModel market) { this.entry = entry; @@ -24,6 +25,7 @@ public class RouteEntryModel { List orderList = entry.getOrders(); orders = BindingsHelper.observableList(orderList, market.getModeler()::get); sellOrders = FXCollections.observableArrayList(); + missions = FXCollections.observableArrayList(); profit = new SimpleDoubleProperty(); profit.bind(BindingsHelper.group(Double::sum, OrderModel::profitProperty, orders)); } @@ -32,6 +34,14 @@ public class RouteEntryModel { sellOrders.add(order); } + void add(MissionModel mission){ + missions.add(mission); + } + + void remove(MissionModel mission){ + missions.remove(mission); + } + public StationModel getStation() { return station; } @@ -68,6 +78,10 @@ public class RouteEntryModel { return sellOrders; } + public ObservableList missions() { + return missions; + } + void refresh(MarketModel market){ orders.clear(); orders.addAll(BindingsHelper.observableList(entry.getOrders(), market.getModeler()::get)); diff --git a/client/src/main/java/ru/trader/model/RouteModel.java b/client/src/main/java/ru/trader/model/RouteModel.java index e4dac48..5e81b7b 100644 --- a/client/src/main/java/ru/trader/model/RouteModel.java +++ b/client/src/main/java/ru/trader/model/RouteModel.java @@ -121,25 +121,48 @@ public class RouteModel { return new RouteModel(_route, market); } - public void add(MissionModel mission){ + public void add(int offset, MissionModel mission){ + int completeIndex = -1; long cargo = MainController.getProfile().getShipCargo(); - Offer offer = mission.toOffer(); + Offer offer = mission.getOffer(); if (offer != null){ - RouteFiller.addOrders(_route, 0, offer, cargo); + completeIndex = RouteFiller.addOrders(_route, offset, offer, cargo); for (RouteEntryModel entry : entries) { entry.sellOrders().clear(); entry.refresh(market); } fillSellOrders(); + } else + if (mission.isDelivery()){ + completeIndex = RouteFiller.reservedCargo(_route, offset, mission.getTarget().getStation(), mission.getCount(), cargo); + for (RouteEntryModel entry : entries) { + entry.refresh(market); + } + } else + if (mission.isCourier()){ + completeIndex = _route.find(mission.getTarget().getStation(), offset); + } + if (completeIndex != -1){ + entries.get(completeIndex).add(mission); } } - public void addAll(Collection missions){ + public void addAll(int offset, Collection missions){ long cargo = MainController.getProfile().getShipCargo(); for (MissionModel mission : missions) { - Offer offer = mission.toOffer(); + Offer offer = mission.getOffer(); + int completeIndex = -1; if (offer != null){ - RouteFiller.addOrders(_route, 0, offer, cargo); + completeIndex = RouteFiller.addOrders(_route, offset, offer, cargo); + } else + if (mission.isDelivery()){ + completeIndex = RouteFiller.reservedCargo(_route, offset, mission.getTarget().getStation(), mission.getCount(), cargo); + } else + if (mission.isCourier()){ + completeIndex = _route.find(mission.getTarget().getStation(), offset); + } + if (completeIndex != -1){ + entries.get(completeIndex).add(mission); } } for (RouteEntryModel entry : entries) { diff --git a/client/src/main/resources/view/helper.fxml b/client/src/main/resources/view/helper.fxml index 1c3bfd5..f429f5e 100644 --- a/client/src/main/resources/view/helper.fxml +++ b/client/src/main/resources/view/helper.fxml @@ -14,7 +14,7 @@ - + + +