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/LifeLossEvent.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/SetTappedEvent.java -text
|
||||
src/main/java/forge/game/event/ShuffleEvent.java -text
|
||||
|
||||
@@ -84,9 +84,9 @@ public class InputMulligan extends Input {
|
||||
@Override
|
||||
public final void selectButtonCancel() {
|
||||
final Player humanPlayer = Singletons.getControl().getPlayer();
|
||||
final int newHand = humanPlayer.doMulligan();
|
||||
humanPlayer.doMulligan();
|
||||
|
||||
if (newHand == 0) {
|
||||
if (humanPlayer.getCardsIn(ZoneType.Hand).isEmpty()) {
|
||||
this.end();
|
||||
} else {
|
||||
ButtonUtil.enableAllFocusOk();
|
||||
|
||||
@@ -118,8 +118,12 @@ public class GameState {
|
||||
endOfTurn = new EndOfTurn(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(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.card.spellability.SpellAbility;
|
||||
import forge.control.input.Input;
|
||||
import forge.game.GameType;
|
||||
import forge.game.GameState;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.GuiDialog;
|
||||
import forge.quest.QuestController;
|
||||
import forge.quest.bazaar.QuestItemType;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -131,19 +128,6 @@ public class HumanPlayer extends Player {
|
||||
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)
|
||||
* @see forge.game.player.Player#getController()
|
||||
*/
|
||||
|
||||
@@ -61,6 +61,7 @@ import forge.game.event.CardDiscardedEvent;
|
||||
import forge.game.event.DrawCardEvent;
|
||||
import forge.game.event.LandPlayedEvent;
|
||||
import forge.game.event.LifeLossEvent;
|
||||
import forge.game.event.MulliganEvent;
|
||||
import forge.game.event.PoisonCounterEvent;
|
||||
import forge.game.event.ShuffleEvent;
|
||||
import forge.game.phase.PhaseHandler;
|
||||
@@ -1322,20 +1323,21 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
||||
* a GamePlayerRating object
|
||||
* @return an int
|
||||
*/
|
||||
public int doMulligan() {
|
||||
public void doMulligan() {
|
||||
final List<Card> hand = new ArrayList<Card>(getCardsIn(ZoneType.Hand));
|
||||
for (final Card c : hand) {
|
||||
game.getAction().moveToLibrary(c);
|
||||
}
|
||||
shuffle();
|
||||
final int newHand = hand.size() - 1;
|
||||
for (int i = 0; i < newHand; i++) {
|
||||
for (int i = 1; i < hand.size(); i++) { // draws one card less
|
||||
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);
|
||||
stats.notifyHasMulliganed();
|
||||
stats.notifyOpeningHandSize(newHand);
|
||||
return newHand;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package forge.game.player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -21,16 +21,21 @@ import java.io.File;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.eventbus.Subscribe;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.quest.data.GameFormatQuest;
|
||||
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.PreconDeck;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.quest.bazaar.QuestBazaarManager;
|
||||
import forge.quest.bazaar.QuestItemType;
|
||||
import forge.quest.bazaar.QuestPetStorage;
|
||||
import forge.quest.data.QuestAchievements;
|
||||
import forge.quest.data.QuestAssets;
|
||||
@@ -436,4 +441,15 @@ public class QuestController {
|
||||
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