Skip to content

Commit 0efb1b4

Browse files
committed
Improve game duplicate protection
1 parent a6e02fe commit 0efb1b4

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

pdxu-app/src/main/java/com/crschnick/pdxu/app/installation/GameAppManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public void importLatest() {
144144
}
145145
}
146146

147-
private void killGame(GameApp g) {
147+
public void killGame(GameApp g) {
148148
logger.info("Killing game");
149149
lastKill = Instant.now();
150150
g.kill();

pdxu-app/src/main/java/com/crschnick/pdxu/app/installation/GameKeyListener.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.crschnick.pdxu.app.installation;
22

33
import com.crschnick.pdxu.app.core.TaskExecutor;
4+
import com.crschnick.pdxu.app.savegame.SavegameActions;
45
import org.jnativehook.keyboard.NativeKeyEvent;
56
import org.jnativehook.keyboard.NativeKeyListener;
67
import org.slf4j.LoggerFactory;
@@ -21,7 +22,7 @@ public void nativeKeyPressed(NativeKeyEvent e) {
2122
if ((e.getModifiers() & NativeKeyEvent.SHIFT_MASK) != 0 && ((e.getModifiers() & NativeKeyEvent.CTRL_MASK) != 0 || (e.getModifiers() & NativeKeyEvent.META_MASK) != 0)) {
2223
if (e.getKeyCode() == NativeKeyEvent.VC_K && canPass(1)) {
2324
LoggerFactory.getLogger(GameKeyListener.class).debug("Kill key pressed");
24-
handle.kill();
25+
GameAppManager.getInstance().killGame(handle);
2526
}
2627
if (e.getKeyCode() == NativeKeyEvent.VC_I && canPass(2)) {
2728
LoggerFactory.getLogger(GameKeyListener.class).debug("Import key pressed");
@@ -33,10 +34,27 @@ public void nativeKeyPressed(NativeKeyEvent e) {
3334
GameAppManager.getInstance().loadLatestCheckpoint();
3435
}
3536
if (e.getKeyCode() == NativeKeyEvent.VC_R && canPass(4)) {
36-
TaskExecutor.getInstance().submitTask(() -> {
37-
LoggerFactory.getLogger(GameKeyListener.class).debug("Reverting to latest save");
38-
GameAppManager.getInstance().importLatestAndLaunch();
39-
}, true);
37+
LoggerFactory.getLogger(GameKeyListener.class).debug("Reverting to latest save");
38+
var g = handle.getGame();
39+
if (g == null) {
40+
return;
41+
}
42+
43+
if (!handle.isAlive()) {
44+
return;
45+
}
46+
47+
if (!GameInstallation.ALL.get(g).getDist().supportsDirectLaunch()) {
48+
return;
49+
}
50+
51+
if (g.isEnabled()) {
52+
LoggerFactory.getLogger(GameKeyListener.class).info("Import latest savegame and launch");
53+
GameAppManager.getInstance().killGame(handle);
54+
TaskExecutor.getInstance().submitTask(() -> {
55+
SavegameActions.importLatestAndLaunch(g);
56+
}, true);
57+
}
4058
}
4159
}
4260
}

0 commit comments

Comments
 (0)