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

#106 Fixed screen transaction overriding

parent 61021560
Branches
Tags
No related merge requests found
......@@ -460,7 +460,10 @@ public abstract class TablexiaApplication implements ApplicationListener {
public void setScreen(final AbstractTablexiaScreen<?> screen) {
lastScreen = this.screen;
this.screen = screen;
processLastScreen();
processLastScreen(lastScreen);
lastScreen = null;
screen.setLoadingListener(new ScreenLoadingListener() {
@Override
......@@ -501,37 +504,44 @@ public abstract class TablexiaApplication implements ApplicationListener {
setScreen(newScreen);
} else {
// for case there is incomplete transaction
processLastScreen();
processLastScreen(lastScreen);
lastScreen = screen;
screen = newScreen;
screenTransaction.processTransaction(lastScreen, newScreen,
// store screens in local variables for future use in runnable, fields can be changed by another transaction
final AbstractTablexiaScreen newScreenToProcess = newScreen;
final AbstractTablexiaScreen lastScreenToProcess = lastScreen;
screenTransaction.processTransaction(lastScreenToProcess, newScreenToProcess,
new Runnable() {
@Override
public void run() {
processNewScreen(screen);
processNewScreen(newScreenToProcess);
}
},
new Runnable() {
@Override
public void run() {
processLastScreen();
processLastScreen(lastScreenToProcess);
// reset last screen
lastScreen = null;
}
},
new Runnable() {
@Override
public void run() {
processScreenVisible(screen);
processScreenVisible(newScreenToProcess);
}
},
new Runnable() {
@Override
public void run() {processStartLoading(newScreen, screenTransaction);
public void run() {processStartLoading(newScreenToProcess, screenTransaction);
}
},
......@@ -566,12 +576,11 @@ public abstract class TablexiaApplication implements ApplicationListener {
}
}
private void processLastScreen() {
private void processLastScreen(AbstractTablexiaScreen<?> lastScreen) {
if (lastScreen != null) {
inputMultiplexer.removeProcessor(lastScreen.getInputProcessor());
lastScreen.hide();
lastScreen.dispose();
lastScreen = null;
System.gc();
}
}
......@@ -593,13 +602,13 @@ public abstract class TablexiaApplication implements ApplicationListener {
}
}
private void processScreenVisible(AbstractTablexiaScreen<?> lastScreen) {
private void processScreenVisible(AbstractTablexiaScreen<?> newScreen) {
screenPrepared = true;
disposePreloader();
try {
lastScreen.performScreenVisible();
newScreen.performScreenVisible();
} catch (Throwable t) {
performScreenLoadingErrorAction(lastScreen, t);
performScreenLoadingErrorAction(newScreen, t);
}
}
......
......@@ -137,8 +137,6 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
private boolean inGameLoading;
private Map<ITrophyDefinition, Boolean> hasTrophies;
private boolean screenDataPrepared = false;
public AbstractTablexiaGame() {
inGameLoading = false;
gamePhase = GamePhase.PREPARED;
......@@ -207,16 +205,13 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
gamePhase = GamePhase.STARTED;
// if game is restored -> open menu and pause game
if (screenDataPrepared && screenState.size() > 0) {
if (screenState.size() > 0) {
ApplicationBus.getInstance().publishAsync(new MenuControlEvent(MainMenu.class, AbstractMenu.MenuAction.OPEN, true));
}
}
@Override
protected final void screenResumed() {
if(!screenDataPrepared)
return;
if (gamePhase == GamePhase.STARTED) {
if (game.isStarted()) {
Long resumeTime = game.resumeGame();
......@@ -295,7 +290,6 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T>
printScreenInfo(RANDOM_SEED_SCREEN_INFO_LABEL, "" + getRandom().getSeed());
printScreenInfo(GAME_DIFFICULTY_SCREEN_INFO_LABEL, "" + getGameDifficulty().name());
Log.info(getClass(), "Start game data loading with: " + getRandom().toString() + " and difficulty: " + getGameDifficulty());
screenDataPrepared = true;
return prepareGameData(screenState);
}
......
......@@ -461,11 +461,11 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
textManager.dispose();
dataManager.dispose();
disposeAllMusic();
disposeAditionalDispodsables();
disposeAdditionalDisposables();
stage.dispose();
}
private void disposeAditionalDispodsables() {
private void disposeAdditionalDisposables() {
for (Disposable d : disposables) {
d.dispose();
}
......
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