Archived
0

implement FSD modification

This commit is contained in:
Mo
2016-05-28 15:10:45 +03:00
parent 6f924a4427
commit 1f7bbf891f
11 changed files with 182 additions and 24 deletions

View File

@@ -119,6 +119,7 @@ public class Main extends Application {
Screeners.loadHelperStage(getUrl("helper.fxml"));
Screeners.loadVendorFilterStage(getUrl("vFilter.fxml"));
Screeners.loadDBEditorStage(getUrl("db/dbeditor.fxml"));
Screeners.loadEngineModStage(getUrl("engineMod.fxml"));
}
private static URL getUrl(String filename) throws MalformedURLException {

View File

@@ -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();
}
}

View File

@@ -8,18 +8,19 @@ import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.util.StringConverter;
import ru.trader.Main;
import ru.trader.ServicesManager;
import ru.trader.core.Engine;
import ru.trader.model.*;
import ru.trader.model.support.ChangeMarketListener;
import ru.trader.view.support.EngineStringConverter;
import ru.trader.view.support.NumberField;
import ru.trader.view.support.ViewUtils;
import ru.trader.view.support.autocomplete.AutoCompletion;
import ru.trader.view.support.autocomplete.CachedSuggestionProvider;
import ru.trader.view.support.autocomplete.SystemsProvider;
import java.util.Optional;
public class ProfileController {
@@ -198,6 +199,14 @@ public class ProfileController {
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(){
SystemModel s = system.getValue();
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();
}
}
}

View File

@@ -12,6 +12,7 @@ import javafx.scene.layout.Priority;
import javafx.stage.Stage;
import javafx.util.Pair;
import ru.trader.EMDNUpdater;
import ru.trader.core.Engine;
import ru.trader.core.MarketFilter;
import ru.trader.core.VendorFilter;
import ru.trader.db.controllers.DBEditorController;
@@ -42,6 +43,7 @@ public class Screeners {
private static Parent helperScreen;
private static Parent vFilterScreen;
private static Parent dbEditorScreen;
private static Parent engineModScreen;
private static MainController mainController;
private static ItemDescController itemDescController;
@@ -57,6 +59,7 @@ public class Screeners {
private static HelperController helperController;
private static VendorFilterController vFilterController;
private static DBEditorController dbEditorController;
private static EngineModController engineModController;
private static FXMLLoader initLoader(URL url){
FXMLLoader loader = new FXMLLoader(url, Localization.getResources());
@@ -174,6 +177,13 @@ public class Screeners {
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){
mainController.getMainPane().setCenter(node);
}
@@ -348,6 +358,10 @@ public class Screeners {
return vFilterController.showEditDialog(mainScreen, vFilterScreen, filter);
}
public static Optional<Engine> showModEngine(){
return engineModController.showDialog(mainScreen, engineModScreen);
}
public static void reinitAll() {
mainController.init();
systemsEditorController.init();

View File

@@ -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();
}
}

View File

@@ -111,6 +111,11 @@ dialog.group.title=Adding new group
dialog.group.id=ID:
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.name=Cmdr:
profile.balance=Balance:

View File

@@ -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.id=ID:
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.name=\u041A\u041C\u0414\u0420:

View 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>

View File

@@ -1,11 +1,10 @@
<?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.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"
fx:controller="ru.trader.controllers.ProfileController"
spacing="4" >
@@ -40,18 +39,19 @@
<Label text="%profile.ship.mass" />
<NumberField fx:id="mass" maxWidth="60"/>
<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 fx:id="jumpRange"/>
</HBox>
</StackPane>
<ToggleButton minWidth="30" onAction="#toggleShipInfo">
<ToggleButton minWidth="30" minHeight="25" onAction="#toggleShipInfo">
<graphic><Glyph text="FontAwesome|SPACE_SHUTTLE"/></graphic>
</ToggleButton>
<ToggleButton fx:id="btnHelper" minWidth="30">
<ToggleButton fx:id="btnHelper" minWidth="30" minHeight="25">
<graphic><Glyph text="FontAwesome|ROCKET"/></graphic>
</ToggleButton>
<ToggleButton fx:id="btnEDCE" text="EDCE"/>
<ToggleButton fx:id="btnEDCE" text="EDCE" minHeight="25"/>
<HBox HBox.hgrow="ALWAYS" alignment="CENTER_RIGHT">
<Label fx:id="warningIcon" styleClass="icon-warning" prefWidth="30" prefHeight="30" visible="false">
<graphic><Glyph text="FontAwesome|WARNING" /></graphic>

View 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);
}
}

View File

@@ -29,7 +29,7 @@ public class Ship {
}
public static Ship clone(Ship ship){
return ship != null ? new Ship(ship) : ship;
return ship != null ? new Ship(ship) : null;
}
public long getCargo() {
@@ -223,7 +223,12 @@ public class Ship {
String e = values.getProperty("ship.engine","2E");
Matcher matcher = ENGINE_REGEXP.matcher(e);
if (matcher.find()){
ship.setEngine(Integer.valueOf(matcher.group(1)), matcher.group(2).charAt(0));
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));
}
}
return ship;
}
@@ -233,5 +238,10 @@ public class Ship {
values.setProperty("ship.cargo", String.valueOf(cargo));
values.setProperty("ship.tank", String.valueOf(tank));
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));
}
}