package fruitymod.seeker.actions.unique; import com.megacrit.cardcrawl.actions.AbstractGameAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInDrawPileAction; import com.megacrit.cardcrawl.actions.common.MakeTempCardInHandAction; import com.megacrit.cardcrawl.cards.AbstractCard; import com.megacrit.cardcrawl.characters.AbstractPlayer; import com.megacrit.cardcrawl.core.AbstractCreature; import com.megacrit.cardcrawl.core.CardCrawlGame; import com.megacrit.cardcrawl.core.Settings; import com.megacrit.cardcrawl.dungeons.AbstractDungeon; import com.megacrit.cardcrawl.localization.UIStrings; import fruitymod.seeker.actions.common.MakeTempCardInDrawPileFreeAction; import java.util.ArrayList; public class IlluminateAction extends AbstractGameAction { private static final UIStrings uiStrings = CardCrawlGame.languagePack.getUIString("DualWieldAction"); public static final String[] TEXT = IlluminateAction.uiStrings.TEXT; private AbstractPlayer p; private boolean freedupe = false; private ArrayList<AbstractCard> cannotDuplicate = new ArrayList<>(); public IlluminateAction(AbstractCreature source, boolean upgraded) { this.setValues(AbstractDungeon.player, source, amount); this.actionType = AbstractGameAction.ActionType.DRAW; this.duration = 0.25f; this.p = AbstractDungeon.player; this.freedupe = upgraded; } @Override public void update() { if (this.duration == Settings.ACTION_DUR_FAST) { for (AbstractCard c : this.p.hand.group) { if (this.isEligible(c)) continue; this.cannotDuplicate.add(c); } if (this.cannotDuplicate.size() == this.p.hand.group.size()) { this.isDone = true; return; } if (this.p.hand.group.size() - this.cannotDuplicate.size() == 1) { for (AbstractCard c : this.p.hand.group) { if (!this.isEligible(c)) continue; if (freedupe) { c.setCostForTurn(0); AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); } else AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); this.isDone = true; return; } } this.p.hand.group.removeAll(this.cannotDuplicate); if (this.p.hand.group.size() > 1) { AbstractDungeon.handCardSelectScreen.open(TEXT[0], 1, false, false, false, false); this.tickDuration(); return; } if (this.p.hand.group.size() == 1) { AbstractCard c = p.hand.getTopCard(); if (freedupe) { c.setCostForTurn(0); AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); } else AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); this.returnCards(); this.isDone = true; } } if (!AbstractDungeon.handCardSelectScreen.wereCardsRetrieved) { for (AbstractCard c : AbstractDungeon.handCardSelectScreen.selectedCards.group) { AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); if (freedupe) { c.setCostForTurn(0); AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); } else AbstractDungeon.actionManager.addToTop(new MakeTempCardInHandAction(c.makeStatEquivalentCopy())); } this.returnCards(); AbstractDungeon.handCardSelectScreen.wereCardsRetrieved = true; AbstractDungeon.handCardSelectScreen.selectedCards.group.clear(); this.isDone = true; } this.tickDuration(); } private void returnCards() { for (AbstractCard c : this.cannotDuplicate) { this.p.hand.addToTop(c); } this.p.hand.refreshHandLayout(); } private boolean isEligible(AbstractCard card) { return card.isEthereal; } }