Skip to content
Snippets Groups Projects
Commit bd911c93 authored by Matyáš Latner's avatar Matyáš Latner
Browse files

#19 Automatic game pause after restore

parent f9f56f7f
No related merge requests found
......@@ -159,7 +159,6 @@ public class Tablexia extends TablexiaApplication {
super.pause();
}
@Override
public void render() {
// render other screens
......
package cz.nic.tablexia.bus.event;
import cz.nic.tablexia.bus.ApplicationBus;
public class MainMenuControlEvent implements ApplicationBus.ApplicationEvent {
private boolean open;
private boolean animated;
public MainMenuControlEvent(boolean open, boolean animated) {
this.open = open;
this.animated = animated;
}
public boolean isOpen() {
return open;
}
public boolean isAnimated() {
return animated;
}
}
......@@ -19,6 +19,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import cz.nic.tablexia.TablexiaSettings;
import cz.nic.tablexia.bus.ApplicationBus;
import cz.nic.tablexia.bus.event.MainMenuControlEvent;
import cz.nic.tablexia.game.common.TablexiaRandom;
import cz.nic.tablexia.game.difficulty.GameDifficulty;
import cz.nic.tablexia.loader.application.ApplicationTextManager;
......@@ -52,6 +54,8 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
private TablexiaRandom random;
private GameDifficulty gameDifficulty;
private Actor screenDimmer;
private boolean screenVisible;
private boolean gameVisible;
public AbstractTablexiaGame() {
final TextureRegion texture = getColorTextureRegion(Color.BLACK, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
......@@ -67,6 +71,9 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
};
screenDimmer.addAction(alpha(0));
getStage().addActor(screenDimmer);
screenVisible = false;
gameVisible = false;
}
......@@ -80,22 +87,37 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
//////////////////////////// ABSTRACT TABLEXIA SCREEN LIFECYCLE
@Override
protected final void screenPaused(Map<String, String> screenState) {
gamePaused(screenState);
screenState.put(GAME_STATE_RANDOM_SEED, String.valueOf(getRandom().getSeed()));
}
@Override
protected final void screenLoaded(Map<String, String> screenState) {
protected final void screenLoaded(final Map<String, String> screenState) {
performShowTransaction(new Runnable() {
@Override
public void run() {
screenVisible();
// if screen transaction is complete call gameVisible callback
if (screenVisible) {
performGameVisible();
afterRestorePauseGame(screenState);
}
}
});
gameLoaded(screenState);
performGameLoaded(screenState);
}
@Override
protected final void screenVisible(Map<String, String> screenState) {
screenVisible = true;
// if in-game transaction is complete call gameVisible callback
if (gameVisible) {
performGameVisible();
afterRestorePauseGame(screenState);
}
}
@Override
protected final void screenPaused(Map<String, String> screenState) {
performGamePaused(screenState);
screenState.put(GAME_STATE_RANDOM_SEED, String.valueOf(getRandom().getSeed()));
}
@Override
protected void prepareScreenAtlases(List<String> atlasesNames) {
atlasesNames.add(GLOBAL_ATLAS_NAME);
......@@ -142,6 +164,27 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
//////////////////////////// ABSTRACT TABLEXIA GAME LIFECYCLE
private final void performGameLoaded(Map<String, String> gameState) {
Log.info(getClass(), "[ ------- Game Loaded ------- ]");
gameLoaded(gameState);
}
public final void performGameVisible() {
Log.info(getClass(), "[ ------- Game Visible ------- ]");
gameVisible();
}
private final void performGamePaused(Map<String, String> gameState) {
Log.info(getClass(), "[ ------- Game Paused ------- ]");
gamePaused(gameState);
}
protected void gameLoaded(Map<String, String> gameState) {
}
protected void gameVisible() {
}
protected void gamePaused(Map<String, String> gameState) {
}
......@@ -153,9 +196,6 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
return getTextureRegionForAtlas(GLOBAL_ATLAS_NAME, regionName);
}
protected void gameLoaded(Map<String, String> gameState) {
}
//////////////////////////// ABSTRACT TABLEXIA GAME
......@@ -279,6 +319,13 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
});
}
private void afterRestorePauseGame(Map<String, String> screenState) {
// if game is restored -> open menu and pause game
if (screenState != null) {
ApplicationBus.getInstance().publishAsync(new MainMenuControlEvent(true, true));
}
}
//////////////////////////// HIDE/SHOW TRANSACTIONS
......@@ -287,6 +334,12 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
screenDimmer.addAction(alpha(0));
screenDimmer.setVisible(true);
screenDimmer.addAction(sequence(fadeIn(SCREEN_TRANSACTION_FADE_DELAY, Interpolation.pow4Out),
run(new Runnable() {
@Override
public void run() {
gameVisible = false;
}
}),
run(onHide)));
}
}
......@@ -300,6 +353,7 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
@Override
public void run() {
screenDimmer.setVisible(false);
gameVisible = true;
}
}),
run(onShow)));
......
......@@ -290,7 +290,7 @@ public class GameScreen extends AbstractTablexiaScreen<Void> {
}
@Override
protected void screenVisible() {
protected void screenVisible(Map<String, String> screenState) {
running = true;
showNextCreature(RobberyGame.getRobberyData().getCreatures());
}
......
......@@ -91,7 +91,7 @@ public class RobberyGame extends AbstractTablexiaGame<GameRule> {
}
@Override
protected void screenVisible() {
protected void gameVisible() {
isRootScreenVisible = true;
performComponentScreenVisible();
}
......
......@@ -6,6 +6,11 @@ import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import net.engio.mbassy.listener.Handler;
import cz.nic.tablexia.bus.ApplicationBus;
import cz.nic.tablexia.bus.event.MainMenuControlEvent;
/**
* MainMenu container
*
......@@ -20,6 +25,9 @@ public class MainMenuContainer extends Group {
private final Actor screenDimmer;
public MainMenuContainer(float width, float height) {
// init event bus handlers
ApplicationBus.getInstance().subscribe(this);
setBounds(0, 0, width, height);
screenDimmerLayer = new Group();
......@@ -57,4 +65,17 @@ public class MainMenuContainer extends Group {
public void openMainMenu(boolean animated) {
mainMenu.openMenu(animated);
}
public void closeMainMenu(boolean animated) {
mainMenu.closeMenu(animated);
}
@Handler
public void handleChangeScreenEvent(MainMenuControlEvent mainMenuControlEvent) {
if (mainMenuControlEvent.isOpen()) {
openMainMenu(mainMenuControlEvent.isAnimated());
} else {
closeMainMenu(mainMenuControlEvent.isAnimated());
}
}
}
......@@ -199,6 +199,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
@Override
public T call() throws Exception {
// restore screen state
screenState = TablexiaStorage.getInstance().loadScreenState(AbstractTablexiaScreen.this);
return prepareScreenData(screenState);
}
......@@ -421,13 +422,14 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
private final void performScreenLoaded() {
Log.info(getClass(), "[ ------- Screen Loaded ------- ]");
// reset screen state after loading screen with state
TablexiaStorage.getInstance().resetScreenState(this);
screenLoaded(screenState);
}
public final void performScreenVisible() {
Log.info(getClass(), "[ ------- Screen Visible ------- ]");
screenVisible();
screenVisible(screenState);
}
private final void performScreenResized(int width, int height) {
......@@ -437,6 +439,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
private final void performScreenPaused() {
Log.info(getClass(), "[ ------- Screen Paused ------- ]");
// save screen state
Map<String, String> screenState = new HashMap<String, String>();
screenPaused(screenState);
TablexiaStorage.getInstance().saveScreenState(this, screenState);
......@@ -450,7 +453,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
protected void screenLoaded(Map<String, String> screenState) {
}
protected void screenVisible() {
protected void screenVisible(Map<String, String> screenState) {
}
protected void screenRender(float delta) {
......
......@@ -26,7 +26,6 @@ public class IOSLauncher extends IOSApplication.Delegate {
String versionName = infoDictionary.get(new NSString("CFBundleShortVersionString")).toString();
String checksums = infoDictionary.get(new NSString("cz.nic.tablexia.AssetsChecksums")).toString();
//TODO check application state
return new IOSApplication(new Tablexia(buildType,
Locale.getDefault(),
versionName,
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment