diff --git a/client/src/main/java/ru/trader/controllers/StationEditorController.java b/client/src/main/java/ru/trader/controllers/StationEditorController.java index d6c6799..00169d0 100644 --- a/client/src/main/java/ru/trader/controllers/StationEditorController.java +++ b/client/src/main/java/ru/trader/controllers/StationEditorController.java @@ -8,9 +8,7 @@ import javafx.util.converter.LongStringConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.EMDNUpdater; -import ru.trader.core.FACTION; -import ru.trader.core.GOVERNMENT; -import ru.trader.core.SERVICE_TYPE; +import ru.trader.core.*; import ru.trader.model.ItemModel; import ru.trader.model.StationModel; import ru.trader.model.SystemModel; @@ -27,12 +25,16 @@ public class StationEditorController { @FXML private TextField name; - + @FXML + private ComboBox type; @FXML private ComboBox faction; - @FXML private ComboBox government; + @FXML + private ComboBox economic; + @FXML + private ComboBox subEconomic; @FXML private TableView items; @@ -72,10 +74,16 @@ public class StationEditorController { @FXML private void initialize() { + type.setItems(FXCollections.observableArrayList(STATION_TYPE.values())); + type.setConverter(new StationTypeStringConverter()); faction.setItems(FXCollections.observableArrayList(FACTION.values())); faction.setConverter(new FactionStringConverter()); government.setItems(FXCollections.observableArrayList(GOVERNMENT.values())); government.setConverter(new GovernmentStringConverter()); + economic.setItems(FXCollections.observableArrayList(ECONOMIC_TYPE.values())); + economic.setConverter(new EconomicTypeStringConverter()); + subEconomic.setItems(FXCollections.observableArrayList(ECONOMIC_TYPE.values())); + subEconomic.setConverter(new EconomicTypeStringConverter()); items.getSelectionModel().setCellSelectionEnabled(true); buy.setCellFactory(EditOfferCell.forTable(new PriceStringConverter(), false)); sell.setCellFactory(EditOfferCell.forTable(new PriceStringConverter(), true)); @@ -92,15 +100,21 @@ public class StationEditorController { void init(){ if (updater != null){ name.textProperty().unbindBidirectional(updater.nameProperty()); + type.valueProperty().unbindBidirectional(updater.typeProperty()); faction.valueProperty().unbindBidirectional(updater.factionProperty()); government.valueProperty().unbindBidirectional(updater.governmentProperty()); distance.numberProperty().unbindBidirectional(updater.distanceProperty()); + economic.valueProperty().unbindBidirectional(updater.economicProperty()); + subEconomic.valueProperty().unbindBidirectional(updater.subEconomicProperty()); } updater = new StationUpdater(MainController.getMarket()); name.textProperty().bindBidirectional(updater.nameProperty()); + type.valueProperty().bindBidirectional(updater.typeProperty()); faction.valueProperty().bindBidirectional(updater.factionProperty()); government.valueProperty().bindBidirectional(updater.governmentProperty()); distance.numberProperty().bindBidirectional(updater.distanceProperty()); + economic.valueProperty().bindBidirectional(updater.economicProperty()); + subEconomic.valueProperty().bindBidirectional(updater.subEconomicProperty()); cbMarket.selectedProperty().bindBidirectional(updater.serviceProperty(SERVICE_TYPE.MARKET)); cbBlackMarket.selectedProperty().bindBidirectional(updater.serviceProperty(SERVICE_TYPE.BLACK_MARKET)); cbRefuel.selectedProperty().bindBidirectional(updater.serviceProperty(SERVICE_TYPE.REFUEL)); diff --git a/client/src/main/java/ru/trader/model/StationModel.java b/client/src/main/java/ru/trader/model/StationModel.java index 6a65de7..e2b2d29 100644 --- a/client/src/main/java/ru/trader/model/StationModel.java +++ b/client/src/main/java/ru/trader/model/StationModel.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.core.*; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -51,6 +52,15 @@ public class StationModel { return station.getFullName(); } + public STATION_TYPE getType() {return station.getType();} + + public void setType(STATION_TYPE type) { + STATION_TYPE oldType = getType(); + if (oldType != null && oldType.equals(type) || type == null) return; + LOG.info("Change type station {} to {}", station, type); + station.setType(type); + } + public FACTION getFaction() {return station.getFaction();} public void setFaction(FACTION faction) { @@ -69,6 +79,24 @@ public class StationModel { station.setGovernment(government); } + public ECONOMIC_TYPE getEconomic() {return station.getEconomic();} + + public void setEconomic(ECONOMIC_TYPE economic) { + ECONOMIC_TYPE oldEconomic = getEconomic(); + if (oldEconomic != null && oldEconomic.equals(economic) || economic == null) return; + LOG.info("Change economic of station {} to {}", station, economic); + station.setEconomic(economic); + } + + public ECONOMIC_TYPE getSubEconomic() {return station.getSubEconomic();} + + public void setSubEconomic(ECONOMIC_TYPE economic) { + ECONOMIC_TYPE oldEconomic = getSubEconomic(); + if (oldEconomic != null && oldEconomic.equals(economic) || economic == null) return; + LOG.info("Change sub economic of station {} to {}", station, economic); + station.setSubEconomic(economic); + } + public double getDistance(){ return station.getDistance(); } @@ -138,6 +166,10 @@ public class StationModel { return station.getDistance(other.station); } + public LocalDateTime getModifiedTime(){ + return station.getModifiedTime(); + } + @Override public String toString() { if (LOG.isTraceEnabled()){ diff --git a/client/src/main/java/ru/trader/model/support/StationUpdater.java b/client/src/main/java/ru/trader/model/support/StationUpdater.java index 8d176ba..ca42a33 100644 --- a/client/src/main/java/ru/trader/model/support/StationUpdater.java +++ b/client/src/main/java/ru/trader/model/support/StationUpdater.java @@ -5,10 +5,7 @@ import javafx.collections.ObservableList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.controllers.MainController; -import ru.trader.core.FACTION; -import ru.trader.core.GOVERNMENT; -import ru.trader.core.OFFER_TYPE; -import ru.trader.core.SERVICE_TYPE; +import ru.trader.core.*; import ru.trader.model.*; import java.util.Optional; @@ -19,8 +16,11 @@ public class StationUpdater { private final static SERVICE_TYPE[] SERVICE_TYPES = SERVICE_TYPE.values(); private final ObservableList offers; private final StringProperty name; + private final ObjectProperty type; private final ObjectProperty faction; private final ObjectProperty government; + private final ObjectProperty economic; + private final ObjectProperty subEconomic; private final DoubleProperty distance; private final BooleanProperty[] services; private final MarketModel market; @@ -33,9 +33,12 @@ public class StationUpdater { this.market = market; this.offers = BindingsHelper.observableList(MainController.getMarket().itemsProperty(), FakeOffer::new); this.name = new SimpleStringProperty(); + this.type = new SimpleObjectProperty<>(); this.distance = new SimpleDoubleProperty(0); this.faction = new SimpleObjectProperty<>(FACTION.NONE); this.government = new SimpleObjectProperty<>(GOVERNMENT.NONE); + this.economic = new SimpleObjectProperty<>(ECONOMIC_TYPE.NONE); + this.subEconomic = new SimpleObjectProperty<>(ECONOMIC_TYPE.NONE); this.services = new BooleanProperty[SERVICE_TYPES.length]; for (int i = 0; i < services.length; i++) { services[i] = new SimpleBooleanProperty(); @@ -60,9 +63,12 @@ public class StationUpdater { } if (station != null){ name.setValue(station.getName()); + type.setValue(station.getType()); faction.setValue(station.getFaction()); government.setValue(station.getGovernment()); distance.setValue(station.getDistance()); + economic.setValue(station.getEconomic()); + subEconomic.setValue(station.getSubEconomic()); for (SERVICE_TYPE service : station.getServices()) { serviceProperty(service).set(true); } @@ -70,9 +76,12 @@ public class StationUpdater { station.getBuys().forEach(this::fillOffer); } else { name.setValue(""); + type.setValue(null); faction.setValue(FACTION.NONE); government.setValue(GOVERNMENT.NONE); distance.setValue(0); + economic.setValue(ECONOMIC_TYPE.NONE); + subEconomic.setValue(ECONOMIC_TYPE.NONE); } } @@ -116,6 +125,18 @@ public class StationUpdater { this.name.set(name); } + public STATION_TYPE getType() { + return type.get(); + } + + public ObjectProperty typeProperty() { + return type; + } + + public void setType(STATION_TYPE type) { + this.type.set(type); + } + public FACTION getFaction() { return faction.get(); } @@ -152,6 +173,30 @@ public class StationUpdater { this.distance.set(distance); } + public ECONOMIC_TYPE getEconomic() { + return economic.get(); + } + + public ObjectProperty economicProperty() { + return economic; + } + + public void setEconomic(ECONOMIC_TYPE economic) { + this.economic.set(economic); + } + + public ECONOMIC_TYPE getSubEconomic() { + return subEconomic.get(); + } + + public ObjectProperty subEconomicProperty() { + return subEconomic; + } + + public void setSubEconomic(ECONOMIC_TYPE subEconomic) { + this.subEconomic.set(subEconomic); + } + public BooleanProperty serviceProperty(SERVICE_TYPE service){ return services[service.ordinal()]; } @@ -166,34 +211,31 @@ public class StationUpdater { Notificator notificator = market.getNotificator(); notificator.setAlert(false); station = system.add(name.get()); - station.setFaction(faction.get()); - station.setGovernment(government.get()); - station.setDistance(distance.get()); - for (int i = 0; i < services.length; i++) { - if (services[i].get()){ - station.addService(SERVICE_TYPES[i]); - } - } - offers.forEach(FakeOffer::commit); + updateStation(); notificator.setAlert(true); notificator.sendAdd(station); } else { station.setName(name.get()); - station.setFaction(faction.get()); - station.setGovernment(government.get()); - station.setDistance(distance.get()); - for (int i = 0; i < services.length; i++) { - if (services[i].get()){ - station.addService(SERVICE_TYPES[i]); - } else { - station.removeService(SERVICE_TYPES[i]); - } - } - offers.forEach(FakeOffer::commit); + updateStation(); } return station; } + private void updateStation(){ + station.setType(type.get()); + station.setFaction(faction.get()); + station.setGovernment(government.get()); + station.setDistance(distance.get()); + station.setEconomic(economic.get()); + station.setSubEconomic(subEconomic.get()); + for (int i = 0; i < services.length; i++) { + if (services[i].get()){ + station.addService(SERVICE_TYPES[i]); + } + } + offers.forEach(FakeOffer::commit); + } + public void reset(){ offers.forEach(FakeOffer::reset); station = null; diff --git a/client/src/main/java/ru/trader/view/support/EconomicTypeStringConverter.java b/client/src/main/java/ru/trader/view/support/EconomicTypeStringConverter.java new file mode 100644 index 0000000..df69f02 --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/EconomicTypeStringConverter.java @@ -0,0 +1,24 @@ +package ru.trader.view.support; + + +import javafx.util.StringConverter; +import ru.trader.core.ECONOMIC_TYPE; + + +public class EconomicTypeStringConverter extends StringConverter { + + @Override + public String toString(ECONOMIC_TYPE economic) { + return toLocalizationString(economic); + } + + @Override + public ECONOMIC_TYPE fromString(String economic) { + return ECONOMIC_TYPE.valueOf(economic); + } + + public static String toLocalizationString(ECONOMIC_TYPE economic){ + if (economic == null) return null; + return Localization.getString("economic." + economic.toString(), economic.toString()); + } +} diff --git a/client/src/main/java/ru/trader/view/support/StationTypeStringConverter.java b/client/src/main/java/ru/trader/view/support/StationTypeStringConverter.java new file mode 100644 index 0000000..7e0090c --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/StationTypeStringConverter.java @@ -0,0 +1,24 @@ +package ru.trader.view.support; + + +import javafx.util.StringConverter; +import ru.trader.core.STATION_TYPE; + + +public class StationTypeStringConverter extends StringConverter { + + @Override + public String toString(STATION_TYPE type) { + return toLocalizationString(type); + } + + @Override + public STATION_TYPE fromString(String type) { + return STATION_TYPE.valueOf(type); + } + + public static String toLocalizationString(STATION_TYPE type){ + if (type == null) return null; + return Localization.getString("station." + type.toString(), type.toString()); + } +} diff --git a/client/src/main/resources/lang/locale.properties b/client/src/main/resources/lang/locale.properties index 3e6f2a0..f734aac 100644 --- a/client/src/main/resources/lang/locale.properties +++ b/client/src/main/resources/lang/locale.properties @@ -1,3 +1,18 @@ +station.STARPORT=Starport +station.CORIOLIS_STARPORT=Coriolis Starport +station.OCELLUS_STARPORT=Ocellus Starport +station.ORBIS_STARPORT=Orbis Starport +station.OUTPOST=Outpost +station.CIVILIAN_OUTPOST=Civilian Outpost +station.COMMERCIAL_OUTPOST=Commercial Outpost +station.INDUSTRIAL_OUTPOST=Industrial Outpost +station.MILITARY_OUTPOST=Military Outpost +station.MINING_OUTPOST=Mining Outpost +station.SCIENTIFIC_OUTPOST=Scientific Outpost +station.UNSANCTIONED_OUTPOST=Unsanctioned Outpost +station.PLANETARY_PORT=Planetary Port +station.PLANETARY_OUTPOST=Planetary Outpost + faction.FEDERATION=Federation faction.EMPIRE=Empire faction.ALLIANCE=Alliance @@ -29,6 +44,18 @@ services.REFUEL=Refuel services.MEDIUM_LANDPAD=Medium Pad services.LARGE_LANDPAD=Large Pad +economic.AGRICULTURE=Agriculture +economic.EXTRACTION=Extraction +economic.HIGH_TECH=High Tech +economic.INDUSTRIAL=Industrial +economic.MILITARY=Military +economic.REFINERY=Refinery +economic.SERVICE=Service +economic.TERRAFORMING=Terraforming +economic.TOURISM=Tourism +economic.COLONY=Colony +economic.NONE=None + item.group.chemicals=Chemicals item.explosives=Explosives item.hydrogenfuel=Hydrogen Fuel diff --git a/client/src/main/resources/lang/locale_en_US.properties b/client/src/main/resources/lang/locale_en_US.properties index d5b588a..6c86f2f 100644 --- a/client/src/main/resources/lang/locale_en_US.properties +++ b/client/src/main/resources/lang/locale_en_US.properties @@ -10,6 +10,8 @@ market.system.name=System market.station.name=Station market.allegiance=Allegiance market.government=Government +market.economic=Economy +market.station.type=Station type # Offer market.offer.buy=Buy diff --git a/client/src/main/resources/lang/locale_ru_RU.properties b/client/src/main/resources/lang/locale_ru_RU.properties index 5caca57..0feadcd 100644 --- a/client/src/main/resources/lang/locale_ru_RU.properties +++ b/client/src/main/resources/lang/locale_ru_RU.properties @@ -10,6 +10,8 @@ market.system.name=\u0421\u0438\u0441\u0442\u0435\u043C\u0430 market.station.name=\u0421\u0442\u0430\u043D\u0446\u0438\u044F market.allegiance=\u041F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u043D\u043E\u0441\u0442\u044C market.government=\u0424\u043E\u0440\u043C\u0430 \u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F +market.economic=\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430 +market.station.type=\u0422\u0438\u043F \u0441\u0442\u0430\u043D\u0446\u0438\u0438 # Offer market.offer.buy=\u041F\u043E\u043A\u0443\u043F\u043A\u0430 diff --git a/client/src/main/resources/lang/locale_ru_RU_FULL.properties b/client/src/main/resources/lang/locale_ru_RU_FULL.properties index 9268369..57cc4d3 100644 --- a/client/src/main/resources/lang/locale_ru_RU_FULL.properties +++ b/client/src/main/resources/lang/locale_ru_RU_FULL.properties @@ -1,5 +1,20 @@ main.menu.settings.language.item=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 +station.STARPORT=\u041A\u043E\u0441\u043C\u043E\u043F\u043E\u0440\u0442 +station.CORIOLIS_STARPORT=\u041A\u043E\u0441\u043C\u043E\u043F\u043E\u0440\u0442 "\u041A\u043E\u0440\u0438\u043E\u043B\u0438\u0441" +station.OCELLUS_STARPORT=\u041A\u043E\u0441\u043C\u043E\u043F\u043E\u0440\u0442 "\u041E\u0446\u0435\u043B\u043B\u0443\u0441" +station.ORBIS_STARPORT=\u041A\u043E\u0441\u043C\u043E\u043F\u043E\u0440\u0442 "\u041E\u0440\u0431\u0438\u0441" +station.OUTPOST=\u0421\u0442\u0430\u043D\u0446\u0438\u044F +station.CIVILIAN_OUTPOST=\u0413\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u043A\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F +station.COMMERCIAL_OUTPOST=\u041A\u043E\u043C\u043C\u0435\u0440\u0447\u0435\u0441\u043A\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F +station.INDUSTRIAL_OUTPOST=\u041F\u0440\u043E\u043C\u044B\u0448\u043B\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F +station.MILITARY_OUTPOST=\u0412\u043E\u0435\u043D\u043D\u044B\u0439 \u0430\u0432\u0430\u043D\u043F\u043E\u0441\u0442 +station.MINING_OUTPOST=\u0428\u0430\u0445\u0442\u0435\u0440\u0441\u043A\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F +station.SCIENTIFIC_OUTPOST=\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F +station.UNSANCTIONED_OUTPOST=\u041F\u0438\u0440\u0430\u0442\u0441\u043A\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F +station.PLANETARY_PORT=\u041F\u043B\u0430\u043D\u0435\u0442\u0430\u0440\u043D\u044B\u0439 \u043F\u043E\u0440\u0442 +station.PLANETARY_OUTPOST=\u041F\u043B\u0430\u043D\u0435\u0442\u0430\u0440\u043D\u0430\u044F \u0441\u0442\u0430\u043D\u0446\u0438\u044F + faction.FEDERATION=\u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044F faction.EMPIRE=\u0418\u043C\u043F\u0435\u0440\u0438\u044F faction.ALLIANCE=\u0410\u043B\u044C\u044F\u043D\u0441 @@ -30,6 +45,19 @@ services.SHIPYARD=\u041A\u043E\u0441\u043C\u043E\u0432\u0435\u0440\u0444\u044C services.REFUEL=\u0414\u043E\u0437\u0430\u043F\u0440\u0430\u0432\u043A\u0430 services.MEDIUM_LANDPAD=\u0421\u0440\u0435\u0434\u043D\u044F\u044F services.LARGE_LANDPAD=\u0411\u043E\u043B\u044C\u0448\u0430\u044F + +economic.AGRICULTURE=\u0421\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u0445\u043E\u0437\u044F\u0439\u0441\u0442\u0432\u043E +economic.EXTRACTION=\u0414\u043E\u0431\u044B\u0447\u0430 \u0438\u0441\u043A\u043E\u043F\u0430\u0435\u043C\u044B\u0445 +economic.HIGH_TECH=\u0412\u044B\u0441\u043E\u043A\u0438\u0435 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438 +economic.INDUSTRIAL=\u041F\u0440\u043E\u043C\u044B\u0448\u043B\u0435\u043D\u043D\u043E\u0441\u0442\u044C +economic.MILITARY=\u0412\u043E\u0435\u043D\u043D\u0430\u044F +economic.REFINERY=\u041F\u0435\u0440\u0435\u0440\u0430\u0431\u043E\u0442\u043A\u0430 +economic.SERVICE=\u0421\u0444\u0435\u0440\u0430 \u0443\u0441\u043B\u0443\u0433 +economic.TERRAFORMING=\u0422\u0435\u0440\u0440\u0430\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 +economic.TOURISM=\u0422\u0443\u0440\u0438\u0437\u043C +economic.COLONY=\u041A\u043E\u043B\u043E\u043D\u0438\u044F +economic.NONE=\u041D\u0435\u0442 + item.group.chemicals=\u0425\u0438\u043C\u0438\u043A\u0430\u0442\u044B item.explosives=\u0412\u0437\u0440\u044B\u0432\u0447\u0430\u0442\u043A\u0430 item.hydrogenfuel=\u0412\u043E\u0434\u043E\u0440\u043E\u0434\u043D\u043E\u0435 \u0442\u043E\u043F\u043B\u0438\u0432\u043E diff --git a/client/src/main/resources/view/vEditor.fxml b/client/src/main/resources/view/vEditor.fxml index 9a49abb..d0f78e2 100644 --- a/client/src/main/resources/view/vEditor.fxml +++ b/client/src/main/resources/view/vEditor.fxml @@ -22,7 +22,21 @@ - + + + + + + + + + - + - +