diff --git a/.classpath b/.classpath index a96787a..653dfd7 100644 --- a/.classpath +++ b/.classpath @@ -1,13 +1,57 @@ - - + - + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index e9ea9a6..4dc29f9 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ local.properties .loadpath .metadata workspace.xml -settings.json \ No newline at end of file +settings.json +target/ diff --git a/.project b/.project index 9e5a886..f8b3eba 100644 --- a/.project +++ b/.project @@ -10,8 +10,14 @@ + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature org.eclipse.jdt.core.javanature diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 99f26c0..2b76340 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,2 @@ eclipse.preferences.version=1 -encoding/=UTF-8 +encoding//src/main/java=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 0c68a61..fa50df0 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -3,5 +3,10 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.8 diff --git a/README.md b/README.md index b2b77a8..c470c4c 100644 --- a/README.md +++ b/README.md @@ -73,3 +73,25 @@ texto e também a velocidade máxima que o rover pode alcançar. A velocidade mínima permitida é de 3m/s. Clique em Pilotar e ele comecará a se mover para o alvo, desviando dos obstáculos à frente. + +### Desenvolvimento do MechPeste com Maven + +Agora o MechPeste tem como base o gerenciador de dependências Maven. Para poder instalar a biblioteca +do KRPC no entanto, como não está disponível no repositório público do Maven, é necessário fazer o download +e instalar a biblioteca KRPC em sua versão 0.5.2 com o seguinte comando: + +``` bash +mvn install:install-file \ + -Dfile=\krpc-java-0.5.2.jar \ + -DgroupId=io.github.krpc \ + -DartifactId=krpc-java \ + -Dversion=0.5.2 \ + -Dpackaging=jar \ +``` +Substitua `` pela pasta onde está o arquivo do KRPC. Isso instalará essa biblioteca +no seu repositório local. + +Agora você poderá usar comandos do Maven para instalar e construir a aplicação: +```bash +mvn clean install package +``` diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2807bf2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,89 @@ + + 4.0.0 + + com.pesterenan + MechPeste + 0.7.0 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + UTF-8 + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + com.pesterenan.MechPeste + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + + com.pesterenan.MechPeste + + + + jar-with-dependencies + + MechPeste-${project.version} + false + + + + make-assembly + package + + single + + + + + + + + + 1.8 + 1.8 + + + + + org.apache.maven + maven-model + 3.3.9 + + + io.github.krpc + krpc-java + 0.5.2 + + + org.javatuples + javatuples + 1.2 + + + com.google.protobuf + protobuf-java + 3.22.1 + + + + diff --git a/src/com/pesterenan/resources/javatuples-1.2.jar b/src/com/pesterenan/resources/javatuples-1.2.jar deleted file mode 100644 index 8944308..0000000 Binary files a/src/com/pesterenan/resources/javatuples-1.2.jar and /dev/null differ diff --git a/src/com/pesterenan/resources/protobuf-java-3.22.1.jar b/src/com/pesterenan/resources/protobuf-java-3.22.1.jar deleted file mode 100644 index 7685cda..0000000 Binary files a/src/com/pesterenan/resources/protobuf-java-3.22.1.jar and /dev/null differ diff --git a/src/com/pesterenan/utils/Navigation.java b/src/com/pesterenan/utils/Navigation.java deleted file mode 100644 index 70cc9d8..0000000 --- a/src/com/pesterenan/utils/Navigation.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.pesterenan.utils; - -import krpc.client.RPCException; -import krpc.client.Stream; -import krpc.client.StreamException; -import org.javatuples.Triplet; - -import static com.pesterenan.MechPeste.getConnection; -import static com.pesterenan.MechPeste.getSpaceCenter; -import static krpc.client.services.SpaceCenter.*; - -public class Navigation { - - public static final Triplet RADIAL = new Triplet<>(1.0, 0.0, 0.0); - public static final Triplet ANTI_RADIAL = new Triplet<>(-1.0, 0.0, 0.0); - public static final Triplet PROGRADE = new Triplet<>(0.0, 1.0, 0.0); - public static final Triplet RETROGRADE = new Triplet<>(0.0, -1.0, 0.0); - public static final Triplet NORMAL = new Triplet<>(0.0, 0.0, 1.0); - public static final Triplet ANTI_NORMAL = new Triplet<>(0.0, 0.0, -1.0); - // private Drawing drawing; - private Vessel currentVessel; - private Flight flightParameters; - private Stream horizontalSpeed; - private ReferenceFrame orbitalReference; - - public Navigation(Vessel currentVessel) { - this.currentVessel = currentVessel; - initializeParameters(); - } - - private void initializeParameters() { - try { -// drawing = Drawing.newInstance(getConexao()); - orbitalReference = currentVessel.getOrbit().getBody().getReferenceFrame(); - flightParameters = currentVessel.flight(orbitalReference); - horizontalSpeed = getConnection().addStream(flightParameters, "getHorizontalSpeed"); - } catch (RPCException | StreamException ignored) { - } - } - - public void aimAtManeuver(Node maneuver) throws RPCException { - aimAtDirection(getSpaceCenter().transformDirection(PROGRADE, maneuver.getReferenceFrame(), orbitalReference)); - } - - public void aimForLanding() throws RPCException, StreamException { - Vector currentPosition = new Vector(currentVessel.position(orbitalReference)); - Vector retrograde = new Vector( - getSpaceCenter().transformPosition(RETROGRADE, currentVessel.getSurfaceVelocityReferenceFrame(), - orbitalReference - )).subtract(currentPosition); - Vector radial = new Vector(getSpaceCenter().transformDirection(RADIAL, - currentVessel.getSurfaceReferenceFrame(), - orbitalReference - )); - double angleLimit = Utilities.remap(0, 10, 0, 0.9, horizontalSpeed.get(), true); - Vector landingVector = Utilities.linearInterpolation(radial, retrograde, angleLimit); - aimAtDirection(landingVector.toTriplet()); - } - -// public void aimAtTarget() throws RPCException, StreamException, InterruptedException { -// Vector currentPosition = new Vector(naveAtual.position(pontoRefSuperficie)); -// Vector targetPosition = new Vector(centroEspacial.getTargetVessel().position(pontoRefSuperficie)); -// targetPosition.x = 0.0; -// double distanceToTarget = Vector.distance(currentPosition, targetPosition); -// -// Vector toTargetDirection = Vector.targetDirection(currentPosition, targetPosition); -// Vector oppositeDirection = Vector.targetOppositeDirection(currentPosition, targetPosition); -// Vector progradeDirection = Vector.targetDirection(currentPosition, new Vector( -// centroEspacial.transformPosition(PROGRADE, naveAtual.getSurfaceVelocityReferenceFrame(), -// pontoRefSuperficie -// ))); -// Vector retrogradeDirection = Vector.targetDirection(currentPosition, new Vector( -// centroEspacial.transformPosition(RETROGRADE, naveAtual.getSurfaceVelocityReferenceFrame(), -// pontoRefSuperficie -// ))); -// progradeDirection.x = 0.0; -// retrogradeDirection.x = 0.0; -// drawing.addDirection(toTargetDirection.toTriplet(), pontoRefSuperficie, 10, true); -// drawing.addDirection(oppositeDirection.toTriplet(), pontoRefSuperficie, 5, true); -// double pointingToTargetThreshold = Utilities.remap(0, 200, 0, 1, distanceToTarget, true); -// double speedThreshold = Utilities.remap(0, 20, 0, 1, horizontalSpeed.get(), true); -// -// Vector currentDirection = -// Utilities.linearInterpolation(oppositeDirection, toTargetDirection, pointingToTargetThreshold); -// double angleCurrentDirection = -// new Vector(currentDirection.z, currentDirection.y, currentDirection.x).heading(); -// double angleProgradeDirection = -// new Vector(progradeDirection.z, progradeDirection.y, progradeDirection.x).heading(); -// double deltaAngle = angleProgradeDirection - angleCurrentDirection; -// System.out.println(deltaAngle); -// if (deltaAngle > 3) { -// currentDirection.sum(progradeDirection).normalize(); -// } else if (deltaAngle < -3) { -// currentDirection.subtract(progradeDirection).normalize(); -// } -// drawing.addDirection(currentDirection.toTriplet(), pontoRefSuperficie, 25, true); -// -// -// Vector currentDirectionOnOrbitalRef = new Vector( -// centroEspacial.transformDirection(currentDirection.toTriplet(), pontoRefSuperficie, -// pontoRefOrbital)); -// Vector radial = new Vector(centroEspacial.transformDirection(RADIAL, pontoRefSuperficie, -// pontoRefOrbital)); -// Vector speedVector = Utilities.linearInterpolation(retrogradeDirection, progradeDirection, speedThreshold); -// Vector speedVectorOnOrbitalRef = new Vector( -// centroEspacial.transformDirection(speedVector.toTriplet(), pontoRefSuperficie, -// pontoRefOrbital)); -// Vector pointingVector = -// Utilities.linearInterpolation(currentDirectionOnOrbitalRef, radial.sum(speedVectorOnOrbitalRef), -// speedThreshold -// ); -// Thread.sleep(50); -// drawing.clear(false); -// aimAtDirection(pointingVector.toTriplet()); -// } - - public void aimAtPrograde() throws RPCException { - aimAtDirection(getSpaceCenter().transformDirection(PROGRADE, currentVessel.getSurfaceVelocityReferenceFrame(), - orbitalReference - )); - } - - public void aimAtRadialOut() throws RPCException { - aimAtDirection(getSpaceCenter().transformDirection(RADIAL, currentVessel.getSurfaceReferenceFrame(), - orbitalReference - )); - } - - public void aimAtRetrograde() throws RPCException { - aimAtDirection(getSpaceCenter().transformDirection(RETROGRADE, - currentVessel.getSurfaceVelocityReferenceFrame(), - orbitalReference - )); - } - - public void aimAtDirection(Triplet currentDirection) throws RPCException { - currentVessel.getAutoPilot().setReferenceFrame(orbitalReference); - currentVessel.getAutoPilot().setTargetDirection(currentDirection); - } - -} diff --git a/src/com/pesterenan/views/InstallKrpcDialog.java b/src/com/pesterenan/views/InstallKrpcDialog.java deleted file mode 100644 index 2a905fa..0000000 --- a/src/com/pesterenan/views/InstallKrpcDialog.java +++ /dev/null @@ -1,217 +0,0 @@ -package com.pesterenan.views; - -import com.pesterenan.resources.Bundle; -import com.pesterenan.updater.KrpcInstaller; - -import javax.swing.*; -import javax.swing.GroupLayout.Alignment; -import javax.swing.LayoutStyle.ComponentPlacement; -import javax.swing.border.BevelBorder; -import javax.swing.border.TitledBorder; - -public class InstallKrpcDialog extends JDialog { - private static final long serialVersionUID = 1L; - private JLabel lblInstallerInfo; - private final JSeparator separator = new JSeparator(); - private final JPanel pnlKspFolderPath = new JPanel(); - private final JTextField txfPath = new JTextField(); - private JButton btnBrowsePath; - private JButton btnDownloadInstall; - private JButton btnCancel; - private JPanel pnlStatus; - private static JLabel lblStatus; - - public InstallKrpcDialog() { - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - initComponents(); - } catch (Throwable e) { - e.printStackTrace(); - } - } - - private void initComponents() { - setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - setResizable(false); - setBounds(MainGui.centerDialogOnScreen()); - setAlwaysOnTop(true); - setModalityType(ModalityType.APPLICATION_MODAL); - setTitle(Bundle.getString("installer_dialog_title")); //$NON-NLS-1$ - - lblInstallerInfo = new JLabel(Bundle.getString("installer_dialog_txt_info")); //$NON-NLS-1$ - - pnlKspFolderPath.setBorder( - new TitledBorder(null, Bundle.getString("installer_dialog_pnl_path"), TitledBorder.LEADING,//$NON - // -NLS-1$ - TitledBorder.TOP, null, null - )); - - btnDownloadInstall = new JButton(Bundle.getString("installer_dialog_btn_download")); //$NON - // -NLS-1$ - btnDownloadInstall.addActionListener((e) -> KrpcInstaller.downloadAndInstallKrpc()); - btnDownloadInstall.setEnabled(false); - - btnCancel = new JButton(Bundle.getString("installer_dialog_btn_cancel")); //$NON-NLS-1$ - btnCancel.addActionListener((e) -> this.dispose()); - - pnlStatus = new JPanel(); - pnlStatus.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); - - GroupLayout groupLayout = new GroupLayout(getContentPane()); - groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.TRAILING) - .addGroup(groupLayout.createSequentialGroup() - .addContainerGap() - .addGroup(groupLayout.createParallelGroup( - Alignment.LEADING) - .addComponent( - pnlKspFolderPath, - GroupLayout.DEFAULT_SIZE, - 414, - Short.MAX_VALUE - ) - .addComponent( - lblInstallerInfo, - Alignment.TRAILING, - GroupLayout.DEFAULT_SIZE, - 414, - Short.MAX_VALUE - ) - .addComponent(separator, - Alignment.TRAILING, - GroupLayout.DEFAULT_SIZE, - 414, - Short.MAX_VALUE - ) - .addGroup( - groupLayout.createSequentialGroup() - .addComponent( - btnDownloadInstall) - .addPreferredGap( - ComponentPlacement.RELATED, - 184, - Short.MAX_VALUE - ) - .addComponent( - btnCancel))) - .addGap(10)) - .addComponent(pnlStatus, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, - 434, Short.MAX_VALUE - )); - groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING) - .addGroup(groupLayout.createSequentialGroup() - .addContainerGap() - .addComponent(lblInstallerInfo, - GroupLayout.PREFERRED_SIZE, 60, - GroupLayout.PREFERRED_SIZE - ) - .addGap(2) - .addComponent(separator, - GroupLayout.PREFERRED_SIZE, 2, - GroupLayout.PREFERRED_SIZE - ) - .addPreferredGap(ComponentPlacement.UNRELATED) - .addComponent(pnlKspFolderPath, - GroupLayout.PREFERRED_SIZE, 51, - GroupLayout.PREFERRED_SIZE - ) - .addPreferredGap(ComponentPlacement.UNRELATED) - .addGroup(groupLayout.createParallelGroup( - Alignment.BASELINE) - .addComponent( - btnDownloadInstall) - .addComponent(btnCancel)) - .addPreferredGap(ComponentPlacement.RELATED, 60, - Short.MAX_VALUE - ) - .addComponent(pnlStatus, - GroupLayout.PREFERRED_SIZE, 25, - GroupLayout.PREFERRED_SIZE - ))); - - lblStatus = new JLabel(); - GroupLayout glPnlStatus = new GroupLayout(pnlStatus); - glPnlStatus.setHorizontalGroup(glPnlStatus.createParallelGroup(Alignment.LEADING) - .addGroup(glPnlStatus.createSequentialGroup() - .addContainerGap() - .addComponent(lblStatus) - .addContainerGap(389, Short.MAX_VALUE))); - glPnlStatus.setVerticalGroup(glPnlStatus.createParallelGroup(Alignment.TRAILING) - .addGroup(glPnlStatus.createSequentialGroup() - .addGap(2) - .addComponent(lblStatus, GroupLayout.DEFAULT_SIZE, - GroupLayout.DEFAULT_SIZE, - Short.MAX_VALUE - ) - .addGap(0))); - pnlStatus.setLayout(glPnlStatus); - - txfPath.setEditable(false); - txfPath.setColumns(10); - - btnBrowsePath = new JButton(Bundle.getString("installer_dialog_btn_browse")); //$NON-NLS-1$ - btnBrowsePath.addActionListener(e -> { - chooseKSPFolder(); - txfPath.setText(KrpcInstaller.getKspFolder()); - }); - GroupLayout glPnlKspFolderPath = new GroupLayout(pnlKspFolderPath); - glPnlKspFolderPath.setHorizontalGroup(glPnlKspFolderPath.createParallelGroup(Alignment.LEADING) - .addGroup(Alignment.TRAILING, - glPnlKspFolderPath.createSequentialGroup() - .addContainerGap() - .addComponent(txfPath, - GroupLayout.DEFAULT_SIZE, - 273, - Short.MAX_VALUE - ) - .addPreferredGap( - ComponentPlacement.RELATED) - .addComponent(btnBrowsePath, - GroupLayout.PREFERRED_SIZE, - 103, - GroupLayout.PREFERRED_SIZE - ) - .addContainerGap() - )); - glPnlKspFolderPath.setVerticalGroup(glPnlKspFolderPath.createParallelGroup(Alignment.LEADING) - .addGroup(glPnlKspFolderPath.createSequentialGroup() - .addGroup( - glPnlKspFolderPath.createParallelGroup( - Alignment.BASELINE) - .addComponent( - txfPath, - GroupLayout.PREFERRED_SIZE, - 23, - GroupLayout.PREFERRED_SIZE - ) - .addComponent( - btnBrowsePath)) - .addContainerGap(24, - Short.MAX_VALUE - ))); - pnlKspFolderPath.setLayout(glPnlKspFolderPath); - getContentPane().setLayout(groupLayout); - - setVisible(true); - } - - public void chooseKSPFolder() { - JFileChooser kspDir = new JFileChooser(); - kspDir.setDialogTitle("Escolha a pasta do KSP na Steam"); - kspDir.setMultiSelectionEnabled(false); - kspDir.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - int response = kspDir.showOpenDialog(this); - if (response == JFileChooser.APPROVE_OPTION) { - KrpcInstaller.setKspFolder(kspDir.getSelectedFile().getPath()); - btnDownloadInstall.setEnabled(true); - setStatus("Pasta escolhida, pronto para instalar."); - } else { - KrpcInstaller.setKspFolder(null); - btnDownloadInstall.setEnabled(false); - setStatus(""); - } - } - - public static void setStatus(String status) { - lblStatus.setText(status); - } -} diff --git a/src/com/pesterenan/views/UIMethods.java b/src/com/pesterenan/views/UIMethods.java deleted file mode 100644 index 3a34ae7..0000000 --- a/src/com/pesterenan/views/UIMethods.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.pesterenan.views; - -public interface UIMethods { - - public void initComponents(); - - public void setupComponents(); - - public void layoutComponents(); -} \ No newline at end of file diff --git a/src/com/pesterenan/Main.java b/src/main/java/com/pesterenan/Main.java similarity index 100% rename from src/com/pesterenan/Main.java rename to src/main/java/com/pesterenan/Main.java diff --git a/src/com/pesterenan/MechPeste.java b/src/main/java/com/pesterenan/MechPeste.java similarity index 100% rename from src/com/pesterenan/MechPeste.java rename to src/main/java/com/pesterenan/MechPeste.java diff --git a/src/com/pesterenan/controllers/Controller.java b/src/main/java/com/pesterenan/controllers/Controller.java similarity index 100% rename from src/com/pesterenan/controllers/Controller.java rename to src/main/java/com/pesterenan/controllers/Controller.java diff --git a/src/com/pesterenan/controllers/DockingController.java b/src/main/java/com/pesterenan/controllers/DockingController.java similarity index 100% rename from src/com/pesterenan/controllers/DockingController.java rename to src/main/java/com/pesterenan/controllers/DockingController.java diff --git a/src/com/pesterenan/controllers/LandingController.java b/src/main/java/com/pesterenan/controllers/LandingController.java similarity index 100% rename from src/com/pesterenan/controllers/LandingController.java rename to src/main/java/com/pesterenan/controllers/LandingController.java diff --git a/src/com/pesterenan/controllers/LiftoffController.java b/src/main/java/com/pesterenan/controllers/LiftoffController.java similarity index 100% rename from src/com/pesterenan/controllers/LiftoffController.java rename to src/main/java/com/pesterenan/controllers/LiftoffController.java diff --git a/src/com/pesterenan/controllers/ManeuverController.java b/src/main/java/com/pesterenan/controllers/ManeuverController.java similarity index 99% rename from src/com/pesterenan/controllers/ManeuverController.java rename to src/main/java/com/pesterenan/controllers/ManeuverController.java index ba85958..10f4f96 100644 --- a/src/com/pesterenan/controllers/ManeuverController.java +++ b/src/main/java/com/pesterenan/controllers/ManeuverController.java @@ -209,13 +209,11 @@ private void alignPlanesWithTargetVessel() { RunManeuverJPanel.positionManeuverAt(closestIsAN ? "ascending" : "descending"); double currentInclination = Math .toDegrees(currentManeuver.getOrbit().relativeInclination(targetVesselOrbit)); - ctrlManeuver.setTimeSample(25); while (currentInclination > 0.05) { currentInclination = Math .toDegrees(currentManeuver.getOrbit().relativeInclination(targetVesselOrbit)); double ctrlOutput = ctrlManeuver.calculate(currentInclination * 100, 0); - currentManeuver.setNormal(currentManeuver.getNormal() + (closestIsAN ? ctrlOutput : -ctrlOutput)); Thread.sleep(25); } @@ -228,7 +226,6 @@ private void rendezvousWithTargetVessel() { try { boolean hasManeuverNodes = getNaveAtual().getControl().getNodes().size() > 0; List currentManeuvers = getNaveAtual().getControl().getNodes(); - Node lastManeuverNode; double lastManeuverNodeUT = 60; if (hasManeuverNodes) { @@ -331,7 +328,10 @@ private void rendezvousWithTargetVessel() { // } // lastManeuverNode.setUT(lastManeuverNode.getUT() - // lastManeuverNode.getOrbit().getPeriod() / 2); - } catch (Exception err) {} + } catch ( + + Exception err) { + } } private double compareOrbitParameter(Orbit maneuverOrbit, Orbit targetOrbit, Compare parameter) { @@ -476,7 +476,6 @@ public void executeBurn(Node noDeManobra, double duracaoDaQueima) { throttle(ctrlManeuver.calculate((noDeManobra.getDeltaV() - Math.floor(burnDvLeft)) / noDeManobra.getDeltaV() * limitValue, limitValue)); Thread.sleep(25); - } throttle(0.0f); if (fineAdjustment) { diff --git a/src/com/pesterenan/controllers/RoverController.java b/src/main/java/com/pesterenan/controllers/RoverController.java similarity index 100% rename from src/com/pesterenan/controllers/RoverController.java rename to src/main/java/com/pesterenan/controllers/RoverController.java diff --git a/src/com/pesterenan/model/ActiveVessel.java b/src/main/java/com/pesterenan/model/ActiveVessel.java similarity index 100% rename from src/com/pesterenan/model/ActiveVessel.java rename to src/main/java/com/pesterenan/model/ActiveVessel.java diff --git a/src/com/pesterenan/resources/Bundle.java b/src/main/java/com/pesterenan/resources/Bundle.java similarity index 73% rename from src/com/pesterenan/resources/Bundle.java rename to src/main/java/com/pesterenan/resources/Bundle.java index 5866198..3523229 100644 --- a/src/com/pesterenan/resources/Bundle.java +++ b/src/main/java/com/pesterenan/resources/Bundle.java @@ -1,12 +1,12 @@ package com.pesterenan.resources; +import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; public class Bundle { - public static final String BUNDLE_NAME = Bundle.class.getPackage().getName() + ".MechPesteBundle"; //$NON-NLS-1$ - - public static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); + public static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("MechPesteBundle", + Locale.getDefault()); private Bundle() { } diff --git a/src/com/pesterenan/updater/KrpcInstaller.java b/src/main/java/com/pesterenan/updater/KrpcInstaller.java similarity index 99% rename from src/com/pesterenan/updater/KrpcInstaller.java rename to src/main/java/com/pesterenan/updater/KrpcInstaller.java index f328692..76e835f 100644 --- a/src/com/pesterenan/updater/KrpcInstaller.java +++ b/src/main/java/com/pesterenan/updater/KrpcInstaller.java @@ -90,4 +90,4 @@ public static void unzipKrpc() { } } -} \ No newline at end of file +} diff --git a/src/com/pesterenan/utils/Attributes.java b/src/main/java/com/pesterenan/utils/Attributes.java similarity index 100% rename from src/com/pesterenan/utils/Attributes.java rename to src/main/java/com/pesterenan/utils/Attributes.java diff --git a/src/com/pesterenan/utils/ControlePID.java b/src/main/java/com/pesterenan/utils/ControlePID.java similarity index 100% rename from src/com/pesterenan/utils/ControlePID.java rename to src/main/java/com/pesterenan/utils/ControlePID.java diff --git a/src/com/pesterenan/utils/Modulos.java b/src/main/java/com/pesterenan/utils/Modulos.java similarity index 100% rename from src/com/pesterenan/utils/Modulos.java rename to src/main/java/com/pesterenan/utils/Modulos.java diff --git a/src/main/java/com/pesterenan/utils/Navigation.java b/src/main/java/com/pesterenan/utils/Navigation.java new file mode 100644 index 0000000..389b33e --- /dev/null +++ b/src/main/java/com/pesterenan/utils/Navigation.java @@ -0,0 +1,158 @@ +package com.pesterenan.utils; + +import krpc.client.RPCException; +import krpc.client.Stream; +import krpc.client.StreamException; +import org.javatuples.Triplet; + +import static com.pesterenan.MechPeste.getConnection; +import static com.pesterenan.MechPeste.getSpaceCenter; +import static krpc.client.services.SpaceCenter.*; + +public class Navigation { + + public static final Triplet RADIAL = new Triplet<>(1.0, 0.0, 0.0); + public static final Triplet ANTI_RADIAL = new Triplet<>(-1.0, 0.0, 0.0); + public static final Triplet PROGRADE = new Triplet<>(0.0, 1.0, 0.0); + public static final Triplet RETROGRADE = new Triplet<>(0.0, -1.0, 0.0); + public static final Triplet NORMAL = new Triplet<>(0.0, 0.0, 1.0); + public static final Triplet ANTI_NORMAL = new Triplet<>(0.0, 0.0, -1.0); + // private Drawing drawing; + private Vessel currentVessel; + private Flight flightParameters; + private Stream horizontalSpeed; + private ReferenceFrame orbitalReference; + + public Navigation(Vessel currentVessel) { + this.currentVessel = currentVessel; + initializeParameters(); + } + + private void initializeParameters() { + try { + // drawing = Drawing.newInstance(getConexao()); + orbitalReference = currentVessel.getOrbit().getBody().getReferenceFrame(); + flightParameters = currentVessel.flight(orbitalReference); + horizontalSpeed = getConnection().addStream(flightParameters, "getHorizontalSpeed"); + } catch (RPCException | StreamException ignored) { + } + } + + public void aimAtManeuver(Node maneuver) throws RPCException { + aimAtDirection(getSpaceCenter().transformDirection(PROGRADE, maneuver.getReferenceFrame(), orbitalReference)); + } + + public void aimForLanding() throws RPCException, StreamException { + Vector currentPosition = new Vector(currentVessel.position(orbitalReference)); + Vector retrograde = new Vector( + getSpaceCenter().transformPosition(RETROGRADE, currentVessel.getSurfaceVelocityReferenceFrame(), + orbitalReference)) + .subtract(currentPosition); + Vector radial = new Vector(getSpaceCenter().transformDirection(RADIAL, + currentVessel.getSurfaceReferenceFrame(), + orbitalReference)); + double angleLimit = Utilities.remap(0, 10, 0, 0.9, horizontalSpeed.get(), true); + Vector landingVector = Utilities.linearInterpolation(radial, retrograde, angleLimit); + aimAtDirection(landingVector.toTriplet()); + } + + // public void aimAtTarget() throws RPCException, StreamException, + // InterruptedException { + // Vector currentPosition = new Vector(naveAtual.position(pontoRefSuperficie)); + // Vector targetPosition = new + // Vector(centroEspacial.getTargetVessel().position(pontoRefSuperficie)); + // targetPosition.x = 0.0; + // double distanceToTarget = Vector.distance(currentPosition, targetPosition); + // + // Vector toTargetDirection = Vector.targetDirection(currentPosition, + // targetPosition); + // Vector oppositeDirection = Vector.targetOppositeDirection(currentPosition, + // targetPosition); + // Vector progradeDirection = Vector.targetDirection(currentPosition, new + // Vector( + // centroEspacial.transformPosition(PROGRADE, + // naveAtual.getSurfaceVelocityReferenceFrame(), + // pontoRefSuperficie + // ))); + // Vector retrogradeDirection = Vector.targetDirection(currentPosition, new + // Vector( + // centroEspacial.transformPosition(RETROGRADE, + // naveAtual.getSurfaceVelocityReferenceFrame(), + // pontoRefSuperficie + // ))); + // progradeDirection.x = 0.0; + // retrogradeDirection.x = 0.0; + // drawing.addDirection(toTargetDirection.toTriplet(), pontoRefSuperficie, 10, + // true); + // drawing.addDirection(oppositeDirection.toTriplet(), pontoRefSuperficie, 5, + // true); + // double pointingToTargetThreshold = Utilities.remap(0, 200, 0, 1, + // distanceToTarget, true); + // double speedThreshold = Utilities.remap(0, 20, 0, 1, horizontalSpeed.get(), + // true); + // + // Vector currentDirection = + // Utilities.linearInterpolation(oppositeDirection, toTargetDirection, + // pointingToTargetThreshold); + // double angleCurrentDirection = + // new Vector(currentDirection.z, currentDirection.y, + // currentDirection.x).heading(); + // double angleProgradeDirection = + // new Vector(progradeDirection.z, progradeDirection.y, + // progradeDirection.x).heading(); + // double deltaAngle = angleProgradeDirection - angleCurrentDirection; + // System.out.println(deltaAngle); + // if (deltaAngle > 3) { + // currentDirection.sum(progradeDirection).normalize(); + // } else if (deltaAngle < -3) { + // currentDirection.subtract(progradeDirection).normalize(); + // } + // drawing.addDirection(currentDirection.toTriplet(), pontoRefSuperficie, 25, + // true); + // + // + // Vector currentDirectionOnOrbitalRef = new Vector( + // centroEspacial.transformDirection(currentDirection.toTriplet(), + // pontoRefSuperficie, + // pontoRefOrbital)); + // Vector radial = new Vector(centroEspacial.transformDirection(RADIAL, + // pontoRefSuperficie, + // pontoRefOrbital)); + // Vector speedVector = Utilities.linearInterpolation(retrogradeDirection, + // progradeDirection, speedThreshold); + // Vector speedVectorOnOrbitalRef = new Vector( + // centroEspacial.transformDirection(speedVector.toTriplet(), + // pontoRefSuperficie, + // pontoRefOrbital)); + // Vector pointingVector = + // Utilities.linearInterpolation(currentDirectionOnOrbitalRef, + // radial.sum(speedVectorOnOrbitalRef), + // speedThreshold + // ); + // Thread.sleep(50); + // drawing.clear(false); + // aimAtDirection(pointingVector.toTriplet()); + // } + + public void aimAtPrograde() throws RPCException { + aimAtDirection(getSpaceCenter().transformDirection(PROGRADE, currentVessel.getSurfaceVelocityReferenceFrame(), + orbitalReference)); + } + + public void aimAtRadialOut() throws RPCException { + aimAtDirection(getSpaceCenter().transformDirection(RADIAL, currentVessel.getSurfaceReferenceFrame(), + orbitalReference)); + } + + public void aimAtRetrograde() throws RPCException { + aimAtDirection(getSpaceCenter().transformDirection(RETROGRADE, + currentVessel.getSurfaceVelocityReferenceFrame(), + orbitalReference)); + } + + public void aimAtDirection(Triplet currentDirection) throws RPCException { + currentVessel.getAutoPilot().setReferenceFrame(orbitalReference); + currentVessel.getAutoPilot().setTargetDirection(currentDirection); + } + +} diff --git a/src/com/pesterenan/utils/PathFinding.java b/src/main/java/com/pesterenan/utils/PathFinding.java similarity index 74% rename from src/com/pesterenan/utils/PathFinding.java rename to src/main/java/com/pesterenan/utils/PathFinding.java index 56d2fcd..f5848e0 100644 --- a/src/com/pesterenan/utils/PathFinding.java +++ b/src/main/java/com/pesterenan/utils/PathFinding.java @@ -44,8 +44,8 @@ private void initializeParameters() { public void addWaypointsOnSameBody(String waypointName) throws RPCException { this.waypointName = waypointName; - this.waypointsToReach = - waypointManager.getWaypoints().stream().filter(this::hasSameName).collect(Collectors.toList()); + this.waypointsToReach = waypointManager.getWaypoints().stream().filter(this::hasSameName) + .collect(Collectors.toList()); } private boolean hasSameName(Waypoint waypoint) { @@ -63,26 +63,25 @@ public Vector findNearestWaypoint() throws RPCException, IOException, Interrupte double w2Distance = 0; try { w1Distance = Vector.distance(new Vector(getNaveAtual().position(orbitalReferenceFrame)), - waypointPosOnSurface(w1) - ); + waypointPosOnSurface(w1)); w2Distance = Vector.distance(new Vector(getNaveAtual().position(orbitalReferenceFrame)), - waypointPosOnSurface(w2) - ); + waypointPosOnSurface(w2)); } catch (RPCException e) { } return w1Distance > w2Distance ? 1 : -1; }).collect(Collectors.toList()); waypointsToReach.forEach(System.out::println); Waypoint currentWaypoint = waypointsToReach.get(0); -// for (Waypoint waypoint : waypointsToReach) { -// double waypointDistance = Vector.distance(new Vector(getNaveAtual().position(orbitalReferenceFrame)), -// waypointPosOnSurface(waypoint) -// ); -// if (currentDistance > waypointDistance) { -// currentDistance = waypointDistance; -// currentWaypoint = waypoint; -// } -// } + // for (Waypoint waypoint : waypointsToReach) { + // double waypointDistance = Vector.distance(new + // Vector(getNaveAtual().position(orbitalReferenceFrame)), + // waypointPosOnSurface(waypoint) + // ); + // if (currentDistance > waypointDistance) { + // currentDistance = waypointDistance; + // currentWaypoint = waypoint; + // } + // } return waypointPosOnSurface(currentWaypoint); } @@ -125,7 +124,8 @@ public void removeWaypointFromList() throws RPCException { } /** - * Builds the path to the targetPosition, on the Celestial Body Reference ( Orbital Ref ) + * Builds the path to the targetPosition, on the Celestial Body Reference ( + * Orbital Ref ) * * @param targetPosition the target pos to build the path to * @throws IOException @@ -133,10 +133,11 @@ public void removeWaypointFromList() throws RPCException { * @throws InterruptedException */ public void buildPathToTarget(Vector targetPosition) throws IOException, RPCException, InterruptedException { - // Get current rover Position on Orbital Ref, transform to Surf Ref and add 20 centimeters on height: + // Get current rover Position on Orbital Ref, transform to Surf Ref and add 20 + // centimeters on height: Vector roverHeight = new Vector(0.2, 0.0, 0.0); - Vector currentRoverPos = - transformSurfToOrb(new Vector(getNaveAtual().position(surfaceReferenceFrame)).sum(roverHeight)); + Vector currentRoverPos = transformSurfToOrb( + new Vector(getNaveAtual().position(surfaceReferenceFrame)).sum(roverHeight)); // Calculate distance from rover to target on Orbital Ref: double distanceToTarget = Vector.distance(currentRoverPos, targetPosition); // Add rover pos as first point, on Orbital Ref @@ -148,14 +149,12 @@ public void buildPathToTarget(Vector targetPosition) throws IOException, RPCExce throw new InterruptedException(); } Vector currentPoint = pathToTarget.get(index); - Vector targetDirection = - transformOrbToSurf(targetPosition).subtract(transformOrbToSurf(currentPoint)).normalize(); - Vector nextPoint = - transformSurfToOrb(calculateNextPoint(transformOrbToSurf(currentPoint), targetDirection)); + Vector targetDirection = transformOrbToSurf(targetPosition).subtract(transformOrbToSurf(currentPoint)) + .normalize(); + Vector nextPoint = transformSurfToOrb(calculateNextPoint(transformOrbToSurf(currentPoint), targetDirection)); pathToTarget.add(nextPoint); index++; - double distanceBetweenPoints = - Vector.distance(transformOrbToSurf(currentPoint), transformOrbToSurf(nextPoint)); + double distanceBetweenPoints = Vector.distance(transformOrbToSurf(currentPoint), transformOrbToSurf(nextPoint)); distanceToTarget -= distanceBetweenPoints; } pathToTarget.add(getPosOnSurface(targetPosition)); @@ -163,12 +162,11 @@ public void buildPathToTarget(Vector targetPosition) throws IOException, RPCExce } private void drawPathToTarget(List path) throws RPCException { - Deque> drawablePath = - path.stream().map(Vector::toTriplet).collect(Collectors.toCollection(ArrayDeque::new)); + Deque> drawablePath = path.stream().map(Vector::toTriplet) + .collect(Collectors.toCollection(ArrayDeque::new)); drawablePath.offerFirst(new Triplet<>(0.0, 0.0, 0.0)); drawablePath.offerLast(new Triplet<>(0.0, 0.0, 0.0)); - polygonPath = - drawing.addPolygon(drawablePath.stream().collect(Collectors.toList()), orbitalReferenceFrame, true); + polygonPath = drawing.addPolygon(drawablePath.stream().collect(Collectors.toList()), orbitalReferenceFrame, true); polygonPath.setThickness(0.5f); polygonPath.setColor(new Triplet<>(1.0, 0.5, 0.0)); } @@ -184,25 +182,22 @@ private Vector calculateNextPoint(Vector currentPoint, Vector targetDirection) t // PONTO REF SUPERFICIE: X = CIMA, Y = NORTE, Z = LESTE; double stepDistance = 100.0; // Calculate the next point position on surface: - Vector nextPoint = - getPosOnSurface(transformSurfToOrb(currentPoint.sum(targetDirection.multiply(stepDistance)))); + Vector nextPoint = getPosOnSurface(transformSurfToOrb(currentPoint.sum(targetDirection.multiply(stepDistance)))); return transformOrbToSurf(nextPoint).sum(new Vector(0.2, 0.0, 0.0)); } public double raycastDistance(Vector currentPoint, Vector targetDirection, SpaceCenter.ReferenceFrame reference, - double searchDistance) throws RPCException { + double searchDistance) throws RPCException { return Math.min( getSpaceCenter().raycastDistance(currentPoint.toTriplet(), targetDirection.toTriplet(), reference), - searchDistance - ); + searchDistance); } private Vector getPosOnSurface(Vector vector) throws RPCException { return new Vector( currentBody.surfacePosition(currentBody.latitudeAtPosition(vector.toTriplet(), orbitalReferenceFrame), - currentBody.longitudeAtPosition(vector.toTriplet(), orbitalReferenceFrame), - orbitalReferenceFrame - )); + currentBody.longitudeAtPosition(vector.toTriplet(), orbitalReferenceFrame), + orbitalReferenceFrame)); } private Vector transformSurfToOrb(Vector vector) throws IOException, RPCException { diff --git a/src/com/pesterenan/utils/Telemetry.java b/src/main/java/com/pesterenan/utils/Telemetry.java similarity index 100% rename from src/com/pesterenan/utils/Telemetry.java rename to src/main/java/com/pesterenan/utils/Telemetry.java diff --git a/src/com/pesterenan/utils/Utilities.java b/src/main/java/com/pesterenan/utils/Utilities.java similarity index 96% rename from src/com/pesterenan/utils/Utilities.java rename to src/main/java/com/pesterenan/utils/Utilities.java index d3be012..86bdccc 100644 --- a/src/com/pesterenan/utils/Utilities.java +++ b/src/main/java/com/pesterenan/utils/Utilities.java @@ -27,7 +27,7 @@ public static Vector inverseLinearInterpolation(Vector start, Vector end, double } public static double remap(double inputMin, double inputMax, double outputMin, double outputMax, double value, - boolean clampOutput) { + boolean clampOutput) { double between = inverseLinearInterpolation(inputMin, inputMax, value); double remappedOutput = linearInterpolation(outputMin, outputMax, between); return clampOutput ? clamp(remappedOutput, outputMin, outputMax) : remappedOutput; @@ -78,7 +78,6 @@ public String formatElapsedTime(Double totalSeconds) { int minutes = (totalSeconds.intValue() % 3600) / 60; int seconds = totalSeconds.intValue() % 60; return String.format(Bundle.getString("pnl_tel_lbl_date_template"), years, days, hours, minutes, - seconds - ); //$NON-NLS-1$ + seconds); // $NON-NLS-1$ } } diff --git a/src/com/pesterenan/utils/Vector.java b/src/main/java/com/pesterenan/utils/Vector.java similarity index 100% rename from src/com/pesterenan/utils/Vector.java rename to src/main/java/com/pesterenan/utils/Vector.java diff --git a/src/main/java/com/pesterenan/utils/VersionUtil.java b/src/main/java/com/pesterenan/utils/VersionUtil.java new file mode 100644 index 0000000..a6084ca --- /dev/null +++ b/src/main/java/com/pesterenan/utils/VersionUtil.java @@ -0,0 +1,32 @@ +package com.pesterenan.utils; + +import java.io.File; +import java.io.FileReader; +import java.io.InputStreamReader; + +import org.apache.maven.model.Model; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; + +public class VersionUtil { + public static String getVersion() { + String version = "N/A"; + MavenXpp3Reader reader = new MavenXpp3Reader(); + Model model; + try { + if ((new File("pom.xml")).exists()) { + model = reader.read(new FileReader("pom.xml")); + } else { + model = reader.read( + new InputStreamReader( + VersionUtil.class.getResourceAsStream( + "/META-INF/maven/com.pesterenan/MechPeste/pom.xml"))); + } + version = model.getVersion(); + return version; + } catch (Exception e) { + e.printStackTrace(); + + } + return version; + } +} diff --git a/src/com/pesterenan/views/AboutJFrame.java b/src/main/java/com/pesterenan/views/AboutJFrame.java similarity index 95% rename from src/com/pesterenan/views/AboutJFrame.java rename to src/main/java/com/pesterenan/views/AboutJFrame.java index 7c3d2eb..e402033 100644 --- a/src/com/pesterenan/views/AboutJFrame.java +++ b/src/main/java/com/pesterenan/views/AboutJFrame.java @@ -9,6 +9,8 @@ import javax.swing.JLabel; import javax.swing.JPanel; +import com.pesterenan.utils.VersionUtil; + import static com.pesterenan.views.MainGui.BTN_DIMENSION; import static com.pesterenan.views.MainGui.centerDialogOnScreen; import static com.pesterenan.views.MainGui.createMarginComponent; @@ -28,7 +30,7 @@ public AboutJFrame() { @Override public void initComponents() { // Labels: - lblMechpeste = new JLabel("MechPeste - v.0.6.2"); + lblMechpeste = new JLabel("MechPeste - v." + VersionUtil.getVersion()); lblAboutInfo = new JLabel( "Esse app foi desenvolvido com o intuito de auxiliar o controle de naves
no game Kerbal Space Program.

" + "Não há garantias sobre o controle exato do app, portanto fique atento
" diff --git a/src/com/pesterenan/views/ChangeVesselDialog.java b/src/main/java/com/pesterenan/views/ChangeVesselDialog.java similarity index 99% rename from src/com/pesterenan/views/ChangeVesselDialog.java rename to src/main/java/com/pesterenan/views/ChangeVesselDialog.java index 527b9ab..3702480 100644 --- a/src/com/pesterenan/views/ChangeVesselDialog.java +++ b/src/main/java/com/pesterenan/views/ChangeVesselDialog.java @@ -99,7 +99,6 @@ public void layoutComponents() { pnlScroll.add(scrollPane); pnlScroll.add(Box.createHorizontalStrut(190)); - JPanel pnlOptionsAndList = new JPanel(); pnlOptionsAndList.setLayout(new BoxLayout(pnlOptionsAndList, BoxLayout.X_AXIS)); pnlOptions.setAlignmentY(TOP_ALIGNMENT); diff --git a/src/com/pesterenan/views/CreateManeuverJPanel.java b/src/main/java/com/pesterenan/views/CreateManeuverJPanel.java similarity index 99% rename from src/com/pesterenan/views/CreateManeuverJPanel.java rename to src/main/java/com/pesterenan/views/CreateManeuverJPanel.java index 8bdf2ed..6c3a5ae 100644 --- a/src/com/pesterenan/views/CreateManeuverJPanel.java +++ b/src/main/java/com/pesterenan/views/CreateManeuverJPanel.java @@ -81,7 +81,6 @@ public void initComponents() { sliderValues.put(5, 1000f); ctrlManeuver.setOutput(-100, 100); - } @Override diff --git a/src/com/pesterenan/views/DockingJPanel.java b/src/main/java/com/pesterenan/views/DockingJPanel.java similarity index 98% rename from src/com/pesterenan/views/DockingJPanel.java rename to src/main/java/com/pesterenan/views/DockingJPanel.java index 8c5e975..26edbb3 100644 --- a/src/com/pesterenan/views/DockingJPanel.java +++ b/src/main/java/com/pesterenan/views/DockingJPanel.java @@ -5,7 +5,6 @@ import com.pesterenan.utils.Modulos; import javax.swing.*; -import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.ActionEvent; diff --git a/src/com/pesterenan/views/FunctionsAndTelemetryJPanel.java b/src/main/java/com/pesterenan/views/FunctionsAndTelemetryJPanel.java similarity index 99% rename from src/com/pesterenan/views/FunctionsAndTelemetryJPanel.java rename to src/main/java/com/pesterenan/views/FunctionsAndTelemetryJPanel.java index 0c803a7..5a6dc03 100644 --- a/src/com/pesterenan/views/FunctionsAndTelemetryJPanel.java +++ b/src/main/java/com/pesterenan/views/FunctionsAndTelemetryJPanel.java @@ -22,7 +22,6 @@ public class FunctionsAndTelemetryJPanel extends JPanel implements UIMethods { private final Dimension btnFuncDimension = new Dimension(140, 25); private JButton btnLiftoff, btnLanding, btnManeuvers, btnDocking, btnRover, btnCancel; - private static JLabel lblAltitude, lblSurfaceAlt, lblApoapsis, lblPeriapsis, lblVertSpeed, lblHorzSpeed; private static JLabel lblAltitudeValue, lblSurfaceAltValue, lblApoapsisValue; private static JLabel lblPeriapsisValue, lblVertSpeedValue, lblHorzSpeedValue; @@ -101,7 +100,6 @@ public void layoutComponents() { pnlFunctionControls.add(btnLanding); pnlFunctionControls.add(btnRover); pnlFunctionControls.add(btnDocking); - pnlFunctionControls.add(btnManeuvers); pnlFunctionControls.add(Box.createVerticalGlue()); diff --git a/src/main/java/com/pesterenan/views/InstallKrpcDialog.java b/src/main/java/com/pesterenan/views/InstallKrpcDialog.java new file mode 100644 index 0000000..a9b0164 --- /dev/null +++ b/src/main/java/com/pesterenan/views/InstallKrpcDialog.java @@ -0,0 +1,200 @@ +package com.pesterenan.views; + +import com.pesterenan.resources.Bundle; +import com.pesterenan.updater.KrpcInstaller; + +import javax.swing.*; +import javax.swing.GroupLayout.Alignment; +import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.border.BevelBorder; +import javax.swing.border.TitledBorder; + +public class InstallKrpcDialog extends JDialog { + private static final long serialVersionUID = 1L; + private JLabel lblInstallerInfo; + private final JSeparator separator = new JSeparator(); + private final JPanel pnlKspFolderPath = new JPanel(); + private final JTextField txfPath = new JTextField(); + private JButton btnBrowsePath; + private JButton btnDownloadInstall; + private JButton btnCancel; + private JPanel pnlStatus; + private static JLabel lblStatus; + + public InstallKrpcDialog() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + initComponents(); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + private void initComponents() { + setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + setResizable(false); + setBounds(MainGui.centerDialogOnScreen()); + setAlwaysOnTop(true); + setModalityType(ModalityType.APPLICATION_MODAL); + setTitle(Bundle.getString("installer_dialog_title")); //$NON-NLS-1$ + + lblInstallerInfo = new JLabel(Bundle.getString("installer_dialog_txt_info")); //$NON-NLS-1$ + + pnlKspFolderPath.setBorder( + new TitledBorder(null, Bundle.getString("installer_dialog_pnl_path"), TitledBorder.LEADING, // $NON + // -NLS-1$ + TitledBorder.TOP, null, null)); + + btnDownloadInstall = new JButton(Bundle.getString("installer_dialog_btn_download")); // $NON + // -NLS-1$ + btnDownloadInstall.addActionListener((e) -> KrpcInstaller.downloadAndInstallKrpc()); + btnDownloadInstall.setEnabled(false); + + btnCancel = new JButton(Bundle.getString("installer_dialog_btn_cancel")); //$NON-NLS-1$ + btnCancel.addActionListener((e) -> this.dispose()); + + pnlStatus = new JPanel(); + pnlStatus.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); + + GroupLayout groupLayout = new GroupLayout(getContentPane()); + groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.TRAILING) + .addGroup(groupLayout.createSequentialGroup() + .addContainerGap() + .addGroup(groupLayout.createParallelGroup( + Alignment.LEADING) + .addComponent( + pnlKspFolderPath, + GroupLayout.DEFAULT_SIZE, + 414, + Short.MAX_VALUE) + .addComponent( + lblInstallerInfo, + Alignment.TRAILING, + GroupLayout.DEFAULT_SIZE, + 414, + Short.MAX_VALUE) + .addComponent(separator, + Alignment.TRAILING, + GroupLayout.DEFAULT_SIZE, + 414, + Short.MAX_VALUE) + .addGroup( + groupLayout.createSequentialGroup() + .addComponent( + btnDownloadInstall) + .addPreferredGap( + ComponentPlacement.RELATED, + 184, + Short.MAX_VALUE) + .addComponent( + btnCancel))) + .addGap(10)) + .addComponent(pnlStatus, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, + 434, Short.MAX_VALUE)); + groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING) + .addGroup(groupLayout.createSequentialGroup() + .addContainerGap() + .addComponent(lblInstallerInfo, + GroupLayout.PREFERRED_SIZE, 60, + GroupLayout.PREFERRED_SIZE) + .addGap(2) + .addComponent(separator, + GroupLayout.PREFERRED_SIZE, 2, + GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addComponent(pnlKspFolderPath, + GroupLayout.PREFERRED_SIZE, 51, + GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addGroup(groupLayout.createParallelGroup( + Alignment.BASELINE) + .addComponent( + btnDownloadInstall) + .addComponent(btnCancel)) + .addPreferredGap(ComponentPlacement.RELATED, 60, + Short.MAX_VALUE) + .addComponent(pnlStatus, + GroupLayout.PREFERRED_SIZE, 25, + GroupLayout.PREFERRED_SIZE))); + + lblStatus = new JLabel(); + GroupLayout glPnlStatus = new GroupLayout(pnlStatus); + glPnlStatus.setHorizontalGroup(glPnlStatus.createParallelGroup(Alignment.LEADING) + .addGroup(glPnlStatus.createSequentialGroup() + .addContainerGap() + .addComponent(lblStatus) + .addContainerGap(389, Short.MAX_VALUE))); + glPnlStatus.setVerticalGroup(glPnlStatus.createParallelGroup(Alignment.TRAILING) + .addGroup(glPnlStatus.createSequentialGroup() + .addGap(2) + .addComponent(lblStatus, GroupLayout.DEFAULT_SIZE, + GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addGap(0))); + pnlStatus.setLayout(glPnlStatus); + + txfPath.setEditable(false); + txfPath.setColumns(10); + + btnBrowsePath = new JButton(Bundle.getString("installer_dialog_btn_browse")); //$NON-NLS-1$ + btnBrowsePath.addActionListener(e -> { + chooseKSPFolder(); + txfPath.setText(KrpcInstaller.getKspFolder()); + }); + GroupLayout glPnlKspFolderPath = new GroupLayout(pnlKspFolderPath); + glPnlKspFolderPath.setHorizontalGroup(glPnlKspFolderPath.createParallelGroup(Alignment.LEADING) + .addGroup(Alignment.TRAILING, + glPnlKspFolderPath.createSequentialGroup() + .addContainerGap() + .addComponent(txfPath, + GroupLayout.DEFAULT_SIZE, + 273, + Short.MAX_VALUE) + .addPreferredGap( + ComponentPlacement.RELATED) + .addComponent(btnBrowsePath, + GroupLayout.PREFERRED_SIZE, + 103, + GroupLayout.PREFERRED_SIZE) + .addContainerGap())); + glPnlKspFolderPath.setVerticalGroup(glPnlKspFolderPath.createParallelGroup(Alignment.LEADING) + .addGroup(glPnlKspFolderPath.createSequentialGroup() + .addGroup( + glPnlKspFolderPath.createParallelGroup( + Alignment.BASELINE) + .addComponent( + txfPath, + GroupLayout.PREFERRED_SIZE, + 23, + GroupLayout.PREFERRED_SIZE) + .addComponent( + btnBrowsePath)) + .addContainerGap(24, + Short.MAX_VALUE))); + pnlKspFolderPath.setLayout(glPnlKspFolderPath); + getContentPane().setLayout(groupLayout); + + setVisible(true); + } + + public void chooseKSPFolder() { + JFileChooser kspDir = new JFileChooser(); + kspDir.setDialogTitle("Escolha a pasta do KSP na Steam"); + kspDir.setMultiSelectionEnabled(false); + kspDir.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int response = kspDir.showOpenDialog(this); + if (response == JFileChooser.APPROVE_OPTION) { + KrpcInstaller.setKspFolder(kspDir.getSelectedFile().getPath()); + btnDownloadInstall.setEnabled(true); + setStatus("Pasta escolhida, pronto para instalar."); + } else { + KrpcInstaller.setKspFolder(null); + btnDownloadInstall.setEnabled(false); + setStatus(""); + } + } + + public static void setStatus(String status) { + lblStatus.setText(status); + } +} diff --git a/src/com/pesterenan/views/LandingJPanel.java b/src/main/java/com/pesterenan/views/LandingJPanel.java similarity index 100% rename from src/com/pesterenan/views/LandingJPanel.java rename to src/main/java/com/pesterenan/views/LandingJPanel.java diff --git a/src/com/pesterenan/views/LiftoffJPanel.java b/src/main/java/com/pesterenan/views/LiftoffJPanel.java similarity index 100% rename from src/com/pesterenan/views/LiftoffJPanel.java rename to src/main/java/com/pesterenan/views/LiftoffJPanel.java diff --git a/src/com/pesterenan/views/MainGui.java b/src/main/java/com/pesterenan/views/MainGui.java similarity index 100% rename from src/com/pesterenan/views/MainGui.java rename to src/main/java/com/pesterenan/views/MainGui.java diff --git a/src/com/pesterenan/views/RoverJPanel.java b/src/main/java/com/pesterenan/views/RoverJPanel.java similarity index 99% rename from src/com/pesterenan/views/RoverJPanel.java rename to src/main/java/com/pesterenan/views/RoverJPanel.java index d9b4d20..8590f82 100644 --- a/src/com/pesterenan/views/RoverJPanel.java +++ b/src/main/java/com/pesterenan/views/RoverJPanel.java @@ -169,4 +169,4 @@ private boolean validateTextFields() { } return true; } -} \ No newline at end of file +} diff --git a/src/com/pesterenan/views/RunManeuverJPanel.java b/src/main/java/com/pesterenan/views/RunManeuverJPanel.java similarity index 98% rename from src/com/pesterenan/views/RunManeuverJPanel.java rename to src/main/java/com/pesterenan/views/RunManeuverJPanel.java index ab2f7ee..037ecd8 100644 --- a/src/com/pesterenan/views/RunManeuverJPanel.java +++ b/src/main/java/com/pesterenan/views/RunManeuverJPanel.java @@ -3,13 +3,11 @@ import com.pesterenan.MechPeste; import com.pesterenan.resources.Bundle; import com.pesterenan.utils.ControlePID; -import com.pesterenan.utils.Vector; import com.pesterenan.utils.Modulos; import krpc.client.RPCException; import krpc.client.services.SpaceCenter.Node; import krpc.client.services.SpaceCenter.Orbit; -import krpc.client.services.SpaceCenter.ReferenceFrame; import krpc.client.services.SpaceCenter.Vessel; import krpc.client.services.SpaceCenter.VesselSituation; @@ -65,7 +63,7 @@ public static void createManeuver() { } catch (RPCException e) { } } - + public static void createManeuver(double atFutureTime) { System.out.println("Create maneuver overloaded"); try { diff --git a/src/com/pesterenan/views/StatusJPanel.java b/src/main/java/com/pesterenan/views/StatusJPanel.java similarity index 100% rename from src/com/pesterenan/views/StatusJPanel.java rename to src/main/java/com/pesterenan/views/StatusJPanel.java diff --git a/src/main/java/com/pesterenan/views/UIMethods.java b/src/main/java/com/pesterenan/views/UIMethods.java new file mode 100644 index 0000000..5338fd0 --- /dev/null +++ b/src/main/java/com/pesterenan/views/UIMethods.java @@ -0,0 +1,10 @@ +package com.pesterenan.views; + +public interface UIMethods { + + public void initComponents(); + + public void setupComponents(); + + public void layoutComponents(); +} diff --git a/src/com/pesterenan/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF similarity index 100% rename from src/com/pesterenan/resources/META-INF/MANIFEST.MF rename to src/main/resources/META-INF/MANIFEST.MF diff --git a/src/com/pesterenan/resources/MechPesteBundle.properties b/src/main/resources/MechPesteBundle.properties similarity index 100% rename from src/com/pesterenan/resources/MechPesteBundle.properties rename to src/main/resources/MechPesteBundle.properties diff --git a/src/com/pesterenan/resources/MechPesteBundle_pt.properties b/src/main/resources/MechPesteBundle_pt.properties similarity index 100% rename from src/com/pesterenan/resources/MechPesteBundle_pt.properties rename to src/main/resources/MechPesteBundle_pt.properties diff --git a/src/com/pesterenan/resources/krpc-java-0.5.2.jar b/src/main/resources/krpc-java-0.5.2.jar similarity index 100% rename from src/com/pesterenan/resources/krpc-java-0.5.2.jar rename to src/main/resources/krpc-java-0.5.2.jar