- Made the desktop port and the mobile port of the game use different threads when processing multiple achievements (otherwise the game tends to freeze).

This commit is contained in:
Agetian
2016-12-23 07:13:07 +00:00
parent 8049783598
commit 9d0e8b8096
4 changed files with 31 additions and 10 deletions

View File

@@ -58,6 +58,11 @@ public class GuiDesktop implements IGuiBase {
return true; return true;
} }
@Override
public boolean isLibgdxPort() {
return false;
}
@Override @Override
public String getCurrentVersion() { public String getCurrentVersion() {
return BuildInfo.getVersionString(); return BuildInfo.getVersionString();

View File

@@ -55,6 +55,11 @@ public class GuiMobile implements IGuiBase {
return Gdx.app.getType() == ApplicationType.Desktop; return Gdx.app.getType() == ApplicationType.Desktop;
} }
@Override
public boolean isLibgdxPort() {
return true;
}
@Override @Override
public String getCurrentVersion() { public String getCurrentVersion() {
return Forge.CURRENT_VERSION; return Forge.CURRENT_VERSION;

View File

@@ -1,5 +1,6 @@
package forge.achievement; package forge.achievement;
import forge.GuiBase;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.Iterator; import java.util.Iterator;
@@ -44,15 +45,24 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
final Player player = controller.getPlayer(); final Player player = controller.getPlayer();
//update all achievements for GUI player after game finished //update all achievements for GUI player after game finished
ThreadUtil.invokeInGameThread(new Runnable() { //(we are doing it in different threads in different game ports to prevent freezing when processing multiple achievements)
@Override if (GuiBase.getInterface().isLibgdxPort()) {
public void run() { ThreadUtil.invokeInGameThread(new Runnable() {
FModel.getAchievements(game.getRules().getGameType()).updateAll(player); @Override
AltWinAchievements.instance.updateAll(player); public void run() {
PlaneswalkerAchievements.instance.updateAll(player); doUpdateAllAchievements(game, player);
ChallengeAchievements.instance.updateAll(player); }
} });
}); } else {
doUpdateAllAchievements(game, player);
}
}
private static void doUpdateAllAchievements(final Game game, final Player player) {
FModel.getAchievements(game.getRules().getGameType()).updateAll(player);
AltWinAchievements.instance.updateAll(player);
PlaneswalkerAchievements.instance.updateAll(player);
ChallengeAchievements.instance.updateAll(player);
} }
public static void buildComboBox(IComboBox<AchievementCollection> cb) { public static void buildComboBox(IComboBox<AchievementCollection> cb) {

View File

@@ -19,6 +19,7 @@ import forge.util.Callback;
public interface IGuiBase { public interface IGuiBase {
boolean isRunningOnDesktop(); boolean isRunningOnDesktop();
boolean isLibgdxPort();
String getCurrentVersion(); String getCurrentVersion();
String getAssetsDir(); String getAssetsDir();
void invokeInEdtNow(Runnable runnable); void invokeInEdtNow(Runnable runnable);