From fbcfc590060c2926099ff8c01758387b533208d4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 16 Apr 2024 14:10:03 -0400 Subject: [PATCH] v2.4.0: improved item category ordering a bit with sub orderings --- .../items/Generator.java | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java index 14b9e4a96..f95bc0649 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -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> 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 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();