Register keys for simplepathing only once (fixes #63)

This commit is contained in:
Jonas Herzig
2017-05-21 16:54:37 +02:00
parent f13297c5a5
commit c054fe83f6
2 changed files with 86 additions and 73 deletions

View File

@@ -14,6 +14,7 @@ import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;
@Mod(modid = ReplayModSimplePathing.MOD_ID, @Mod(modid = ReplayModSimplePathing.MOD_ID,
version = "@MOD_VERSION@", version = "@MOD_VERSION@",
@@ -42,6 +43,19 @@ public class ReplayModSimplePathing {
PathPreview pathPreview = new PathPreview(this); PathPreview pathPreview = new PathPreview(this);
pathPreview.register(); pathPreview.register();
core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.keyframerepository", Keyboard.KEY_X, () -> {
if (guiPathing != null) guiPathing.keyframeRepoButtonPressed();
});
core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.clearkeyframes", Keyboard.KEY_C, () -> {
if (guiPathing != null) guiPathing.clearKeyframesButtonPressed();
});
core.getKeyBindingRegistry().registerRepeatedKeyBinding("replaymod.input.synctimeline", Keyboard.KEY_V, () -> {
if (guiPathing != null) guiPathing.syncTimeButtonPressed();
});
core.getKeyBindingRegistry().registerRaw(Keyboard.KEY_DELETE, () -> {
if (guiPathing != null) guiPathing.deleteButtonPressed();
});
} }
@SubscribeEvent @SubscribeEvent

View File

@@ -1,5 +1,6 @@
package com.replaymod.simplepathing.gui; package com.replaymod.simplepathing.gui;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
@@ -256,6 +257,7 @@ public class GuiPathing {
} }
}; };
private final ReplayMod core;
private final ReplayModSimplePathing mod; private final ReplayModSimplePathing mod;
private final ReplayHandler replayHandler; private final ReplayHandler replayHandler;
private final RealtimeTimelinePlayer player; private final RealtimeTimelinePlayer player;
@@ -265,6 +267,7 @@ public class GuiPathing {
private SettableFuture<Void> entityTrackerFuture; private SettableFuture<Void> entityTrackerFuture;
public GuiPathing(final ReplayMod core, final ReplayModSimplePathing mod, final ReplayHandler replayHandler) { public GuiPathing(final ReplayMod core, final ReplayModSimplePathing mod, final ReplayHandler replayHandler) {
this.core = core;
this.mod = mod; this.mod = mod;
this.replayHandler = replayHandler; this.replayHandler = replayHandler;
this.player = new RealtimeTimelinePlayer(replayHandler); this.player = new RealtimeTimelinePlayer(replayHandler);
@@ -400,12 +403,10 @@ public class GuiPathing {
} }
}); });
core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.keyframerepository", Keyboard.KEY_X, new Runnable() { startLoadingEntityTracker();
@Override
public void run() {
if (!overlay.isVisible()) {
return;
} }
public void keyframeRepoButtonPressed() {
try { try {
GuiKeyframeRepository gui = new GuiKeyframeRepository( GuiKeyframeRepository gui = new GuiKeyframeRepository(
mod.getCurrentTimeline(), replayHandler.getReplayFile(), mod.getCurrentTimeline().getTimeline()); mod.getCurrentTimeline(), replayHandler.getReplayFile(), mod.getCurrentTimeline().getTimeline());
@@ -429,10 +430,9 @@ public class GuiPathing {
core.printWarningToChat("Error loading timeline: " + e.getMessage()); core.printWarningToChat("Error loading timeline: " + e.getMessage());
} }
} }
});
core.getKeyBindingRegistry().registerKeyBinding("replaymod.input.clearkeyframes", Keyboard.KEY_C, () -> { public void clearKeyframesButtonPressed() {
GuiYesNoPopup popup = GuiYesNoPopup.open(overlay, GuiYesNoPopup popup = GuiYesNoPopup.open(replayHandler.getOverlay(),
new GuiLabel().setI18nText("replaymod.gui.clearcallback.title").setColor(Colors.BLACK) new GuiLabel().setI18nText("replaymod.gui.clearcallback.title").setColor(Colors.BLACK)
).setYesI18nLabel("gui.yes").setNoI18nLabel("gui.no"); ).setYesI18nLabel("gui.yes").setNoI18nLabel("gui.no");
Futures.addCallback(popup.getFuture(), new FutureCallback<Boolean>() { Futures.addCallback(popup.getFuture(), new FutureCallback<Boolean>() {
@@ -451,9 +451,9 @@ public class GuiPathing {
t.printStackTrace(); t.printStackTrace();
} }
}); });
}); }
core.getKeyBindingRegistry().registerRepeatedKeyBinding("replaymod.input.synctimeline", Keyboard.KEY_V, () -> { public void syncTimeButtonPressed() {
// Current replay time // Current replay time
int time = replayHandler.getReplaySender().currentTimeStamp(); int time = replayHandler.getReplaySender().currentTimeStamp();
// Position of the cursor // Position of the cursor
@@ -469,7 +469,7 @@ public class GuiPathing {
// Replay time passed // Replay time passed
int timePassed = time - keyframeTime; int timePassed = time - keyframeTime;
// Speed (set to 1 when shift is held) // Speed (set to 1 when shift is held)
double speed = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 1 : overlay.getSpeedSliderValue(); double speed = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) ? 1 : replayHandler.getOverlay().getSpeedSliderValue();
// Cursor time passed // Cursor time passed
int cursorPassed = (int) (timePassed / speed); int cursorPassed = (int) (timePassed / speed);
// Move cursor to new position // Move cursor to new position
@@ -477,17 +477,16 @@ public class GuiPathing {
// Deselect keyframe to allow the user to add a new one right away // Deselect keyframe to allow the user to add a new one right away
mod.setSelected(null, 0); mod.setSelected(null, 0);
}); });
});
core.getKeyBindingRegistry().registerRaw(Keyboard.KEY_DELETE, () -> {
if (!overlay.isVisible()) {
return;
} }
public void deleteButtonPressed() {
if (mod.getSelectedPath() != null) { if (mod.getSelectedPath() != null) {
updateKeyframe(mod.getSelectedPath()); updateKeyframe(mod.getSelectedPath());
} }
}); }
private void startLoadingEntityTracker() {
Preconditions.checkState(entityTrackerFuture == null);
// Start loading entity tracker // Start loading entity tracker
entityTrackerFuture = SettableFuture.create(); entityTrackerFuture = SettableFuture.create();
new Thread(() -> { new Thread(() -> {