v2.4.0: improved item category ordering a bit with sub orderings
This commit is contained in:
@@ -45,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.UnstableSpellbook;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty;
|
||||
@@ -61,6 +62,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticG
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.Elixir;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfAccuracy;
|
||||
@@ -89,6 +92,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.spells.Spell;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAggression;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfAugmentation;
|
||||
@@ -111,6 +115,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.RatSkull;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.ThirteenLeafClover;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrapMechanism;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.Trinket;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfCorrosion;
|
||||
@@ -191,6 +196,8 @@ import com.watabou.utils.GameMath;
|
||||
import com.watabou.utils.Random;
|
||||
import com.watabou.utils.Reflection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
@@ -262,13 +269,38 @@ public class Generator {
|
||||
this.secondProb = secondProb;
|
||||
this.superClass = superClass;
|
||||
}
|
||||
|
||||
|
||||
//some generator categories can have ordering within that category as well
|
||||
// note that sub category ordering doesn't need to always include items that belong
|
||||
// to that categories superclass, e.g. bombs are ordered within thrown weapons
|
||||
private static HashMap<Class, ArrayList<Class>> subOrderings = new HashMap<>();
|
||||
static {
|
||||
subOrderings.put(Trinket.class, new ArrayList<>(Arrays.asList(Trinket.class, TrinketCatalyst.class)));
|
||||
subOrderings.put(MissileWeapon.class, new ArrayList<>(Arrays.asList(MissileWeapon.class, Bomb.class)));
|
||||
subOrderings.put(Potion.class, new ArrayList<>(Arrays.asList(Potion.class, ExoticPotion.class, Brew.class, Elixir.class, LiquidMetal.class)));
|
||||
subOrderings.put(Scroll.class, new ArrayList<>(Arrays.asList(Scroll.class, ExoticScroll.class, Spell.class, ArcaneResin.class)));
|
||||
}
|
||||
|
||||
//in case there are multiple matches, this will return the latest match
|
||||
public static int order( Item item ) {
|
||||
int catResult = -1, subResult = 0;
|
||||
for (int i=0; i < values().length; i++) {
|
||||
if (values()[i].superClass.isInstance( item )) {
|
||||
return i;
|
||||
ArrayList<Class> subOrdering = subOrderings.get(values()[i].superClass);
|
||||
if (subOrdering != null){
|
||||
for (int j=0; j < subOrdering.size(); j++){
|
||||
if (subOrdering.get(j).isInstance(item)){
|
||||
catResult = i;
|
||||
subResult = j;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (values()[i].superClass.isInstance(item)) {
|
||||
catResult = i;
|
||||
subResult = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (catResult != -1) return catResult*100 + subResult;
|
||||
|
||||
//items without a category-defined order are sorted based on the spritesheet
|
||||
return Short.MAX_VALUE+item.image();
|
||||
|
||||
Reference in New Issue
Block a user