mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Merge branch 'master' into 'master'
[Mobile] Update netcode, fix swapped players See merge request core-developers/forge!6368
This commit is contained in:
@@ -1000,6 +1000,12 @@ public final class CMatchUI
|
|||||||
public void showPromptMessage(final PlayerView playerView, final String message) {
|
public void showPromptMessage(final PlayerView playerView, final String message) {
|
||||||
cPrompt.setMessage(message);
|
cPrompt.setMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showCardPromptMessage(PlayerView playerView, String message, CardView card) {
|
||||||
|
cPrompt.setMessage(message, card);
|
||||||
|
}
|
||||||
|
|
||||||
// no override for now
|
// no override for now
|
||||||
public void showPromptMessage(final PlayerView playerView, final String message, final CardView card ) {
|
public void showPromptMessage(final PlayerView playerView, final String message, final CardView card ) {
|
||||||
cPrompt.setMessage(message,card);
|
cPrompt.setMessage(message,card);
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ public class Forge implements ApplicationListener {
|
|||||||
|
|
||||||
protected void afterDbLoaded() {
|
protected void afterDbLoaded() {
|
||||||
//init here to fix crash if the assets are missing
|
//init here to fix crash if the assets are missing
|
||||||
transitionTexture = new Texture(GuiBase.isAndroid() ? Gdx.files.internal("fallback_skin").child("transition.png") : Gdx.files.classpath("fallback_skin").child("transition.png"));
|
transitionTexture = new Texture(Gdx.files.classpath("fallback_skin").child("transition.png"));
|
||||||
|
|
||||||
|
|
||||||
destroyThis = false; //Allow back()
|
destroyThis = false; //Allow back()
|
||||||
|
|||||||
@@ -200,7 +200,6 @@ public class PlayerStatisticScene extends UIScene {
|
|||||||
back.getLabel().setText(Forge.getLocalizer().getMessage("lblBack"));
|
back.getLabel().setText(Forge.getLocalizer().getMessage("lblBack"));
|
||||||
ScrollPane scrollPane = ui.findActor("enemies");
|
ScrollPane scrollPane = ui.findActor("enemies");
|
||||||
scrollPane.setActor(enemiesGroup);
|
scrollPane.setActor(enemiesGroup);
|
||||||
enemiesGroup.setFillParent(true);
|
|
||||||
this.init = true;
|
this.init = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public class FSkin {
|
|||||||
{
|
{
|
||||||
if (!dir.exists() || !dir.isDirectory()) {
|
if (!dir.exists() || !dir.isDirectory()) {
|
||||||
//if skins directory doesn't exist, point to internal assets/skin directory instead for the sake of the splash screen
|
//if skins directory doesn't exist, point to internal assets/skin directory instead for the sake of the splash screen
|
||||||
preferredDir = GuiBase.isAndroid() ? Gdx.files.internal("fallback_skin") : Gdx.files.classpath("fallback_skin");
|
preferredDir = Gdx.files.classpath("fallback_skin");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (splashScreen != null) {
|
if (splashScreen != null) {
|
||||||
|
|||||||
@@ -97,9 +97,7 @@ public class SplashScreen extends FContainer {
|
|||||||
private float progress = 0;
|
private float progress = 0;
|
||||||
private boolean finished, openAdventure;
|
private boolean finished, openAdventure;
|
||||||
//for transition image only...
|
//for transition image only...
|
||||||
TextureRegion transition_bg = new TextureRegion(new Texture(GuiBase.isAndroid()
|
TextureRegion transition_bg = new TextureRegion(new Texture(Gdx.files.classpath("fallback_skin").child("title_bg_lq.png")));
|
||||||
? Gdx.files.internal("fallback_skin").child("title_bg_lq.png")
|
|
||||||
: Gdx.files.classpath("fallback_skin").child("title_bg_lq.png")));
|
|
||||||
|
|
||||||
public void drawBackground(Graphics g) {
|
public void drawBackground(Graphics g) {
|
||||||
float percentage = progress / DURATION;
|
float percentage = progress / DURATION;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import forge.deck.Deck;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
import forge.screens.TransitionScreen;
|
import forge.screens.TransitionScreen;
|
||||||
|
import forge.util.collect.FCollection;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
@@ -157,13 +158,18 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
public void openView(final TrackableCollection<PlayerView> myPlayers) {
|
public void openView(final TrackableCollection<PlayerView> myPlayers) {
|
||||||
final boolean noHumans = !hasLocalPlayers();
|
final boolean noHumans = !hasLocalPlayers();
|
||||||
|
|
||||||
final FCollectionView<PlayerView> allPlayers = getGameView().getPlayers();
|
FCollectionView<PlayerView> players = getGameView().getPlayers();
|
||||||
|
if (players.size() == 2 && myPlayers != null && myPlayers.size() == 1 && myPlayers.get(0).equals(players.get(1))) {
|
||||||
|
players = new FCollection<>(new PlayerView[]{players.get(1), players.get(0)});
|
||||||
|
}
|
||||||
final List<VPlayerPanel> playerPanels = new ArrayList<>();
|
final List<VPlayerPanel> playerPanels = new ArrayList<>();
|
||||||
for (final PlayerView p : allPlayers) {
|
boolean init = false;
|
||||||
|
for (final PlayerView p : players) {
|
||||||
final boolean isLocal = isLocalPlayer(p);
|
final boolean isLocal = isLocalPlayer(p);
|
||||||
final VPlayerPanel playerPanel = new VPlayerPanel(p, isLocal || noHumans, allPlayers.size());
|
final VPlayerPanel playerPanel = new VPlayerPanel(p, isLocal || noHumans, players.size());
|
||||||
if (isLocal && !playerPanels.isEmpty()) {
|
if (isLocal && !init) {
|
||||||
playerPanels.add(0, playerPanel); //ensure local player always first among player panels
|
playerPanels.add(0, playerPanel); //ensure local player always first among player panels
|
||||||
|
init = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
playerPanels.add(playerPanel);
|
playerPanels.add(playerPanel);
|
||||||
@@ -194,7 +200,7 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
actuateMatchPreferences();
|
actuateMatchPreferences();
|
||||||
//reset daytime every match
|
//reset daytime every match
|
||||||
updateDayTime(null);
|
updateDayTime(null);
|
||||||
Forge.openScreen(view);
|
Forge.openScreen(view, GuiBase.isNetworkplay());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -203,7 +209,7 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showPromptMessage(final PlayerView player, final String message, final CardView card) {
|
public void showCardPromptMessage(final PlayerView player, final String message, final CardView card) {
|
||||||
view.getPrompt(player).setMessage(message, card);
|
view.getPrompt(player).setMessage(message, card);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -123,10 +123,10 @@ public abstract class InputBase implements java.io.Serializable, Input {
|
|||||||
controller.getGui().showPromptMessage(getOwner(), message);
|
controller.getGui().showPromptMessage(getOwner(), message);
|
||||||
}
|
}
|
||||||
protected final void showMessage(final String message, final SpellAbilityView sav) {
|
protected final void showMessage(final String message, final SpellAbilityView sav) {
|
||||||
controller.getGui().showPromptMessage(getOwner(), message, sav.getHostCard());
|
controller.getGui().showCardPromptMessage(getOwner(), message, sav.getHostCard());
|
||||||
}
|
}
|
||||||
protected final void showMessage(final String message, final CardView card) {
|
protected final void showMessage(final String message, final CardView card) {
|
||||||
controller.getGui().showPromptMessage(getOwner(), message, card);
|
controller.getGui().showCardPromptMessage(getOwner(), message, card);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getTurnPhasePriorityMessage(final Game game) {
|
protected String getTurnPhasePriorityMessage(final Game game) {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectStreamClass;
|
import java.io.ObjectStreamClass;
|
||||||
import java.io.StreamCorruptedException;
|
|
||||||
|
|
||||||
import io.netty.handler.codec.serialization.ClassResolver;
|
import io.netty.handler.codec.serialization.ClassResolver;
|
||||||
|
|
||||||
@@ -23,16 +22,19 @@ public class CObjectInputStream extends ObjectInputStream {
|
|||||||
if (type < 0) {
|
if (type < 0) {
|
||||||
throw new EOFException();
|
throw new EOFException();
|
||||||
} else {
|
} else {
|
||||||
switch(type) {
|
ObjectStreamClass resultClassDescriptor = super.readClassDescriptor();
|
||||||
case 0:
|
Class localClass;
|
||||||
return super.readClassDescriptor();
|
try {
|
||||||
case 1:
|
localClass = Class.forName(resultClassDescriptor.getName());
|
||||||
String className = readUTF();
|
} catch (ClassNotFoundException e) {
|
||||||
Class<?> clazz = classResolver.resolve(className);
|
System.err.println("[Class Not Found Exception]\nNo local class for " + resultClassDescriptor.getName());
|
||||||
return ObjectStreamClass.lookupAny(clazz);
|
return resultClassDescriptor;
|
||||||
default:
|
|
||||||
throw new StreamCorruptedException("Unexpected class descriptor type: " + type);
|
|
||||||
}
|
}
|
||||||
|
ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookupAny(localClass);
|
||||||
|
if (localClassDescriptor != null && type == 1) {
|
||||||
|
resultClassDescriptor = localClassDescriptor; // Use local class descriptor for deserialization by default
|
||||||
|
}
|
||||||
|
return resultClassDescriptor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,21 +32,22 @@ public enum ProtocolMethod {
|
|||||||
// Server -> Client
|
// Server -> Client
|
||||||
setGameView (Mode.SERVER, Void.TYPE, GameView.class),
|
setGameView (Mode.SERVER, Void.TYPE, GameView.class),
|
||||||
openView (Mode.SERVER, Void.TYPE, TrackableCollection/*PlayerView*/.class),
|
openView (Mode.SERVER, Void.TYPE, TrackableCollection/*PlayerView*/.class),
|
||||||
afterGameEnd (Mode.SERVER),
|
afterGameEnd (Mode.SERVER, Void.TYPE),
|
||||||
showCombat (Mode.SERVER),
|
showCombat (Mode.SERVER, Void.TYPE),
|
||||||
showPromptMessage (Mode.SERVER, Void.TYPE, PlayerView.class, String.class),
|
showPromptMessage (Mode.SERVER, Void.TYPE, PlayerView.class, String.class),
|
||||||
|
showCardPromptMessage (Mode.SERVER, Void.TYPE, PlayerView.class, String.class, CardView.class),
|
||||||
updateButtons (Mode.SERVER, Void.TYPE, PlayerView.class, String.class, String.class, Boolean.TYPE, Boolean.TYPE, Boolean.TYPE),
|
updateButtons (Mode.SERVER, Void.TYPE, PlayerView.class, String.class, String.class, Boolean.TYPE, Boolean.TYPE, Boolean.TYPE),
|
||||||
flashIncorrectAction(Mode.SERVER),
|
flashIncorrectAction(Mode.SERVER, Void.TYPE),
|
||||||
alertUser (Mode.SERVER),
|
alertUser (Mode.SERVER, Void.TYPE),
|
||||||
updatePhase (Mode.SERVER, Void.TYPE, Boolean.TYPE),
|
updatePhase (Mode.SERVER, Void.TYPE, Boolean.TYPE),
|
||||||
updateTurn (Mode.SERVER, Void.TYPE, PlayerView.class),
|
updateTurn (Mode.SERVER, Void.TYPE, PlayerView.class),
|
||||||
updatePlayerControl (Mode.SERVER),
|
updatePlayerControl (Mode.SERVER, Void.TYPE),
|
||||||
enableOverlay (Mode.SERVER),
|
enableOverlay (Mode.SERVER, Void.TYPE),
|
||||||
disableOverlay (Mode.SERVER),
|
disableOverlay (Mode.SERVER, Void.TYPE),
|
||||||
finishGame (Mode.SERVER),
|
finishGame (Mode.SERVER, Void.TYPE),
|
||||||
showManaPool (Mode.SERVER, Void.TYPE, PlayerView.class),
|
showManaPool (Mode.SERVER, Void.TYPE, PlayerView.class),
|
||||||
hideManaPool (Mode.SERVER, Void.TYPE, PlayerView.class),
|
hideManaPool (Mode.SERVER, Void.TYPE, PlayerView.class),
|
||||||
updateStack (Mode.SERVER),
|
updateStack (Mode.SERVER, Void.TYPE),
|
||||||
updateZones (Mode.SERVER, Void.TYPE, Iterable/*PlayerZoneUpdate*/.class),
|
updateZones (Mode.SERVER, Void.TYPE, Iterable/*PlayerZoneUpdate*/.class),
|
||||||
tempShowZones (Mode.SERVER, Iterable/*PlayerZoneUpdate*/.class, PlayerView.class, Iterable/*PlayerZoneUpdate*/.class),
|
tempShowZones (Mode.SERVER, Iterable/*PlayerZoneUpdate*/.class, PlayerView.class, Iterable/*PlayerZoneUpdate*/.class),
|
||||||
hideZones (Mode.SERVER, Void.TYPE, PlayerView.class, Iterable/*PlayerZoneUpdate*/.class),
|
hideZones (Mode.SERVER, Void.TYPE, PlayerView.class, Iterable/*PlayerZoneUpdate*/.class),
|
||||||
@@ -71,11 +72,11 @@ public enum ProtocolMethod {
|
|||||||
manipulateCardList (Mode.SERVER, List.class, String.class, Iterable.class, Iterable.class, Boolean.TYPE, Boolean.TYPE, Boolean.TYPE),
|
manipulateCardList (Mode.SERVER, List.class, String.class, Iterable.class, Iterable.class, Boolean.TYPE, Boolean.TYPE, Boolean.TYPE),
|
||||||
setCard (Mode.SERVER, Void.TYPE, CardView.class),
|
setCard (Mode.SERVER, Void.TYPE, CardView.class),
|
||||||
setSelectables (Mode.SERVER, Void.TYPE, Iterable/*CardView*/.class),
|
setSelectables (Mode.SERVER, Void.TYPE, Iterable/*CardView*/.class),
|
||||||
clearSelectables (Mode.SERVER),
|
clearSelectables (Mode.SERVER, Void.TYPE),
|
||||||
refreshField (Mode.SERVER),
|
refreshField (Mode.SERVER, Void.TYPE),
|
||||||
// TODO case "setPlayerAvatar":
|
// TODO case "setPlayerAvatar":
|
||||||
openZones (Mode.SERVER, PlayerZoneUpdates.class, PlayerView.class, Collection/*ZoneType*/.class, Map/*PlayerView,Object*/.class),
|
openZones (Mode.SERVER, PlayerZoneUpdates.class, PlayerView.class, Collection/*ZoneType*/.class, Map/*PlayerView,Object*/.class),
|
||||||
restoreOldZones (Mode.SERVER, Void.TYPE, PlayerView.class, PlayerZoneUpdates.class),
|
restoreOldZones (Mode.SERVER, Void.TYPE, PlayerView.class, Iterable/*PlayerZoneUpdates*/.class),
|
||||||
isUiSetToSkipPhase (Mode.SERVER, Boolean.TYPE, PlayerView.class, PhaseType.class),
|
isUiSetToSkipPhase (Mode.SERVER, Boolean.TYPE, PlayerView.class, PhaseType.class),
|
||||||
setRememberedActions(Mode.SERVER, Void.TYPE),
|
setRememberedActions(Mode.SERVER, Void.TYPE),
|
||||||
nextRememberedAction(Mode.SERVER, Void.TYPE),
|
nextRememberedAction(Mode.SERVER, Void.TYPE),
|
||||||
@@ -85,18 +86,18 @@ public enum ProtocolMethod {
|
|||||||
// which client and server wait for one another's response and block
|
// which client and server wait for one another's response and block
|
||||||
// the threads that're supposed to give that response
|
// the threads that're supposed to give that response
|
||||||
useMana (Mode.CLIENT, Void.TYPE, Byte.TYPE),
|
useMana (Mode.CLIENT, Void.TYPE, Byte.TYPE),
|
||||||
undoLastAction (Mode.CLIENT, Void.TYPE, Boolean.TYPE),
|
undoLastAction (Mode.CLIENT, Void.TYPE),
|
||||||
selectPlayer (Mode.CLIENT, Void.TYPE, PlayerView.class, ITriggerEvent.class),
|
selectPlayer (Mode.CLIENT, Void.TYPE, PlayerView.class, ITriggerEvent.class),
|
||||||
selectCard (Mode.CLIENT, Void.TYPE, CardView.class, List.class, ITriggerEvent.class),
|
selectCard (Mode.CLIENT, Void.TYPE, CardView.class, List.class, ITriggerEvent.class),
|
||||||
selectButtonOk (Mode.CLIENT),
|
selectButtonOk (Mode.CLIENT, Void.TYPE),
|
||||||
selectButtonCancel (Mode.CLIENT),
|
selectButtonCancel (Mode.CLIENT, Void.TYPE),
|
||||||
selectAbility (Mode.CLIENT, Void.TYPE, SpellAbilityView.class),
|
selectAbility (Mode.CLIENT, Void.TYPE, SpellAbilityView.class),
|
||||||
passPriorityUntilEndOfTurn(Mode.CLIENT),
|
passPriorityUntilEndOfTurn(Mode.CLIENT, Void.TYPE),
|
||||||
passPriority (Mode.CLIENT),
|
passPriority (Mode.CLIENT, Void.TYPE),
|
||||||
nextGameDecision (Mode.CLIENT, Void.TYPE, NextGameDecision.class),
|
nextGameDecision (Mode.CLIENT, Void.TYPE, NextGameDecision.class),
|
||||||
getActivateDescription (Mode.CLIENT, String.class, CardView.class),
|
getActivateDescription (Mode.CLIENT, String.class, CardView.class),
|
||||||
concede (Mode.CLIENT),
|
concede (Mode.CLIENT, Void.TYPE),
|
||||||
alphaStrike (Mode.CLIENT),
|
alphaStrike (Mode.CLIENT, Void.TYPE),
|
||||||
reorderHand (Mode.CLIENT, Void.TYPE, CardView.class, Integer.TYPE);
|
reorderHand (Mode.CLIENT, Void.TYPE, CardView.class, Integer.TYPE);
|
||||||
|
|
||||||
private enum Mode {
|
private enum Mode {
|
||||||
@@ -161,13 +162,17 @@ public enum ProtocolMethod {
|
|||||||
if(!GuiBase.hasPropertyConfig())
|
if(!GuiBase.hasPropertyConfig())
|
||||||
return; //if the experimental network option is enabled, then check the args, else let the default decoder handle it
|
return; //if the experimental network option is enabled, then check the args, else let the default decoder handle it
|
||||||
|
|
||||||
for (int iArg = 0; iArg < args.length; iArg++) {
|
try {
|
||||||
final Object arg = args[iArg];
|
for (int iArg = 0; iArg < args.length; iArg++) {
|
||||||
final Class<?> type = this.args[iArg];
|
final Object arg = args[iArg];
|
||||||
if (!ReflectionUtil.isInstance(arg, type)) {
|
final Class<?> type = this.args[iArg];
|
||||||
//throw new InternalError(String.format("Protocol method %s: illegal argument (%d) of type %s, %s expected", name(), iArg, arg.getClass().getName(), type.getName()));
|
if (!ReflectionUtil.isInstance(arg, type)) {
|
||||||
System.err.println(String.format("InternalError: Protocol method %s: illegal argument (%d) of type %s, %s expected (ProtocolMethod.java)", name(), iArg, arg.getClass().getName(), type.getName()));
|
//throw new InternalError(String.format("Protocol method %s: illegal argument (%d) of type %s, %s expected", name(), iArg, arg.getClass().getName(), type.getName()));
|
||||||
|
System.err.println(String.format("InternalError: Protocol method %s: illegal argument (%d) of type %s, %s expected (ProtocolMethod.java)", name(), iArg, arg.getClass().getName(), type.getName()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,9 +76,9 @@ public class NetGuiGame extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showPromptMessage(final PlayerView playerView, final String message, final CardView card) {
|
public void showCardPromptMessage(final PlayerView playerView, final String message, final CardView card) {
|
||||||
updateGameView();
|
updateGameView();
|
||||||
send(ProtocolMethod.showPromptMessage, playerView, message);
|
send(ProtocolMethod.showCardPromptMessage, playerView, message, card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public interface IGuiGame {
|
|||||||
void afterGameEnd();
|
void afterGameEnd();
|
||||||
void showCombat();
|
void showCombat();
|
||||||
void showPromptMessage(PlayerView playerView, String message);
|
void showPromptMessage(PlayerView playerView, String message);
|
||||||
void showPromptMessage(PlayerView playerView, String message, CardView card);
|
void showCardPromptMessage(PlayerView playerView, String message, CardView card);
|
||||||
void updateButtons(PlayerView owner, boolean okEnabled, boolean cancelEnabled, boolean focusOk);
|
void updateButtons(PlayerView owner, boolean okEnabled, boolean cancelEnabled, boolean focusOk);
|
||||||
void updateButtons(PlayerView owner, String label1, String label2, boolean enable1, boolean enable2, boolean focus1);
|
void updateButtons(PlayerView owner, String label1, String label2, boolean enable1, boolean enable2, boolean focus1);
|
||||||
void flashIncorrectAction();
|
void flashIncorrectAction();
|
||||||
|
|||||||
Reference in New Issue
Block a user