v2.4.0: trinket selection window now remembers trinkets if game is quit
This commit is contained in:
+40
-12
@@ -37,8 +37,10 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.IconTitle;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.IconTitle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndInfoItem;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndInfoItem;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost;
|
||||||
|
import com.watabou.utils.Bundle;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
public class TrinketCatalyst extends Item {
|
public class TrinketCatalyst extends Item {
|
||||||
|
|
||||||
@@ -58,6 +60,27 @@ public class TrinketCatalyst extends Item {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ArrayList<Trinket> rolledTrinkets = new ArrayList<>();
|
||||||
|
|
||||||
|
private static final String ROLLED_TRINKETS = "rolled_trinkets";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void storeInBundle(Bundle bundle) {
|
||||||
|
super.storeInBundle(bundle);
|
||||||
|
if (!rolledTrinkets.isEmpty()){
|
||||||
|
bundle.put(ROLLED_TRINKETS, rolledTrinkets);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void restoreFromBundle(Bundle bundle) {
|
||||||
|
super.restoreFromBundle(bundle);
|
||||||
|
rolledTrinkets.clear();
|
||||||
|
if (bundle.contains(ROLLED_TRINKETS)){
|
||||||
|
rolledTrinkets.addAll((Collection<Trinket>) ((Collection<?>)bundle.getCollection( ROLLED_TRINKETS )));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe {
|
public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -67,18 +90,22 @@ public class TrinketCatalyst extends Item {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int cost(ArrayList<Item> ingredients) {
|
public int cost(ArrayList<Item> ingredients) {
|
||||||
|
if (ingredients.get(0) instanceof TrinketCatalyst && !((TrinketCatalyst) ingredients.get(0)).rolledTrinkets.isEmpty()){
|
||||||
|
return 0; //costs 0 if rolledTrinkets has items as the player already paid 6 energy
|
||||||
|
}
|
||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item brew(ArrayList<Item> ingredients) {
|
public Item brew(ArrayList<Item> ingredients) {
|
||||||
ingredients.get(0).quantity(0);
|
|
||||||
|
|
||||||
//we silently re-add the catalyst so that we can clear it when a trinket is selected
|
//we silently re-add the catalyst so that we can clear it when a trinket is selected
|
||||||
//this way player isn't totally screwed if they quit the game while selecting
|
//this way player isn't totally screwed if they quit the game while selecting
|
||||||
new TrinketCatalyst().collect();
|
TrinketCatalyst newCata = (TrinketCatalyst) ingredients.get(0).duplicate();
|
||||||
|
newCata.collect();
|
||||||
|
|
||||||
ShatteredPixelDungeon.scene().addToFront(new WndTrinket());
|
ingredients.get(0).quantity(0);
|
||||||
|
|
||||||
|
ShatteredPixelDungeon.scene().addToFront(new WndTrinket(newCata));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,9 +124,7 @@ public class TrinketCatalyst extends Item {
|
|||||||
|
|
||||||
private static final int NUM_TRINKETS = 3;
|
private static final int NUM_TRINKETS = 3;
|
||||||
|
|
||||||
public WndTrinket(){
|
public WndTrinket( TrinketCatalyst cata ){
|
||||||
|
|
||||||
TrinketCatalyst cata = new TrinketCatalyst();
|
|
||||||
|
|
||||||
IconTitle titlebar = new IconTitle();
|
IconTitle titlebar = new IconTitle();
|
||||||
titlebar.icon(new ItemSprite(cata));
|
titlebar.icon(new ItemSprite(cata));
|
||||||
@@ -112,17 +137,20 @@ public class TrinketCatalyst extends Item {
|
|||||||
message.setPos(0, titlebar.bottom() + GAP);
|
message.setPos(0, titlebar.bottom() + GAP);
|
||||||
add( message );
|
add( message );
|
||||||
|
|
||||||
for (int i = 1; i <= NUM_TRINKETS; i++){
|
//roll new trinkets if trinkets were not already rolled
|
||||||
|
while (cata.rolledTrinkets.size() < NUM_TRINKETS){
|
||||||
|
cata.rolledTrinkets.add((Trinket) Generator.random(Generator.Category.TRINKET));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < NUM_TRINKETS; i++){
|
||||||
ItemButton btnReward = new ItemButton(){
|
ItemButton btnReward = new ItemButton(){
|
||||||
@Override
|
@Override
|
||||||
protected void onClick() {
|
protected void onClick() {
|
||||||
ShatteredPixelDungeon.scene().addToFront(new RewardWindow(item()));
|
ShatteredPixelDungeon.scene().addToFront(new RewardWindow(item()));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//TODO we need to persist these through save/load in case someone quits when the window is up
|
btnReward.item(cata.rolledTrinkets.get(i));
|
||||||
//alternatively we could just 'peek' at the items and then actually remove them when one is awarded.
|
btnReward.setRect( (i+1)*(WIDTH - BTN_GAP) / NUM_TRINKETS - BTN_SIZE, message.top() + message.height() + BTN_GAP, BTN_SIZE, BTN_SIZE );
|
||||||
btnReward.item(Generator.random(Generator.Category.TRINKET));
|
|
||||||
btnReward.setRect( i*(WIDTH - BTN_GAP) / NUM_TRINKETS - BTN_SIZE, message.top() + message.height() + BTN_GAP, BTN_SIZE, BTN_SIZE );
|
|
||||||
add( btnReward );
|
add( btnReward );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user