Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package basemod.patches.com.megacrit.cardcrawl.cards.AbstractCard;

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.evacipated.cardcrawl.modthespire.lib.SpireField;
import com.evacipated.cardcrawl.modthespire.lib.SpirePatch;
import com.evacipated.cardcrawl.modthespire.lib.SpirePrefixPatch;
import com.evacipated.cardcrawl.modthespire.lib.SpireReturn;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.screens.SingleCardViewPopup;

public class RenderInLibrary {
@SpirePatch(
clz = AbstractCard.class,
method = SpirePatch.CLASS
)
public static class UpgradeCard
{
public static SpireField<AbstractCard> upgradeCard = new SpireField<>(() -> null);
}

@SpirePatch(
clz = AbstractCard.class,
method = "renderInLibrary",
paramtypez = {SpriteBatch.class}
)
public static class FixRenderLibraryUpgrade
{
@SpirePrefixPatch
public static SpireReturn<Void> prefix(AbstractCard __instance, SpriteBatch sb)
{
if (SingleCardViewPopup.isViewingUpgrade) {
if (UpgradeCard.upgradeCard.get(__instance) == null) {
UpgradeCard.upgradeCard.set(__instance, __instance.makeCopy());
UpgradeCard.upgradeCard.get(__instance).upgrade();
UpgradeCard.upgradeCard.get(__instance).displayUpgrades();
}
UpgradeCard.upgradeCard.get(__instance).current_x = __instance.current_x;
UpgradeCard.upgradeCard.get(__instance).current_y = __instance.current_y;
UpgradeCard.upgradeCard.get(__instance).drawScale = __instance.drawScale;

UpgradeCard.upgradeCard.get(__instance).render(sb);
return SpireReturn.Return();
} else if (UpgradeCard.upgradeCard.get(__instance) != null) {
UpgradeCard.upgradeCard.set(__instance, null);
}
return SpireReturn.Continue();
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package basemod.patches.com.megacrit.cardcrawl.screens.SingleCardViewPopup;

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.evacipated.cardcrawl.modthespire.lib.*;
import com.megacrit.cardcrawl.cards.AbstractCard;
import com.megacrit.cardcrawl.screens.SingleCardViewPopup;
import javassist.CtBehavior;

import java.lang.reflect.Field;

public class RenderUpgradeCard
{
@SpirePatch(
clz = SingleCardViewPopup.class,
method = SpirePatch.CLASS
)
public static class UpgradeStatus
{
public static SpireField<Boolean> preViewingUpgrade = new SpireField<>(() -> false);
public static SpireField<Boolean> nowViewingUpgrade = new SpireField<>(() -> false);
public static SpireField<AbstractCard> originalCard = new SpireField<>(() -> null);
}

@SpirePatch2(
clz = SingleCardViewPopup.class,
method = "render",
paramtypez = {SpriteBatch.class}
)
public static class FixRenderUpgrade
{
@SpirePrefixPatch
public static void prefix(SingleCardViewPopup __instance)
{
// disable isViewingUpgrade in this method
UpgradeStatus.nowViewingUpgrade.set(__instance, SingleCardViewPopup.isViewingUpgrade);
SingleCardViewPopup.isViewingUpgrade = false;
if (UpgradeStatus.nowViewingUpgrade.get(__instance) != UpgradeStatus.preViewingUpgrade.get(__instance)) {
Field cardField;
try {
cardField = SingleCardViewPopup.class.getDeclaredField("card");
cardField.setAccessible(true);
if (UpgradeStatus.nowViewingUpgrade.get(__instance)) {
// isViewUpgrade just false -> true
AbstractCard card = (AbstractCard) cardField.get(__instance);
UpgradeStatus.originalCard.set(__instance, card.makeStatEquivalentCopy());
card.upgrade();
card.displayUpgrades();
} else {
// isViewUpgrade just true -> false
cardField.set(__instance, UpgradeStatus.originalCard.get(__instance));
}
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}

}

}

@SpireInsertPatch(locator = Locator.class)
public static void insert(SingleCardViewPopup __instance)
{
SingleCardViewPopup.isViewingUpgrade = UpgradeStatus.nowViewingUpgrade.get(__instance);
UpgradeStatus.preViewingUpgrade.set(__instance, SingleCardViewPopup.isViewingUpgrade);
}

private static class Locator extends SpireInsertLocator
{
@Override
public int[] Locate(CtBehavior ctBehavior) throws Exception {
Matcher matcher = new Matcher.MethodCallMatcher(SpriteBatch.class, "setColor");
return LineFinder.findInOrder(ctBehavior, matcher);
}
}

}

@SpirePatch(
clz = SingleCardViewPopup.class,
method = "close"
)
public static class CloseFix
{
@SpirePostfixPatch
public static void postfix(SingleCardViewPopup __instance)
{
UpgradeStatus.nowViewingUpgrade.set(__instance, false);
UpgradeStatus.preViewingUpgrade.set(__instance, false);
if (UpgradeStatus.originalCard.get(__instance) != null) {
UpgradeStatus.originalCard.set(__instance, null);
}
}
}

}