mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Quest mulligan code moved out of HumanPlayer
QuestController is listening for some events and reacts to human's first mulligan
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -14205,6 +14205,7 @@ src/main/java/forge/game/event/FlipCoinEvent.java -text
|
|||||||
src/main/java/forge/game/event/LandPlayedEvent.java -text
|
src/main/java/forge/game/event/LandPlayedEvent.java -text
|
||||||
src/main/java/forge/game/event/LifeLossEvent.java -text
|
src/main/java/forge/game/event/LifeLossEvent.java -text
|
||||||
src/main/java/forge/game/event/ManaBurnEvent.java -text
|
src/main/java/forge/game/event/ManaBurnEvent.java -text
|
||||||
|
src/main/java/forge/game/event/MulliganEvent.java -text
|
||||||
src/main/java/forge/game/event/PoisonCounterEvent.java -text
|
src/main/java/forge/game/event/PoisonCounterEvent.java -text
|
||||||
src/main/java/forge/game/event/SetTappedEvent.java -text
|
src/main/java/forge/game/event/SetTappedEvent.java -text
|
||||||
src/main/java/forge/game/event/ShuffleEvent.java -text
|
src/main/java/forge/game/event/ShuffleEvent.java -text
|
||||||
|
|||||||
@@ -84,9 +84,9 @@ public class InputMulligan extends Input {
|
|||||||
@Override
|
@Override
|
||||||
public final void selectButtonCancel() {
|
public final void selectButtonCancel() {
|
||||||
final Player humanPlayer = Singletons.getControl().getPlayer();
|
final Player humanPlayer = Singletons.getControl().getPlayer();
|
||||||
final int newHand = humanPlayer.doMulligan();
|
humanPlayer.doMulligan();
|
||||||
|
|
||||||
if (newHand == 0) {
|
if (humanPlayer.getCardsIn(ZoneType.Hand).isEmpty()) {
|
||||||
this.end();
|
this.end();
|
||||||
} else {
|
} else {
|
||||||
ButtonUtil.enableAllFocusOk();
|
ButtonUtil.enableAllFocusOk();
|
||||||
|
|||||||
@@ -118,8 +118,12 @@ public class GameState {
|
|||||||
endOfTurn = new EndOfTurn(this);
|
endOfTurn = new EndOfTurn(this);
|
||||||
endOfCombat = new EndOfCombat(this);
|
endOfCombat = new EndOfCombat(this);
|
||||||
|
|
||||||
|
if ( match0.getGameType() == GameType.Quest)
|
||||||
|
events.register(Singletons.getModel().getQuest()); // this one listens to player's mulligans ATM
|
||||||
|
|
||||||
events.register(Singletons.getControl().getSoundSystem());
|
events.register(Singletons.getControl().getSoundSystem());
|
||||||
events.register(gameLog);
|
events.register(gameLog);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
15
src/main/java/forge/game/event/MulliganEvent.java
Normal file
15
src/main/java/forge/game/event/MulliganEvent.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package forge.game.event;
|
||||||
|
|
||||||
|
import forge.game.player.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MulliganEvent extends Event {
|
||||||
|
|
||||||
|
public final Player player;
|
||||||
|
public MulliganEvent(Player p) {
|
||||||
|
player = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,13 +24,10 @@ import forge.Card;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.GameType;
|
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.gui.GuiDialog;
|
import forge.gui.GuiDialog;
|
||||||
import forge.quest.QuestController;
|
|
||||||
import forge.quest.bazaar.QuestItemType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -131,19 +128,6 @@ public class HumanPlayer extends Player {
|
|||||||
return PlayerType.HUMAN;
|
return PlayerType.HUMAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final int doMulligan() {
|
|
||||||
int newHand = super.doMulligan();
|
|
||||||
final QuestController quest = Singletons.getModel().getQuest();
|
|
||||||
final boolean isQuest = Singletons.getModel().getMatch().getGameType().equals(GameType.Quest);
|
|
||||||
if (isQuest && quest.getAssets().hasItem(QuestItemType.SLEIGHT) && (getStats().getMulliganCount() == 1)) {
|
|
||||||
drawCard();
|
|
||||||
newHand++;
|
|
||||||
getStats().notifyOpeningHandSize(newHand);
|
|
||||||
}
|
|
||||||
return newHand;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.game.player.Player#getController()
|
* @see forge.game.player.Player#getController()
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ import forge.game.event.CardDiscardedEvent;
|
|||||||
import forge.game.event.DrawCardEvent;
|
import forge.game.event.DrawCardEvent;
|
||||||
import forge.game.event.LandPlayedEvent;
|
import forge.game.event.LandPlayedEvent;
|
||||||
import forge.game.event.LifeLossEvent;
|
import forge.game.event.LifeLossEvent;
|
||||||
|
import forge.game.event.MulliganEvent;
|
||||||
import forge.game.event.PoisonCounterEvent;
|
import forge.game.event.PoisonCounterEvent;
|
||||||
import forge.game.event.ShuffleEvent;
|
import forge.game.event.ShuffleEvent;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
@@ -1322,20 +1323,21 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* a GamePlayerRating object
|
* a GamePlayerRating object
|
||||||
* @return an int
|
* @return an int
|
||||||
*/
|
*/
|
||||||
public int doMulligan() {
|
public void doMulligan() {
|
||||||
final List<Card> hand = new ArrayList<Card>(getCardsIn(ZoneType.Hand));
|
final List<Card> hand = new ArrayList<Card>(getCardsIn(ZoneType.Hand));
|
||||||
for (final Card c : hand) {
|
for (final Card c : hand) {
|
||||||
game.getAction().moveToLibrary(c);
|
game.getAction().moveToLibrary(c);
|
||||||
}
|
}
|
||||||
shuffle();
|
shuffle();
|
||||||
final int newHand = hand.size() - 1;
|
for (int i = 1; i < hand.size(); i++) { // draws one card less
|
||||||
for (int i = 0; i < newHand; i++) {
|
|
||||||
drawCard();
|
drawCard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
game.getEvents().post(new MulliganEvent(this)); // quest listener may interfere here
|
||||||
|
final int newHand = getCardsIn(ZoneType.Hand).size();
|
||||||
game.getGameLog().add("Mulligan", this + " has mulliganed down to " + newHand + " cards.", 0);
|
game.getGameLog().add("Mulligan", this + " has mulliganed down to " + newHand + " cards.", 0);
|
||||||
stats.notifyHasMulliganed();
|
stats.notifyHasMulliganed();
|
||||||
stats.notifyOpeningHandSize(newHand);
|
stats.notifyOpeningHandSize(newHand);
|
||||||
return newHand;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package forge.game.player;
|
package forge.game.player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@@ -21,16 +21,21 @@ import java.io.File;
|
|||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.quest.data.GameFormatQuest;
|
import forge.quest.data.GameFormatQuest;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
|
import forge.game.event.Event;
|
||||||
|
import forge.game.event.MulliganEvent;
|
||||||
|
import forge.game.player.PlayerType;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.item.PreconDeck;
|
import forge.item.PreconDeck;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.quest.bazaar.QuestBazaarManager;
|
import forge.quest.bazaar.QuestBazaarManager;
|
||||||
|
import forge.quest.bazaar.QuestItemType;
|
||||||
import forge.quest.bazaar.QuestPetStorage;
|
import forge.quest.bazaar.QuestPetStorage;
|
||||||
import forge.quest.data.QuestAchievements;
|
import forge.quest.data.QuestAchievements;
|
||||||
import forge.quest.data.QuestAssets;
|
import forge.quest.data.QuestAssets;
|
||||||
@@ -436,4 +441,15 @@ public class QuestController {
|
|||||||
return unlocksAvaliable > unlocksSpent ? Math.min(unlocksAvaliable - unlocksSpent, cntLocked) : 0;
|
return unlocksAvaliable > unlocksSpent ? Math.min(unlocksAvaliable - unlocksSpent, cntLocked) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void receiveGameEvent(Event ev) { // Receives events only during quest games
|
||||||
|
if ( ev instanceof MulliganEvent ) {
|
||||||
|
MulliganEvent mev = (MulliganEvent)ev;
|
||||||
|
// First mulligan is free
|
||||||
|
if (mev.player.getType() == PlayerType.HUMAN && getAssets().hasItem(QuestItemType.SLEIGHT) && mev.player.getStats().getMulliganCount() == 0) {
|
||||||
|
mev.player.drawCard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user