mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Add Spell Smith Insurance (reject smithing for 10% cost)
This commit is contained in:
@@ -39,7 +39,7 @@ public class SpellSmithScene extends UIScene {
|
|||||||
|
|
||||||
private List<PaperCard> cardPool = new ArrayList<>();
|
private List<PaperCard> cardPool = new ArrayList<>();
|
||||||
private TextraLabel playerGold, playerShards, poolSize;
|
private TextraLabel playerGold, playerShards, poolSize;
|
||||||
private final TextraButton pullUsingGold, pullUsingShards;
|
private final TextraButton pullUsingGold, pullUsingShards, acceptReward, declineReward, exitSmith;
|
||||||
private final ScrollPane rewardDummy;
|
private final ScrollPane rewardDummy;
|
||||||
private RewardActor rewardActor;
|
private RewardActor rewardActor;
|
||||||
SelectBox<CardEdition> editionList;
|
SelectBox<CardEdition> editionList;
|
||||||
@@ -47,6 +47,7 @@ public class SpellSmithScene extends UIScene {
|
|||||||
final private HashMap<String, TextraButton> rarityButtons = new HashMap<>();
|
final private HashMap<String, TextraButton> rarityButtons = new HashMap<>();
|
||||||
final private HashMap<String, TextraButton> costButtons = new HashMap<>();
|
final private HashMap<String, TextraButton> costButtons = new HashMap<>();
|
||||||
final private HashMap<String, TextraButton> colorButtons = new HashMap<>();
|
final private HashMap<String, TextraButton> colorButtons = new HashMap<>();
|
||||||
|
|
||||||
//Filter variables.
|
//Filter variables.
|
||||||
private String edition = "";
|
private String edition = "";
|
||||||
private String rarity = "";
|
private String rarity = "";
|
||||||
@@ -57,20 +58,28 @@ public class SpellSmithScene extends UIScene {
|
|||||||
private int currentPrice = 0;
|
private int currentPrice = 0;
|
||||||
private int currentShardPrice = 0;
|
private int currentShardPrice = 0;
|
||||||
private List<CardEdition> editions = null;
|
private List<CardEdition> editions = null;
|
||||||
|
private Reward currentReward = null;
|
||||||
|
private boolean paidInShards = false;
|
||||||
|
|
||||||
private SpellSmithScene() {
|
private SpellSmithScene() {
|
||||||
super(Forge.isLandscapeMode() ? "ui/spellsmith.json" : "ui/spellsmith_portrait.json");
|
super(Forge.isLandscapeMode() ? "ui/spellsmith.json" : "ui/spellsmith_portrait.json");
|
||||||
|
|
||||||
|
|
||||||
editionList = ui.findActor("BSelectPlane");
|
editionList = ui.findActor("BSelectPlane");
|
||||||
rewardDummy = ui.findActor("RewardDummy");
|
rewardDummy = ui.findActor("RewardDummy");
|
||||||
rewardDummy.setVisible(false);
|
rewardDummy.setVisible(false);
|
||||||
|
|
||||||
|
|
||||||
pullUsingGold = ui.findActor("pullUsingGold");
|
pullUsingGold = ui.findActor("pullUsingGold");
|
||||||
pullUsingGold.setDisabled(true);
|
pullUsingGold.setDisabled(true);
|
||||||
pullUsingShards = ui.findActor("pullUsingShards");
|
pullUsingShards = ui.findActor("pullUsingShards");
|
||||||
pullUsingShards.setDisabled(true);
|
pullUsingShards.setDisabled(true);
|
||||||
|
|
||||||
|
exitSmith = ui.findActor("done");
|
||||||
|
|
||||||
|
acceptReward = ui.findActor("accept");
|
||||||
|
acceptReward.setVisible(false);
|
||||||
|
declineReward = ui.findActor("decline");
|
||||||
|
declineReward.setVisible(false);
|
||||||
|
|
||||||
playerGold = Controls.newAccountingLabel(ui.findActor("playerGold"), false);
|
playerGold = Controls.newAccountingLabel(ui.findActor("playerGold"), false);
|
||||||
playerShards = Controls.newAccountingLabel(ui.findActor("playerShards"), true);
|
playerShards = Controls.newAccountingLabel(ui.findActor("playerShards"), true);
|
||||||
poolSize = ui.findActor("poolSize");
|
poolSize = ui.findActor("poolSize");
|
||||||
@@ -114,6 +123,8 @@ public class SpellSmithScene extends UIScene {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui.onButtonPress("accept", SpellSmithScene.this::acceptSmithing);
|
||||||
|
ui.onButtonPress("decline", SpellSmithScene.this::declineSmithing);
|
||||||
ui.onButtonPress("done", SpellSmithScene.this::done);
|
ui.onButtonPress("done", SpellSmithScene.this::done);
|
||||||
ui.onButtonPress("pullUsingGold", () -> SpellSmithScene.this.pullCard(false));
|
ui.onButtonPress("pullUsingGold", () -> SpellSmithScene.this.pullCard(false));
|
||||||
ui.onButtonPress("pullUsingShards", () -> SpellSmithScene.this.pullCard(true));
|
ui.onButtonPress("pullUsingShards", () -> SpellSmithScene.this.pullCard(true));
|
||||||
@@ -122,6 +133,7 @@ public class SpellSmithScene extends UIScene {
|
|||||||
filterResults();
|
filterResults();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reset() {
|
private void reset() {
|
||||||
edition = "";
|
edition = "";
|
||||||
cost_low = -1;
|
cost_low = -1;
|
||||||
@@ -160,6 +172,10 @@ public class SpellSmithScene extends UIScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean done() {
|
public boolean done() {
|
||||||
|
if (currentReward != null) {
|
||||||
|
acceptSmithing();
|
||||||
|
}
|
||||||
|
|
||||||
if (rewardActor != null) rewardActor.remove();
|
if (rewardActor != null) rewardActor.remove();
|
||||||
cardPool.clear(); //Get rid of cardPool, filtering is fast enough to justify keeping it cached.
|
cardPool.clear(); //Get rid of cardPool, filtering is fast enough to justify keeping it cached.
|
||||||
Forge.switchToLast();
|
Forge.switchToLast();
|
||||||
@@ -380,29 +396,74 @@ public class SpellSmithScene extends UIScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void pullCard(boolean usingShards) {
|
public void pullCard(boolean usingShards) {
|
||||||
|
paidInShards = usingShards;
|
||||||
PaperCard P = cardPool.get(MyRandom.getRandom().nextInt(cardPool.size())); //Don't use the standard RNG.
|
PaperCard P = cardPool.get(MyRandom.getRandom().nextInt(cardPool.size())); //Don't use the standard RNG.
|
||||||
Reward R = null;
|
currentReward = null;
|
||||||
if (Config.instance().getSettingData().useAllCardVariants) {
|
if (Config.instance().getSettingData().useAllCardVariants) {
|
||||||
if (!edition.isEmpty()) {
|
if (!edition.isEmpty()) {
|
||||||
R = new Reward(CardUtil.getCardByNameAndEdition(P.getCardName(), edition));
|
currentReward = new Reward(CardUtil.getCardByNameAndEdition(P.getCardName(), edition));
|
||||||
} else {
|
} else {
|
||||||
R = new Reward(CardUtil.getCardByName(P.getCardName())); // grab any random variant if no set preference is specified
|
currentReward = new Reward(CardUtil.getCardByName(P.getCardName())); // grab any random variant if no set preference is specified
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
R = new Reward(P);
|
currentReward = new Reward(P);
|
||||||
}
|
}
|
||||||
Current.player().addReward(R);
|
if (rewardActor != null) rewardActor.remove();
|
||||||
if (usingShards) {
|
rewardActor = new RewardActor(currentReward, true, null, true);
|
||||||
|
rewardActor.flip(); //Make it flip so it draws visual attention, why not.
|
||||||
|
rewardActor.setBounds(rewardDummy.getX(), rewardDummy.getY(), rewardDummy.getWidth(), rewardDummy.getHeight());
|
||||||
|
stage.addActor(rewardActor);
|
||||||
|
|
||||||
|
acceptReward.setVisible(true);
|
||||||
|
declineReward.setVisible(true);
|
||||||
|
exitSmith.setDisabled(true);
|
||||||
|
disablePullButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void acceptSmithing() {
|
||||||
|
if (paidInShards) {
|
||||||
Current.player().takeShards(currentShardPrice);
|
Current.player().takeShards(currentShardPrice);
|
||||||
} else {
|
} else {
|
||||||
Current.player().takeGold(currentPrice);
|
Current.player().takeGold(currentPrice);
|
||||||
}
|
}
|
||||||
if (Current.player().getGold() < currentPrice) pullUsingGold.setDisabled(true);
|
|
||||||
if (Current.player().getShards() < currentShardPrice) pullUsingShards.setDisabled(true);
|
Current.player().addReward(currentReward);
|
||||||
|
|
||||||
|
clearReward();
|
||||||
|
updatePullButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void declineSmithing() {
|
||||||
|
// Decline the smith reward for 10% of original price
|
||||||
|
float priceAdjustment = .10f;
|
||||||
|
if (paidInShards) {
|
||||||
|
Current.player().takeShards((int)(currentShardPrice * priceAdjustment));
|
||||||
|
} else {
|
||||||
|
Current.player().takeGold((int)(currentPrice * priceAdjustment));
|
||||||
|
}
|
||||||
|
|
||||||
|
clearReward();
|
||||||
|
updatePullButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearReward() {
|
||||||
if (rewardActor != null) rewardActor.remove();
|
if (rewardActor != null) rewardActor.remove();
|
||||||
rewardActor = new RewardActor(R, true, null, true);
|
currentReward = null;
|
||||||
rewardActor.flip(); //Make it flip so it draws visual attention, why not.
|
}
|
||||||
rewardActor.setBounds(rewardDummy.getX(), rewardDummy.getY(), rewardDummy.getWidth(), rewardDummy.getHeight());
|
|
||||||
stage.addActor(rewardActor);
|
|
||||||
|
private void updatePullButtons() {
|
||||||
|
pullUsingGold.setDisabled(Current.player().getGold() < currentPrice);
|
||||||
|
pullUsingShards.setDisabled(Current.player().getShards() < currentShardPrice);
|
||||||
|
|
||||||
|
acceptReward.setVisible(false);
|
||||||
|
declineReward.setVisible(false);
|
||||||
|
|
||||||
|
exitSmith.setDisabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disablePullButtons() {
|
||||||
|
pullUsingGold.setDisabled(true);
|
||||||
|
pullUsingShards.setDisabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -169,12 +169,34 @@
|
|||||||
"y": 5,
|
"y": 5,
|
||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 20
|
"height": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"selectable": true,
|
||||||
|
"name": "accept",
|
||||||
|
"text": "Take",
|
||||||
|
"binding": "Use",
|
||||||
|
"x": 343,
|
||||||
|
"y": 173,
|
||||||
|
"width": 60,
|
||||||
|
"height": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"selectable": true,
|
||||||
|
"name": "decline",
|
||||||
|
"text": "Refund",
|
||||||
|
"binding": "Back",
|
||||||
|
"x": 405,
|
||||||
|
"y": 173,
|
||||||
|
"width": 60,
|
||||||
|
"height": 20
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Label",
|
"type": "Label",
|
||||||
"name": "poolSize",
|
"name": "poolSize",
|
||||||
"x": 360,
|
"x": 360,
|
||||||
"y": 180,
|
"y": 192,
|
||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 20
|
"height": 20
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -174,12 +174,34 @@
|
|||||||
"y": 75,
|
"y": 75,
|
||||||
"width": 90,
|
"width": 90,
|
||||||
"height": 20
|
"height": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"selectable": true,
|
||||||
|
"name": "accept",
|
||||||
|
"text": "Take",
|
||||||
|
"binding": "Use",
|
||||||
|
"x": 2,
|
||||||
|
"y": 142,
|
||||||
|
"width": 60,
|
||||||
|
"height": 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"selectable": true,
|
||||||
|
"name": "decline",
|
||||||
|
"text": "Refund",
|
||||||
|
"binding": "Back",
|
||||||
|
"x": 70,
|
||||||
|
"y": 142,
|
||||||
|
"width": 60,
|
||||||
|
"height": 20
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Label",
|
"type": "Label",
|
||||||
"name": "poolSize",
|
"name": "poolSize",
|
||||||
"x": 16,
|
"x": 16,
|
||||||
"y": 150,
|
"y": 163,
|
||||||
"width": 97,
|
"width": 97,
|
||||||
"height": 20
|
"height": 20
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user