Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .settings/org.eclipse.jdt.apt.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=false
27 changes: 12 additions & 15 deletions .settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
# Java Version
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
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

# Indentation
org.eclipse.jdt.core.formatter.tabulation.char=space
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.indentation.size=4

# Braces
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line

# Line Wrapping
org.eclipse.jdt.core.formatter.lineSplit=120
org.eclipse.jdt.core.formatter.join_wrapped_lines=false

# Other
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=false
org.eclipse.jdt.core.formatter.lineSplit=120
org.eclipse.jdt.core.formatter.tabulation.char=space
org.eclipse.jdt.core.formatter.tabulation.size=4
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>com.pesterenan</groupId>
<artifactId>MechPeste</artifactId>
<version>0.8.0</version>
<version>0.8.1</version>

<build>
<plugins>
Expand Down
216 changes: 27 additions & 189 deletions src/main/java/com/pesterenan/MechPeste.java
Original file line number Diff line number Diff line change
@@ -1,212 +1,50 @@
package com.pesterenan;

import static com.pesterenan.views.StatusJPanel.isBtnConnectVisible;
import static com.pesterenan.views.StatusJPanel.setStatusMessage;
import java.lang.reflect.InvocationTargetException;

import java.awt.event.ActionEvent;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.swing.SwingUtilities;

import javax.swing.DefaultListModel;
import javax.swing.ListModel;

import com.pesterenan.model.ActiveVessel;
import com.pesterenan.resources.Bundle;
import com.pesterenan.utils.Vector;
import com.pesterenan.views.CreateManeuverJPanel;
import com.pesterenan.views.FunctionsAndTelemetryJPanel;
import com.pesterenan.model.ConnectionManager;
import com.pesterenan.model.VesselManager;
import com.pesterenan.views.MainGui;

import krpc.client.Connection;
import krpc.client.RPCException;
import krpc.client.services.KRPC;
import krpc.client.services.SpaceCenter;
import krpc.client.services.SpaceCenter.Node;
import krpc.client.services.SpaceCenter.Vessel;
import com.pesterenan.views.StatusDisplay;

public class MechPeste {
private static KRPC krpc;
private static MechPeste mechPeste;
private static SpaceCenter spaceCenter;
private static Connection connection;
private static int currentVesselId = -1;
private static ActiveVessel currentVessel = null;

public static void main(String[] args) {
MechPeste.newInstance().connectToKSP();
MechPeste.newInstance().checkActiveVessel();
}

public static MechPeste newInstance() {
if (mechPeste == null) {
mechPeste = new MechPeste();
}
return mechPeste;
}

public static Connection getConnection() {
return connection;
}

public static SpaceCenter getSpaceCenter() {
return spaceCenter;
}

public static ListModel<String> getActiveVessels(String search) {
DefaultListModel<String> list = new DefaultListModel<>();
try {
List<Vessel> vessels = spaceCenter.getVessels();
vessels = vessels.stream().filter(v -> filterVessels(v, search)).collect(Collectors.toList());
vessels.forEach(v -> {
try {
String vesselName = v.hashCode() + " - \t" + v.getName();
list.addElement(vesselName);
} catch (RPCException ignored) {
}
});
} catch (RPCException | NullPointerException ignored) {
}
return list;
}

public static ListModel<String> getCurrentManeuvers() {
DefaultListModel<String> list = new DefaultListModel<>();
try {
List<Node> maneuvers = getSpaceCenter().getActiveVessel().getControl().getNodes();
maneuvers.forEach(m -> {
try {
String maneuverStr = String.format("%d - Dv: %.1f {P: %.1f, N: %.1f, R: %.1f} AP: %.1f, PE: %.1f",
maneuvers.indexOf(m) + 1, m.getDeltaV(), m.getPrograde(), m.getNormal(), m.getRadial(),
m.getOrbit().getApoapsisAltitude(), m.getOrbit().getPeriapsisAltitude());
list.addElement(maneuverStr);
} catch (RPCException ignored) {
}
});
} catch (RPCException | NullPointerException ignored) {
}
return list;
}
private static MechPeste instance;
private ConnectionManager connectionManager = null;
private VesselManager vesselManager;

public static String getVesselInfo(int selectedIndex) {
try {
Vessel activeVessel = spaceCenter.getVessels().stream().filter(v -> v.hashCode() == selectedIndex)
.findFirst().get();
String name = activeVessel.getName().length() > 40
? activeVessel.getName().substring(0, 40) + "..."
: activeVessel.getName();
String vesselInfo = String.format("Nome: %s\t\t\t | Corpo: %s", name,
activeVessel.getOrbit().getBody().getName());
return vesselInfo;
} catch (RPCException | NullPointerException ignored) {
}
return "";
}

public static void changeToVessel(int selectedIndex) {
try {
Vessel activeVessel = spaceCenter.getVessels().stream().filter(v -> v.hashCode() == selectedIndex)
.findFirst().get();
spaceCenter.setActiveVessel(activeVessel);
} catch (RPCException | NullPointerException e) {
System.out.println(Bundle.getString("status_couldnt_switch_vessel"));
}
public ConnectionManager getConnectionManager() {
return connectionManager;
}

public static void cancelControl(ActionEvent e) {
currentVessel.cancelControl();
}

private static boolean filterVessels(Vessel vessel, String search) {
if (search == "all") {
return true;
}
double TEN_KILOMETERS = 10000.0;
try {
Vessel active = MechPeste.getSpaceCenter().getActiveVessel();
if (vessel.getOrbit().getBody().getName().equals(active.getOrbit().getBody().getName())) {
final Vector activePos = new Vector(active.position(active.getSurfaceReferenceFrame()));
final Vector vesselPos = new Vector(vessel.position(active.getSurfaceReferenceFrame()));
final double distance = Vector.distance(activePos, vesselPos);
switch (search) {
case "closest" :
if (distance < TEN_KILOMETERS) {
return true;
}
break;
case "samebody" :
return true;
}
}
} catch (RPCException ignored) {
}
return false;
public VesselManager getVesselManager() {
return vesselManager;
}

private MechPeste() {
MainGui.newInstance();
}

public KRPC.GameScene getCurrentGameScene() throws RPCException {
return krpc.getCurrentGameScene();
}

public void startModule(Map<String,String> commands) {
currentVessel.startModule(commands);
}

public void connectToKSP() {
setStatusMessage(Bundle.getString("status_connecting"));
try {
connection = Connection.newInstance("MechPeste - Pesterenan");
krpc = KRPC.newInstance(connection);
spaceCenter = SpaceCenter.newInstance(getConnection());
setStatusMessage(Bundle.getString("status_connected"));
isBtnConnectVisible(false);
} catch (IOException e) {
setStatusMessage(Bundle.getString("status_error_connection"));
isBtnConnectVisible(true);
public static MechPeste newInstance() {
if (instance == null) {
instance = new MechPeste();
}
return instance;
}

public void checkConnection() {
public static void main(String[] args) {
MechPeste app = MechPeste.newInstance();
try {
if (!MechPeste.newInstance().getCurrentGameScene().equals(KRPC.GameScene.FLIGHT)) {
setStatusMessage(Bundle.getString("status_ready"));
return;
}
getConnection().close();
} catch (RPCException | NullPointerException | IOException e) {
setStatusMessage(Bundle.getString("status_error_connection"));
isBtnConnectVisible(true);
SwingUtilities.invokeAndWait(() -> MainGui.newInstance());
} catch (InvocationTargetException | InterruptedException e) {
System.err.println("Error while invoking GUI: " + e.getMessage());
e.printStackTrace();
}
}

private void checkActiveVessel() {
while (getConnection() != null) {
try {
if (!MechPeste.newInstance().getCurrentGameScene().equals(KRPC.GameScene.FLIGHT)) {
Thread.sleep(100);
return;
}
int activeVesselId = spaceCenter.getActiveVessel().hashCode();
// If the current active vessel changes, create a new connection
if (currentVesselId != activeVesselId) {
currentVessel = new ActiveVessel();
currentVesselId = currentVessel.getCurrentVesselId();
}
if (currentVesselId != -1) {
currentVessel.recordTelemetryData();
if (currentVessel.hasModuleRunning()) {
setStatusMessage(currentVessel.getCurrentStatus());
}
FunctionsAndTelemetryJPanel.updateTelemetry(currentVessel.getTelemetryData());
CreateManeuverJPanel.updatePanel(getCurrentManeuvers());
}
Thread.sleep(100);
} catch (RPCException | InterruptedException ignored) {
}
}
StatusDisplay statusDisplay = MainGui.newInstance().getStatusPanel();
app.connectionManager = new ConnectionManager("MechPeste - Pesterenan", statusDisplay);
app.vesselManager = new VesselManager(app.connectionManager, statusDisplay);
app.vesselManager.startUpdateLoop();
}

}
6 changes: 4 additions & 2 deletions src/main/java/com/pesterenan/controllers/Controller.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.pesterenan.controllers;

import com.pesterenan.model.ActiveVessel;
import com.pesterenan.model.ConnectionManager;
import com.pesterenan.model.VesselManager;

public class Controller extends ActiveVessel implements Runnable {

public Controller() {
super();
public Controller(ConnectionManager connectionManager, VesselManager vesselManager) {
super(connectionManager, vesselManager);
}

public void run() {
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/com/pesterenan/controllers/DockingController.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package com.pesterenan.controllers;

import static com.pesterenan.MechPeste.getConnection;
import static com.pesterenan.MechPeste.getSpaceCenter;

import java.util.Map;

import com.pesterenan.model.ConnectionManager;
import com.pesterenan.model.VesselManager;
import com.pesterenan.resources.Bundle;
import com.pesterenan.utils.Module;
import com.pesterenan.utils.Utilities;
import com.pesterenan.utils.Vector;
import com.pesterenan.views.DockingJPanel;
import com.pesterenan.views.StatusJPanel;

import krpc.client.RPCException;
import krpc.client.services.Drawing;
Expand Down Expand Up @@ -48,9 +46,12 @@ public class DockingController extends Controller {
private double lastZTargetPos = 0.0;
private long sleepTime = 25;
private DOCKING_STEPS dockingStep;
private ConnectionManager connectionManager;

public DockingController(Map<String,String> commands) {
super();
public DockingController(ConnectionManager connectionManager, VesselManager vesselManager,
Map<String,String> commands) {
super(connectionManager, vesselManager);
this.connectionManager = connectionManager;
this.commands = commands;
initializeParameters();
}
Expand All @@ -59,8 +60,8 @@ private void initializeParameters() {
try {
DOCKING_MAX_SPEED = Double.parseDouble(commands.get(Module.MAX_SPEED.get()));
SAFE_DISTANCE = Double.parseDouble(commands.get(Module.SAFE_DISTANCE.get()));
drawing = Drawing.newInstance(getConnection());
targetVessel = getSpaceCenter().getTargetVessel();
drawing = Drawing.newInstance(connectionManager.getConnection());
targetVessel = connectionManager.getSpaceCenter().getTargetVessel();
control = getActiveVessel().getControl();
vesselRefFrame = getActiveVessel().getReferenceFrame();
orbitalRefVessel = getActiveVessel().getOrbitalReferenceFrame();
Expand Down Expand Up @@ -160,7 +161,7 @@ public void startDocking() {
Thread.sleep(sleepTime);
}
} catch (RPCException | InterruptedException | IllegalArgumentException e) {
StatusJPanel.setStatusMessage("Docking interrupted.");
setCurrentStatus("Docking interrupted.");
}
}

Expand Down
Loading