implement FSD modification
This commit is contained in:
@@ -119,6 +119,7 @@ public class Main extends Application {
|
|||||||
Screeners.loadHelperStage(getUrl("helper.fxml"));
|
Screeners.loadHelperStage(getUrl("helper.fxml"));
|
||||||
Screeners.loadVendorFilterStage(getUrl("vFilter.fxml"));
|
Screeners.loadVendorFilterStage(getUrl("vFilter.fxml"));
|
||||||
Screeners.loadDBEditorStage(getUrl("db/dbeditor.fxml"));
|
Screeners.loadDBEditorStage(getUrl("db/dbeditor.fxml"));
|
||||||
|
Screeners.loadEngineModStage(getUrl("engineMod.fxml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static URL getUrl(String filename) throws MalformedURLException {
|
private static URL getUrl(String filename) throws MalformedURLException {
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package ru.trader.controllers;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.Parent;
|
||||||
|
import javafx.scene.control.ComboBox;
|
||||||
|
import javafx.scene.control.Dialog;
|
||||||
|
import ru.trader.core.Engine;
|
||||||
|
import ru.trader.core.ModEngine;
|
||||||
|
import ru.trader.model.MarketModel;
|
||||||
|
import ru.trader.view.support.EngineStringConverter;
|
||||||
|
import ru.trader.view.support.Localization;
|
||||||
|
import ru.trader.view.support.NumberField;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class EngineModController {
|
||||||
|
@FXML
|
||||||
|
private ComboBox<Engine> type;
|
||||||
|
@FXML
|
||||||
|
private NumberField optMass;
|
||||||
|
|
||||||
|
private Dialog<Engine> dlg;
|
||||||
|
private MarketModel market;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void initialize() {
|
||||||
|
type.setItems(FXCollections.observableArrayList(Engine.getEngines()));
|
||||||
|
type.setConverter(new EngineStringConverter());
|
||||||
|
type.getSelectionModel().selectFirst();
|
||||||
|
optMass.setValue(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createDialog(Parent owner, Parent content){
|
||||||
|
dlg = new Dialog<>();
|
||||||
|
if (owner != null) dlg.initOwner(owner.getScene().getWindow());
|
||||||
|
dlg.setTitle(Localization.getString("dialog.engine.title"));
|
||||||
|
dlg.getDialogPane().setContent(content);
|
||||||
|
dlg.getDialogPane().getButtonTypes().addAll(Dialogs.OK, Dialogs.CANCEL);
|
||||||
|
dlg.setResultConverter(dialogButton -> {
|
||||||
|
if (dialogButton == Dialogs.OK) {
|
||||||
|
return new ModEngine(type.getValue(), optMass.getValue().doubleValue());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
dlg.setResizable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Optional<Engine> showDialog(Parent parent, Parent content) {
|
||||||
|
if (dlg == null){
|
||||||
|
createDialog(parent, content);
|
||||||
|
}
|
||||||
|
return dlg.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -8,18 +8,19 @@ import javafx.fxml.FXML;
|
|||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.util.StringConverter;
|
|
||||||
import ru.trader.Main;
|
import ru.trader.Main;
|
||||||
import ru.trader.ServicesManager;
|
import ru.trader.ServicesManager;
|
||||||
import ru.trader.core.Engine;
|
import ru.trader.core.Engine;
|
||||||
import ru.trader.model.*;
|
import ru.trader.model.*;
|
||||||
import ru.trader.model.support.ChangeMarketListener;
|
import ru.trader.model.support.ChangeMarketListener;
|
||||||
|
import ru.trader.view.support.EngineStringConverter;
|
||||||
import ru.trader.view.support.NumberField;
|
import ru.trader.view.support.NumberField;
|
||||||
import ru.trader.view.support.ViewUtils;
|
import ru.trader.view.support.ViewUtils;
|
||||||
import ru.trader.view.support.autocomplete.AutoCompletion;
|
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.Optional;
|
||||||
|
|
||||||
|
|
||||||
public class ProfileController {
|
public class ProfileController {
|
||||||
@@ -198,6 +199,14 @@ public class ProfileController {
|
|||||||
return s == null ? ModelFabric.NONE_STATION : s.get(name);
|
return s == null ? ModelFabric.NONE_STATION : s.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private void modEngine(){
|
||||||
|
Optional<Engine> engine = Screeners.showModEngine();
|
||||||
|
if (engine.isPresent()){
|
||||||
|
this.engine.setValue(engine.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateIcons(){
|
private void updateIcons(){
|
||||||
SystemModel s = system.getValue();
|
SystemModel s = system.getValue();
|
||||||
if (!s.isCorrect()){
|
if (!s.isCorrect()){
|
||||||
@@ -272,16 +281,4 @@ public class ProfileController {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private class EngineStringConverter extends StringConverter<Engine> {
|
|
||||||
@Override
|
|
||||||
public String toString(Engine engine) {
|
|
||||||
return ""+engine.getClazz()+engine.getRating();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Engine fromString(String string) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import javafx.scene.layout.Priority;
|
|||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.util.Pair;
|
import javafx.util.Pair;
|
||||||
import ru.trader.EMDNUpdater;
|
import ru.trader.EMDNUpdater;
|
||||||
|
import ru.trader.core.Engine;
|
||||||
import ru.trader.core.MarketFilter;
|
import ru.trader.core.MarketFilter;
|
||||||
import ru.trader.core.VendorFilter;
|
import ru.trader.core.VendorFilter;
|
||||||
import ru.trader.db.controllers.DBEditorController;
|
import ru.trader.db.controllers.DBEditorController;
|
||||||
@@ -42,6 +43,7 @@ public class Screeners {
|
|||||||
private static Parent helperScreen;
|
private static Parent helperScreen;
|
||||||
private static Parent vFilterScreen;
|
private static Parent vFilterScreen;
|
||||||
private static Parent dbEditorScreen;
|
private static Parent dbEditorScreen;
|
||||||
|
private static Parent engineModScreen;
|
||||||
|
|
||||||
private static MainController mainController;
|
private static MainController mainController;
|
||||||
private static ItemDescController itemDescController;
|
private static ItemDescController itemDescController;
|
||||||
@@ -57,6 +59,7 @@ public class Screeners {
|
|||||||
private static HelperController helperController;
|
private static HelperController helperController;
|
||||||
private static VendorFilterController vFilterController;
|
private static VendorFilterController vFilterController;
|
||||||
private static DBEditorController dbEditorController;
|
private static DBEditorController dbEditorController;
|
||||||
|
private static EngineModController engineModController;
|
||||||
|
|
||||||
private static FXMLLoader initLoader(URL url){
|
private static FXMLLoader initLoader(URL url){
|
||||||
FXMLLoader loader = new FXMLLoader(url, Localization.getResources());
|
FXMLLoader loader = new FXMLLoader(url, Localization.getResources());
|
||||||
@@ -174,6 +177,13 @@ public class Screeners {
|
|||||||
dbEditorController = loader.getController();
|
dbEditorController = loader.getController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void loadEngineModStage(URL fxml) throws IOException {
|
||||||
|
FXMLLoader loader = initLoader(fxml);
|
||||||
|
engineModScreen = loader.load();
|
||||||
|
addStylesheet(engineModScreen);
|
||||||
|
engineModController = loader.getController();
|
||||||
|
}
|
||||||
|
|
||||||
public static void show(Node node){
|
public static void show(Node node){
|
||||||
mainController.getMainPane().setCenter(node);
|
mainController.getMainPane().setCenter(node);
|
||||||
}
|
}
|
||||||
@@ -348,6 +358,10 @@ public class Screeners {
|
|||||||
return vFilterController.showEditDialog(mainScreen, vFilterScreen, filter);
|
return vFilterController.showEditDialog(mainScreen, vFilterScreen, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Optional<Engine> showModEngine(){
|
||||||
|
return engineModController.showDialog(mainScreen, engineModScreen);
|
||||||
|
}
|
||||||
|
|
||||||
public static void reinitAll() {
|
public static void reinitAll() {
|
||||||
mainController.init();
|
mainController.init();
|
||||||
systemsEditorController.init();
|
systemsEditorController.init();
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package ru.trader.view.support;
|
||||||
|
|
||||||
|
import javafx.util.StringConverter;
|
||||||
|
import ru.trader.core.Engine;
|
||||||
|
import ru.trader.core.ModEngine;
|
||||||
|
|
||||||
|
public class EngineStringConverter extends StringConverter<Engine> {
|
||||||
|
@Override
|
||||||
|
public String toString(Engine engine) {
|
||||||
|
return engine instanceof ModEngine ? "Custom" : ""+engine.getClazz()+engine.getRating();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Engine fromString(String string) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -111,6 +111,11 @@ dialog.group.title=Adding new group
|
|||||||
dialog.group.id=ID:
|
dialog.group.id=ID:
|
||||||
dialog.group.type=Type:
|
dialog.group.type=Type:
|
||||||
|
|
||||||
|
#engine mod dialog
|
||||||
|
dialog.engine.title=Engine modification
|
||||||
|
dialog.engine.class=Engine class:
|
||||||
|
dialog.engine.optMass=Optimal mass:
|
||||||
|
|
||||||
#profile.fxml
|
#profile.fxml
|
||||||
profile.name=Cmdr:
|
profile.name=Cmdr:
|
||||||
profile.balance=Balance:
|
profile.balance=Balance:
|
||||||
|
|||||||
@@ -111,6 +111,10 @@ dialog.item.group=\u0413\u0440\u0443\u043F\u043F\u0430:
|
|||||||
dialog.group.title=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0439 \u0433\u0440\u0443\u043F\u043F\u044B
|
dialog.group.title=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0439 \u0433\u0440\u0443\u043F\u043F\u044B
|
||||||
dialog.group.id=ID:
|
dialog.group.id=ID:
|
||||||
dialog.group.type=\u0422\u0438\u043F:
|
dialog.group.type=\u0422\u0438\u043F:
|
||||||
|
#engine mod dialog
|
||||||
|
dialog.engine.title=\u041C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F
|
||||||
|
dialog.engine.class=\u041A\u043B\u0430\u0441\u0441 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F:
|
||||||
|
dialog.engine.optMass=\u041E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u043C\u0430\u0441\u0441\u0430:
|
||||||
|
|
||||||
#profile.fxml
|
#profile.fxml
|
||||||
profile.name=\u041A\u041C\u0414\u0420:
|
profile.name=\u041A\u041C\u0414\u0420:
|
||||||
|
|||||||
16
client/src/main/resources/view/engineMod.fxml
Normal file
16
client/src/main/resources/view/engineMod.fxml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
|
||||||
|
<?import javafx.scene.control.ComboBox?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import ru.trader.view.support.NumberField?>
|
||||||
|
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
|
styleClass="dialog"
|
||||||
|
fx:controller="ru.trader.controllers.EngineModController" spacing="4">
|
||||||
|
<Label text="%dialog.engine.class"/>
|
||||||
|
<ComboBox fx:id="type" minWidth="60"/>
|
||||||
|
<Label text="%dialog.engine.optMass"/>
|
||||||
|
<NumberField fx:id="optMass" maxWidth="100" />
|
||||||
|
|
||||||
|
</HBox>
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<?import javafx.scene.control.*?>
|
|
||||||
<?import javafx.scene.layout.HBox?>
|
|
||||||
<?import javafx.scene.layout.StackPane?>
|
|
||||||
<?import org.controlsfx.glyphfont.Glyph?>
|
|
||||||
<?import ru.trader.view.support.NumberField?>
|
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import org.controlsfx.glyphfont.*?>
|
||||||
|
<?import ru.trader.view.support.NumberField?>
|
||||||
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
|
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
fx:controller="ru.trader.controllers.ProfileController"
|
fx:controller="ru.trader.controllers.ProfileController"
|
||||||
spacing="4" >
|
spacing="4" >
|
||||||
@@ -40,18 +39,19 @@
|
|||||||
<Label text="%profile.ship.mass" />
|
<Label text="%profile.ship.mass" />
|
||||||
<NumberField fx:id="mass" maxWidth="60"/>
|
<NumberField fx:id="mass" maxWidth="60"/>
|
||||||
<Label text="%profile.ship.engine" />
|
<Label text="%profile.ship.engine" />
|
||||||
<ComboBox fx:id="engine" maxWidth="60"/>
|
<ComboBox fx:id="engine" maxWidth="100" minHeight="25"/>
|
||||||
|
<Button minWidth="30" minHeight="25" onAction="#modEngine"><graphic><Glyph text="FontAwesome|GEAR"/></graphic></Button>
|
||||||
<Label text="%profile.ship.jump" />
|
<Label text="%profile.ship.jump" />
|
||||||
<Label fx:id="jumpRange"/>
|
<Label fx:id="jumpRange"/>
|
||||||
</HBox>
|
</HBox>
|
||||||
</StackPane>
|
</StackPane>
|
||||||
<ToggleButton minWidth="30" onAction="#toggleShipInfo">
|
<ToggleButton minWidth="30" minHeight="25" onAction="#toggleShipInfo">
|
||||||
<graphic><Glyph text="FontAwesome|SPACE_SHUTTLE"/></graphic>
|
<graphic><Glyph text="FontAwesome|SPACE_SHUTTLE"/></graphic>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<ToggleButton fx:id="btnHelper" minWidth="30">
|
<ToggleButton fx:id="btnHelper" minWidth="30" minHeight="25">
|
||||||
<graphic><Glyph text="FontAwesome|ROCKET"/></graphic>
|
<graphic><Glyph text="FontAwesome|ROCKET"/></graphic>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<ToggleButton fx:id="btnEDCE" text="EDCE"/>
|
<ToggleButton fx:id="btnEDCE" text="EDCE" minHeight="25"/>
|
||||||
<HBox HBox.hgrow="ALWAYS" alignment="CENTER_RIGHT">
|
<HBox HBox.hgrow="ALWAYS" alignment="CENTER_RIGHT">
|
||||||
<Label fx:id="warningIcon" styleClass="icon-warning" prefWidth="30" prefHeight="30" visible="false">
|
<Label fx:id="warningIcon" styleClass="icon-warning" prefWidth="30" prefHeight="30" visible="false">
|
||||||
<graphic><Glyph text="FontAwesome|WARNING" /></graphic>
|
<graphic><Glyph text="FontAwesome|WARNING" /></graphic>
|
||||||
|
|||||||
36
core/src/main/java/ru/trader/core/ModEngine.java
Normal file
36
core/src/main/java/ru/trader/core/ModEngine.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package ru.trader.core;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class ModEngine extends Engine {
|
||||||
|
private final double optMass;
|
||||||
|
|
||||||
|
public ModEngine(int clazz, char rating) {
|
||||||
|
super(clazz, rating);
|
||||||
|
optMass = super.getOptMass();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModEngine(int clazz, char rating, double optMass) {
|
||||||
|
super(clazz, rating);
|
||||||
|
this.optMass = optMass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModEngine(Engine engine, double optMass) {
|
||||||
|
super(engine.getClazz(), engine.getRating());
|
||||||
|
this.optMass = optMass;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getOptMass() {
|
||||||
|
return optMass;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof ModEngine)) return false;
|
||||||
|
if (!super.equals(o)) return false;
|
||||||
|
ModEngine modEngine = (ModEngine) o;
|
||||||
|
return Objects.equals(optMass, modEngine.optMass);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,7 +29,7 @@ public class Ship {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Ship clone(Ship ship){
|
public static Ship clone(Ship ship){
|
||||||
return ship != null ? new Ship(ship) : ship;
|
return ship != null ? new Ship(ship) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getCargo() {
|
public long getCargo() {
|
||||||
@@ -223,8 +223,13 @@ public class Ship {
|
|||||||
String e = values.getProperty("ship.engine","2E");
|
String e = values.getProperty("ship.engine","2E");
|
||||||
Matcher matcher = ENGINE_REGEXP.matcher(e);
|
Matcher matcher = ENGINE_REGEXP.matcher(e);
|
||||||
if (matcher.find()){
|
if (matcher.find()){
|
||||||
|
double optMass = Double.valueOf(values.getProperty("ship.engine.optmass", "-1"));
|
||||||
|
if (optMass != -1) {
|
||||||
|
ship.setEngine(new ModEngine(Integer.valueOf(matcher.group(1)), matcher.group(2).charAt(0), optMass));
|
||||||
|
} else {
|
||||||
ship.setEngine(Integer.valueOf(matcher.group(1)), matcher.group(2).charAt(0));
|
ship.setEngine(Integer.valueOf(matcher.group(1)), matcher.group(2).charAt(0));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return ship;
|
return ship;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,5 +238,10 @@ public class Ship {
|
|||||||
values.setProperty("ship.cargo", String.valueOf(cargo));
|
values.setProperty("ship.cargo", String.valueOf(cargo));
|
||||||
values.setProperty("ship.tank", String.valueOf(tank));
|
values.setProperty("ship.tank", String.valueOf(tank));
|
||||||
values.setProperty("ship.engine", String.valueOf(engine.getClazz()) + engine.getRating());
|
values.setProperty("ship.engine", String.valueOf(engine.getClazz()) + engine.getRating());
|
||||||
|
double optMass = -1;
|
||||||
|
if (engine instanceof ModEngine){
|
||||||
|
optMass = engine.getOptMass();
|
||||||
|
}
|
||||||
|
values.setProperty("ship.engine.optmass", String.valueOf(optMass));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user