Fix dev menu options to run in game thread so they don't cause crash

This commit is contained in:
drdev
2014-04-14 19:53:48 +00:00
parent b41bafd584
commit 3c7b8efb72

View File

@@ -11,6 +11,7 @@ import forge.screens.match.FControl;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.util.GuiDisplayUtil; import forge.util.GuiDisplayUtil;
import forge.util.ThreadUtil;
public class VDevMenu extends FDropDownMenu { public class VDevMenu extends FDropDownMenu {
@Override @Override
@@ -18,38 +19,68 @@ public class VDevMenu extends FDropDownMenu {
addItem(new FMenuItem("Generate Mana", new FEventHandler() { addItem(new FMenuItem("Generate Mana", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() { //must invoke all these in game thread since they may require synchronous user input
@Override
public void run() {
GuiDisplayUtil.devModeGenerateMana(); GuiDisplayUtil.devModeGenerateMana();
} }
});
}
})); }));
addItem(new FMenuItem("Tutor for Card", new FEventHandler() { addItem(new FMenuItem("Tutor for Card", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeTutor(); GuiDisplayUtil.devModeTutor();
} }
});
}
})); }));
addItem(new FMenuItem("Add card to hand", new FEventHandler() { addItem(new FMenuItem("Add card to hand", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeCardToHand(); GuiDisplayUtil.devModeCardToHand();
} }
});
}
})); }));
addItem(new FMenuItem("Add card to play", new FEventHandler() { addItem(new FMenuItem("Add card to play", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeCardToBattlefield(); GuiDisplayUtil.devModeCardToBattlefield();
} }
});
}
})); }));
addItem(new FMenuItem("Set Player Life", new FEventHandler() { addItem(new FMenuItem("Set Player Life", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeSetLife(); GuiDisplayUtil.devModeSetLife();
} }
});
}
})); }));
addItem(new FMenuItem("Setup Game State", new FEventHandler() { addItem(new FMenuItem("Setup Game State", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devSetupGameState(); GuiDisplayUtil.devSetupGameState();
} }
});
}
})); }));
final ForgePreferences prefs = FModel.getPreferences(); final ForgePreferences prefs = FModel.getPreferences();
@@ -72,32 +103,57 @@ public class VDevMenu extends FDropDownMenu {
addItem(new FMenuItem("Add Counter to Permanent", new FEventHandler() { addItem(new FMenuItem("Add Counter to Permanent", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeAddCounter(); GuiDisplayUtil.devModeAddCounter();
} }
});
}
})); }));
addItem(new FMenuItem("Tap Permanent", new FEventHandler() { addItem(new FMenuItem("Tap Permanent", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeTapPerm(); GuiDisplayUtil.devModeTapPerm();
} }
});
}
})); }));
addItem(new FMenuItem("Untap Permanent", new FEventHandler() { addItem(new FMenuItem("Untap Permanent", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeUntapPerm(); GuiDisplayUtil.devModeUntapPerm();
} }
});
}
})); }));
addItem(new FMenuItem("Rigged planar roll", new FEventHandler() { addItem(new FMenuItem("Rigged planar roll", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModeRiggedPlanarRoll(); GuiDisplayUtil.devModeRiggedPlanarRoll();
} }
});
}
})); }));
addItem(new FMenuItem("Planeswalk to", new FEventHandler() { addItem(new FMenuItem("Planeswalk to", new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
ThreadUtil.invokeInGameThread(new Runnable() {
@Override
public void run() {
GuiDisplayUtil.devModePlaneswalkTo(); GuiDisplayUtil.devModePlaneswalkTo();
} }
});
}
})); }));
} }
} }