mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
- 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:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -38,23 +39,32 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
|||||||
//don't update achievements if player cheated during game
|
//don't update achievements if player cheated during game
|
||||||
if (controller.hasCheated()) {
|
if (controller.hasCheated()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Game game = controller.getGame();
|
final Game game = controller.getGame();
|
||||||
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) {
|
||||||
cb.addItem(FModel.getAchievements(GameType.Constructed));
|
cb.addItem(FModel.getAchievements(GameType.Constructed));
|
||||||
cb.addItem(FModel.getAchievements(GameType.Draft));
|
cb.addItem(FModel.getAchievements(GameType.Draft));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user