mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Stack and Dock shall use LobbyPlayer, since using common Player makes no sense in hotseat mode
PlayerStartConditions: fix NPE
This commit is contained in:
@@ -193,8 +193,8 @@ public class MatchController {
|
|||||||
|
|
||||||
// The UI controls should use these game data as models
|
// The UI controls should use these game data as models
|
||||||
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
|
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
|
||||||
CDock.SINGLETON_INSTANCE.setModel(game, localHuman);
|
CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer);
|
||||||
CStack.SINGLETON_INSTANCE.setModel(game.getStack(), localHuman);
|
CStack.SINGLETON_INSTANCE.setModel(game.getStack(), humanLobbyPlayer);
|
||||||
CLog.SINGLETON_INSTANCE.setModel(game.getGameLog());
|
CLog.SINGLETON_INSTANCE.setModel(game.getGameLog());
|
||||||
CCombat.SINGLETON_INSTANCE.setModel(game);
|
CCombat.SINGLETON_INSTANCE.setModel(game);
|
||||||
CMessage.SINGLETON_INSTANCE.setModel(match);
|
CMessage.SINGLETON_INSTANCE.setModel(match);
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public class PlayerStartConditions {
|
|||||||
|
|
||||||
public static PlayerStartConditions fromDeck(final Deck deck) {
|
public static PlayerStartConditions fromDeck(final Deck deck) {
|
||||||
PlayerStartConditions start = new PlayerStartConditions(deck);
|
PlayerStartConditions start = new PlayerStartConditions(deck);
|
||||||
if( deck.has(DeckSection.Commander)) {
|
if( deck != null && deck.has(DeckSection.Commander)) {
|
||||||
start.setStartingLife(40);
|
start.setStartingLife(40);
|
||||||
start.addCardsInCommand(deck.get(DeckSection.Commander).toFlatList());
|
start.addCardsInCommand(deck.get(DeckSection.Commander).toFlatList());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import forge.game.GameState;
|
|||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
@@ -63,14 +64,26 @@ public enum CDock implements ICDoc {
|
|||||||
|
|
||||||
private int arcState;
|
private int arcState;
|
||||||
private GameState game;
|
private GameState game;
|
||||||
private Player player;
|
private LobbyPlayer player;
|
||||||
|
|
||||||
public void setModel(GameState game0, Player player0) {
|
public void setModel(GameState game0, LobbyPlayer player0) {
|
||||||
|
|
||||||
game = game0;
|
game = game0;
|
||||||
player = player0;
|
player = player0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Player findAffectedPlayer() {
|
||||||
|
// try current priority
|
||||||
|
Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
|
||||||
|
if( currentPriority.getLobbyPlayer() == player ) return currentPriority;
|
||||||
|
|
||||||
|
// otherwise find just any player, belonging to this lobbyplayer
|
||||||
|
for(Player p : game.getPlayers())
|
||||||
|
if(p.getLobbyPlayer() == player )
|
||||||
|
return p;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/** Concede game, bring up WinLose UI. */
|
/** Concede game, bring up WinLose UI. */
|
||||||
public void concede() {
|
public void concede() {
|
||||||
@@ -78,7 +91,11 @@ public enum CDock implements ICDoc {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.concede();
|
Player p = findAffectedPlayer();
|
||||||
|
if( p == null ) return;
|
||||||
|
// if( c.isMindSlaved() ) return
|
||||||
|
|
||||||
|
p.concede();
|
||||||
game.getAction().checkStateEffects();
|
game.getAction().checkStateEffects();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +103,10 @@ public enum CDock implements ICDoc {
|
|||||||
* End turn.
|
* End turn.
|
||||||
*/
|
*/
|
||||||
public void endTurn() {
|
public void endTurn() {
|
||||||
player.getController().autoPassTo(PhaseType.CLEANUP);
|
Player p = findAffectedPlayer();
|
||||||
|
|
||||||
|
if( p != null )
|
||||||
|
p.getController().autoPassTo(PhaseType.CLEANUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void revertLayout() {
|
private void revertLayout() {
|
||||||
@@ -137,7 +157,8 @@ public enum CDock implements ICDoc {
|
|||||||
* View deck list.
|
* View deck list.
|
||||||
*/
|
*/
|
||||||
private void viewDeckList() {
|
private void viewDeckList() {
|
||||||
showDeck(player.getGame().getMatch().getPlayers().get(0).getValue().getCurrentDeck());
|
|
||||||
|
showDeck(game.getMatch().getPlayers().get(0).getValue().getCurrentDeck());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -179,10 +200,11 @@ public enum CDock implements ICDoc {
|
|||||||
public void alphaStrike() {
|
public void alphaStrike() {
|
||||||
final PhaseHandler ph = game.getPhaseHandler();
|
final PhaseHandler ph = game.getPhaseHandler();
|
||||||
|
|
||||||
if (ph.is(PhaseType.COMBAT_DECLARE_ATTACKERS, player)) {
|
Player p = findAffectedPlayer();
|
||||||
List<Player> defenders = player.getOpponents();
|
if (ph.is(PhaseType.COMBAT_DECLARE_ATTACKERS, p)) { // ph.is(...) includes null check
|
||||||
|
List<Player> defenders = p.getOpponents();
|
||||||
|
|
||||||
for (Card c : CardLists.filter(player.getCardsIn(ZoneType.Battlefield), Presets.CREATURES)) {
|
for (Card c : CardLists.filter(p.getCardsIn(ZoneType.Battlefield), Presets.CREATURES)) {
|
||||||
if (c.isAttacking())
|
if (c.isAttacking())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -238,8 +260,8 @@ public enum CDock implements ICDoc {
|
|||||||
deckList.append(s.getValue() + " x " + s.getKey() + nl);
|
deckList.append(s.getValue() + " x " + s.getKey() + nl);
|
||||||
}
|
}
|
||||||
|
|
||||||
int rcMsg = -1138;
|
|
||||||
String ttl = "Human's Decklist";
|
String ttl = "Decklist";
|
||||||
if (dName != null) {
|
if (dName != null) {
|
||||||
ttl += " - " + dName;
|
ttl += " - " + dName;
|
||||||
}
|
}
|
||||||
@@ -253,7 +275,7 @@ public enum CDock implements ICDoc {
|
|||||||
|
|
||||||
msg.append("Copy Decklist to Clipboard?");
|
msg.append("Copy Decklist to Clipboard?");
|
||||||
|
|
||||||
rcMsg = JOptionPane.showConfirmDialog(null, msg, ttl, JOptionPane.OK_CANCEL_OPTION);
|
int rcMsg = JOptionPane.showConfirmDialog(null, msg, ttl, JOptionPane.OK_CANCEL_OPTION);
|
||||||
|
|
||||||
if (rcMsg == JOptionPane.OK_OPTION) {
|
if (rcMsg == JOptionPane.OK_OPTION) {
|
||||||
final StringSelection ss = new StringSelection(deckList.toString());
|
final StringSelection ss = new StringSelection(deckList.toString());
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import java.util.Observer;
|
|||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
@@ -23,7 +23,7 @@ public enum CStack implements ICDoc, Observer {
|
|||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private MagicStack model;
|
private MagicStack model;
|
||||||
private Player viewer;
|
private LobbyPlayer viewer;
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
@@ -61,7 +61,7 @@ public enum CStack implements ICDoc, Observer {
|
|||||||
FThreads.invokeInEdtNowOrLater(upd);
|
FThreads.invokeInEdtNowOrLater(upd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setModel(MagicStack model, Player guiPlayer) {
|
public void setModel(MagicStack model, LobbyPlayer guiPlayer) {
|
||||||
this.model = model;
|
this.model = model;
|
||||||
this.viewer = guiPlayer;
|
this.viewer = guiPlayer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import javax.swing.border.EmptyBorder;
|
|||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.CardUtil;
|
import forge.CardUtil;
|
||||||
import forge.card.spellability.SpellAbilityStackInstance;
|
import forge.card.spellability.SpellAbilityStackInstance;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.PlayerController;
|
import forge.game.player.PlayerController;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
@@ -117,7 +117,7 @@ public enum VStack implements IVDoc<CStack> {
|
|||||||
/**
|
/**
|
||||||
* @param stack
|
* @param stack
|
||||||
* @param viewer */
|
* @param viewer */
|
||||||
public void updateStack(final MagicStack stack, final Player viewer) {
|
public void updateStack(final MagicStack stack, final LobbyPlayer viewer) {
|
||||||
// No need to update this unless it's showing
|
// No need to update this unless it's showing
|
||||||
if (!parentCell.getSelected().equals(this)) { return; }
|
if (!parentCell.getSelected().equals(this)) { return; }
|
||||||
|
|
||||||
@@ -170,13 +170,13 @@ public enum VStack implements IVDoc<CStack> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if(spell.getSpellAbility().isOptionalTrigger() && spell.getSpellAbility().getActivatingPlayer() == viewer) {
|
if(spell.getSpellAbility().isOptionalTrigger() && spell.getSpellAbility().getActivatingPlayer().getLobbyPlayer() == viewer) {
|
||||||
tar.addMouseListener(new MouseAdapter() {
|
tar.addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e){
|
public void mouseClicked(MouseEvent e){
|
||||||
if (e.getButton() == MouseEvent.BUTTON3)
|
if (e.getButton() == MouseEvent.BUTTON3)
|
||||||
{
|
{
|
||||||
otMenu.setStackInstance(spell, viewer);
|
otMenu.setStackInstance(spell);
|
||||||
otMenu.show(e.getComponent(), e.getX(), e.getY());
|
otMenu.show(e.getComponent(), e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -273,9 +273,9 @@ public enum VStack implements IVDoc<CStack> {
|
|||||||
add(jmiAsk);
|
add(jmiAsk);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStackInstance(final SpellAbilityStackInstance SI, Player viewer)
|
public void setStackInstance(final SpellAbilityStackInstance SI)
|
||||||
{
|
{
|
||||||
localPlayer = viewer == null ? null : viewer.getController();
|
localPlayer = SI.getSpellAbility().getActivatingPlayer().getController();
|
||||||
|
|
||||||
triggerID = SI.getSpellAbility().getSourceTrigger();
|
triggerID = SI.getSpellAbility().getSourceTrigger();
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import forge.deck.Deck;
|
|||||||
import forge.deck.DeckgenUtil;
|
import forge.deck.DeckgenUtil;
|
||||||
import forge.deck.generate.GenerateThemeDeck;
|
import forge.deck.generate.GenerateThemeDeck;
|
||||||
import forge.game.PlayerStartConditions;
|
import forge.game.PlayerStartConditions;
|
||||||
import forge.gui.toolbox.FSkin.SkinProp;
|
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
import forge.quest.QuestEvent;
|
import forge.quest.QuestEvent;
|
||||||
import forge.quest.QuestEventChallenge;
|
import forge.quest.QuestEventChallenge;
|
||||||
@@ -113,7 +112,7 @@ public class FDeckChooser extends JPanel {
|
|||||||
titleLabel.setSelected(true);
|
titleLabel.setSelected(true);
|
||||||
//titleLabel.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME));
|
//titleLabel.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME));
|
||||||
//titleLabel.setBorder(null);
|
//titleLabel.setBorder(null);
|
||||||
pnlRadios.add(btnChange, "w 180px!, h 28px!, gap 10px 0 0 5px, ax right");
|
pnlRadios.add(btnChange, "w 180px!, h 28px!, gap 10px 0 0 4px, ax right");
|
||||||
}
|
}
|
||||||
pnlRadios.add(grpRadios, "pushx, growx");
|
pnlRadios.add(grpRadios, "pushx, growx");
|
||||||
pnlRadios.add(btnRandom, "w 180px!, h 30px!, gap 10px 0 0 0, ax center, ay bottom");
|
pnlRadios.add(btnRandom, "w 180px!, h 30px!, gap 10px 0 0 0, ax center, ay bottom");
|
||||||
|
|||||||
Reference in New Issue
Block a user