mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Create drafting process screen and prevent leaving it without user being prompted
This commit is contained in:
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -1164,7 +1164,11 @@ forge-gui-mobile/src/forge/screens/SplashScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/TabPageScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.java -text
|
||||
forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/draft/CurrentPackPage.java -text
|
||||
forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java -text
|
||||
forge-gui-mobile/src/forge/screens/draft/DraftScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/draft/DraftSideboardPage.java -text
|
||||
forge-gui-mobile/src/forge/screens/draft/DraftingProcessScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/gauntlet/GauntletScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/home/HomeScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/match/FControl.java -text
|
||||
|
||||
@@ -145,11 +145,15 @@ public class Forge implements ApplicationListener {
|
||||
exit(); //prompt to exit if attempting to go back from home screen
|
||||
return;
|
||||
}
|
||||
if (!currentScreen.onClose(true)) {
|
||||
return;
|
||||
}
|
||||
screens.pop();
|
||||
setCurrentScreen(screens.lastElement());
|
||||
currentScreen.onClose(new Callback<Boolean>() {
|
||||
@Override
|
||||
public void run(Boolean result) {
|
||||
if (result) {
|
||||
screens.pop();
|
||||
setCurrentScreen(screens.lastElement());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void exit() {
|
||||
@@ -163,13 +167,24 @@ public class Forge implements ApplicationListener {
|
||||
});
|
||||
}
|
||||
|
||||
public static void openScreen(FScreen screen0) {
|
||||
public static void openScreen(final FScreen screen0) {
|
||||
if (currentScreen == screen0) { return; }
|
||||
if (currentScreen != null && !currentScreen.onSwitchAway()) {
|
||||
|
||||
if (currentScreen == null) {
|
||||
screens.push(screen0);
|
||||
setCurrentScreen(screen0);
|
||||
return;
|
||||
}
|
||||
screens.push(screen0);
|
||||
setCurrentScreen(screen0);
|
||||
|
||||
currentScreen.onSwitchAway(new Callback<Boolean>() {
|
||||
@Override
|
||||
public void run(Boolean result) {
|
||||
if (result) {
|
||||
screens.push(screen0);
|
||||
setCurrentScreen(screen0);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static FScreen getCurrentScreen() {
|
||||
@@ -256,7 +271,7 @@ public class Forge implements ApplicationListener {
|
||||
overlay.hide();
|
||||
overlay = FOverlay.getTopOverlay();
|
||||
}
|
||||
currentScreen.onClose(false);
|
||||
currentScreen.onClose(null);
|
||||
currentScreen = null;
|
||||
}
|
||||
screens.clear();
|
||||
|
||||
@@ -15,6 +15,7 @@ import forge.toolbox.FContainer;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.util.Callback;
|
||||
import forge.util.Utils;
|
||||
|
||||
public abstract class FScreen extends FContainer {
|
||||
@@ -45,12 +46,14 @@ public abstract class FScreen extends FContainer {
|
||||
public void onActivate() {
|
||||
}
|
||||
|
||||
public boolean onSwitchAway() {
|
||||
return true;
|
||||
public void onSwitchAway(Callback<Boolean> canSwitchCallback) {
|
||||
canSwitchCallback.run(true);
|
||||
}
|
||||
|
||||
public boolean onClose(boolean canCancel) {
|
||||
return true;
|
||||
public void onClose(Callback<Boolean> canCloseCallback) {
|
||||
if (canCloseCallback != null) { //will be null if app exited
|
||||
canCloseCallback.run(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void showMenu() {
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package forge.screens.draft;
|
||||
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.limited.BoosterDraft;
|
||||
import forge.screens.TabPageScreen.TabPage;
|
||||
|
||||
public class CurrentPackPage extends TabPage {
|
||||
private final BoosterDraft draft;
|
||||
|
||||
protected CurrentPackPage(BoosterDraft draft0) {
|
||||
super("Pack 1", FSkinImage.PACK);
|
||||
|
||||
draft = draft0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float width, float height) {
|
||||
}
|
||||
}
|
||||
19
forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java
Normal file
19
forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package forge.screens.draft;
|
||||
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.limited.BoosterDraft;
|
||||
import forge.screens.TabPageScreen.TabPage;
|
||||
|
||||
public class DraftDeckPage extends TabPage {
|
||||
private final BoosterDraft draft;
|
||||
|
||||
protected DraftDeckPage(BoosterDraft draft0) {
|
||||
super("Deck", FSkinImage.DECKLIST);
|
||||
|
||||
draft = draft0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float width, float height) {
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.screens.draft;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.Forge;
|
||||
import forge.GuiBase;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.screens.LaunchScreen;
|
||||
@@ -52,8 +54,15 @@ public class DraftScreen extends LaunchScreen {
|
||||
final LimitedPoolType poolType = SGuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values());
|
||||
if (poolType == null) { return; }
|
||||
|
||||
BoosterDraft draft = BoosterDraft.createDraft(poolType);
|
||||
final BoosterDraft draft = BoosterDraft.createDraft(poolType);
|
||||
if (draft == null) { return; }
|
||||
|
||||
FThreads.invokeInEdtLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Forge.openScreen(new DraftingProcessScreen(draft));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package forge.screens.draft;
|
||||
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.limited.BoosterDraft;
|
||||
import forge.screens.TabPageScreen.TabPage;
|
||||
|
||||
public class DraftSideboardPage extends TabPage {
|
||||
private final BoosterDraft draft;
|
||||
|
||||
protected DraftSideboardPage(BoosterDraft draft0) {
|
||||
super("Sideboard", FSkinImage.FLASHBACK);
|
||||
|
||||
draft = draft0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float width, float height) {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package forge.screens.draft;
|
||||
|
||||
import forge.limited.BoosterDraft;
|
||||
import forge.screens.TabPageScreen;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.util.Callback;
|
||||
|
||||
public class DraftingProcessScreen extends TabPageScreen {
|
||||
public DraftingProcessScreen(BoosterDraft draft0) {
|
||||
super(new TabPage[] {
|
||||
new CurrentPackPage(draft0),
|
||||
new DraftDeckPage(draft0),
|
||||
new DraftSideboardPage(draft0)
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(Callback<Boolean> canCloseCallback) {
|
||||
if (canCloseCallback == null) { return; }
|
||||
FOptionPane.showConfirmDialog("This will end the current draft and you will not be able to resume.\n\n" +
|
||||
"Leave anyway?", "Leave Draft?", "Leave", "Cancel", false, canCloseCallback);
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import forge.game.zone.ZoneType;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.util.Callback;
|
||||
|
||||
public class MatchScreen extends FScreen {
|
||||
public static FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS);
|
||||
@@ -117,9 +118,9 @@ public class MatchScreen extends FScreen {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onClose(boolean canCancel) {
|
||||
public void onClose(Callback<Boolean> canCloseCallback) {
|
||||
FControl.writeMatchPreferences();
|
||||
return true;
|
||||
super.onClose(canCloseCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user