v2.5.0: more thoroughly filled out equipment and consumable catalog tabs

This commit is contained in:
Evan Debenham
2024-06-11 15:35:29 -04:00
parent 6a313b1355
commit a3f2ab7a89
15 changed files with 216 additions and 58 deletions

View File

@@ -122,7 +122,9 @@ windows.wndjournal$notestab.landmarks=Landmarks
windows.wndjournal$catalogtab.title=Catalogs
windows.wndjournal$catalogtab.title_equipment=Equipment
windows.wndjournal$catalogtab.title_consumables=Consumables
windows.wndjournal$catalogtab.not_seen=You haven't identified this item yet.
windows.wndjournal$catalogtab.not_seen_item=You haven't found and identified that item in any of your runs yet.
windows.wndjournal$catalogtab.not_seen_enchantment=You haven't found and identified a weapon with that enchantmet in any of your runs yet.
windows.wndjournal$catalogtab.not_seen_glyph=You haven't found and identified an armor with that glyph in any of your runs yet.
windows.wndjournal$loretab.title=Documents
windows.wndkeybindings.controller_info=The left stick moves your character\nThe right stick controls an on-screen pointer

View File

@@ -71,6 +71,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortswor
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpike;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.utils.DeviceCompat;
@@ -164,6 +165,7 @@ public enum HeroClass {
if (hero.belongings.armor != null){
hero.belongings.armor.affixSeal(new BrokenSeal());
Catalog.setSeen(BrokenSeal.class); //as it's not added to the inventory
}
new PotionOfHealing().identify();

View File

@@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
@@ -49,6 +50,7 @@ public class Dewdrop extends Item {
public boolean doPickUp(Hero hero, int pos) {
Waterskin flask = hero.belongings.getItem( Waterskin.class );
Catalog.setSeen(getClass());
if (flask != null && !flask.isFull()){

View File

@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.noosa.audio.Sample;
@@ -54,6 +55,8 @@ public class EnergyCrystal extends Item {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Dungeon.energy += quantity;
//TODO track energy collected maybe? We do already track recipes crafted though..

View File

@@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
@@ -57,7 +58,9 @@ public class Gold extends Item {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Dungeon.gold += quantity;
Statistics.goldCollected += quantity;
Badges.validateGoldCollected();

View File

@@ -268,7 +268,7 @@ public class Item implements Bundlable {
}
public boolean collect() {
public final boolean collect() {
return collect( Dungeon.hero.belongings.backpack );
}

View File

@@ -57,8 +57,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Stone;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Swiftness;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Thorns;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfArcana;
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.ParchmentScrap;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
@@ -201,6 +203,26 @@ public class Armor extends EquipableItem {
}
}
@Override
public boolean collect(Bag container) {
if(super.collect(container)){
if (isIdentified() && glyph != null){
Catalog.setSeen(glyph.getClass());
}
return true;
} else {
return false;
}
}
@Override
public Item identify(boolean byHero) {
if (glyph != null && byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(glyph.getClass());
}
return super.identify(byHero);
}
@Override
public boolean doEquip( Hero hero ) {
@@ -613,6 +635,10 @@ public class Armor extends EquipableItem {
if (seal != null){
seal.setGlyph(glyph);
}
if (isIdentified() && Dungeon.hero != null
&& Dungeon.hero.isAlive() && Dungeon.hero.belongings.contains(this)){
Catalog.setSeen(glyph.getClass());
}
return this;
}
@@ -660,7 +686,7 @@ public class Armor extends EquipableItem {
10 //3.33% each
};
private static final Class<?>[] curses = new Class<?>[]{
public static final Class<?>[] curses = new Class<?>[]{
AntiEntropy.class, Corrosion.class, Displacement.class, Metabolism.class,
Multiplicity.class, Stench.class, Overgrowth.class, Bulk.class
};

View File

@@ -53,6 +53,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRetributio
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPsionicBlast;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
@@ -489,6 +490,7 @@ public class DriedRose extends Artifact {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
DriedRose rose = hero.belongings.getItem( DriedRose.class );
if (rose == null){

View File

@@ -34,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
@@ -475,6 +476,7 @@ public class TimekeepersHourglass extends Artifact {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
TimekeepersHourglass hourglass = hero.belongings.getItem( TimekeepersHourglass.class );
if (hourglass != null && !hourglass.cursed) {
hourglass.upgrade();

View File

@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.keys;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
@@ -49,6 +50,7 @@ public abstract class Key extends Item {
@Override
public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
GameScene.pickUpJournal(this, pos);
WndJournal.last_index = 2;
Notes.add(this);

View File

@@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.duelist.ElementalStrike;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfArcana;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfForce;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfFuror;
@@ -58,6 +59,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Unstab
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Vampiric;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RunicBlade;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Scimitar;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@@ -176,6 +178,26 @@ abstract public class Weapon extends KindOfWeapon {
usesLeftToID = USES_TO_ID;
availableUsesToID = USES_TO_ID/2f;
}
@Override
public boolean collect(Bag container) {
if(super.collect(container)){
if (isIdentified() && enchantment != null){
Catalog.setSeen(enchantment.getClass());
}
return true;
} else {
return false;
}
}
@Override
public Item identify(boolean byHero) {
if (enchantment != null && byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(enchantment.getClass());
}
return super.identify(byHero);
}
@Override
public float accuracyFactor(Char owner, Char target) {
@@ -331,6 +353,10 @@ abstract public class Weapon extends KindOfWeapon {
if (ench == null || !ench.curse()) curseInfusionBonus = false;
enchantment = ench;
updateQuickslot();
if (isIdentified() && Dungeon.hero != null
&& Dungeon.hero.isAlive() && Dungeon.hero.belongings.contains(this)){
Catalog.setSeen(ench.getClass());
}
return this;
}
@@ -377,8 +403,8 @@ abstract public class Weapon extends KindOfWeapon {
40, //6.67% each
10 //3.33% each
};
private static final Class<?>[] curses = new Class<?>[]{
public static final Class<?>[] curses = new Class<?>[]{
Annoying.class, Displacing.class, Dazzling.class, Explosive.class,
Sacrificial.class, Wayward.class, Polarized.class, Friendly.class
};

View File

@@ -25,18 +25,19 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
import com.shatteredpixel.shatteredpixeldungeon.items.ArcaneResin;
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
import com.shatteredpixel.shatteredpixeldungeon.items.EnergyCrystal;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
import com.shatteredpixel.shatteredpixeldungeon.items.LiquidMetal;
import com.shatteredpixel.shatteredpixeldungeon.items.Stylus;
import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask;
import com.shatteredpixel.shatteredpixeldungeon.items.Torch;
import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.PotionBandolier;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder;
@@ -83,6 +84,11 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIc
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CeremonialCandle;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CorpseDust;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DarkGold;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DwarfToken;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.Embers;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
import com.shatteredpixel.shatteredpixeldungeon.items.remains.BowFragment;
@@ -104,6 +110,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.spells.UnstableSpell;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy;
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.utils.Bundle;
@@ -119,6 +126,8 @@ public enum Catalog {
//EQUIPMENT
MELEE_WEAPONS,
ARMOR,
ENCHANTMENTS,
GLYPHS,
THROWN_WEAPONS,
WANDS,
RINGS,
@@ -140,16 +149,16 @@ public enum Catalog {
SPELLS,
MISC_CONSUMABLES;
private LinkedHashMap<Class<? extends Item>, Boolean> seen = new LinkedHashMap<>();
private LinkedHashMap<Class<?>, Boolean> seen = new LinkedHashMap<>();
public Collection<Class<? extends Item>> items(){
public Collection<Class<?>> items(){
return seen.keySet();
}
//should only be used when initializing
private void addItems( Class<?>... items){
for (Class<?> item : items){
seen.put((Class<? extends Item>) item, false);
seen.put(item, false);
}
}
@@ -186,6 +195,16 @@ public enum Catalog {
THROWN_WEAPONS.addItems(Generator.Category.MIS_T4.classes);
THROWN_WEAPONS.addItems(Generator.Category.MIS_T5.classes);
ENCHANTMENTS.addItems(Weapon.Enchantment.common);
ENCHANTMENTS.addItems(Weapon.Enchantment.uncommon);
ENCHANTMENTS.addItems(Weapon.Enchantment.rare);
ENCHANTMENTS.addItems(Weapon.Enchantment.curses);
GLYPHS.addItems(Armor.Glyph.common);
GLYPHS.addItems(Armor.Glyph.uncommon);
GLYPHS.addItems(Armor.Glyph.rare);
GLYPHS.addItems(Armor.Glyph.curses);
WANDS.addItems(Generator.Category.WAND.classes);
RINGS.addItems(Generator.Category.RING.classes);
@@ -194,7 +213,7 @@ public enum Catalog {
TRINKETS.addItems(Generator.Category.TRINKET.classes);
MISC_EQUIPMENT.addItems( SpiritBow.class, Waterskin.class, VelvetPouch.class,
MISC_EQUIPMENT.addItems(BrokenSeal.class, SpiritBow.class, Waterskin.class, VelvetPouch.class,
PotionBandolier.class, ScrollHolder.class, MagicalHolster.class, Amulet.class);
@@ -232,6 +251,7 @@ public enum Catalog {
MISC_CONSUMABLES.addItems( Gold.class, EnergyCrystal.class, Dewdrop.class,
IronKey.class, GoldenKey.class, CrystalKey.class, SkeletonKey.class,
TrinketCatalyst.class, Stylus.class, Torch.class, Honeypot.class, Ankh.class,
CorpseDust.class, Embers.class, CeremonialCandle.class, DarkGold.class, DwarfToken.class,
GooBlob.class, TengusMask.class, MetalShard.class, KingsCrown.class,
LiquidMetal.class, ArcaneResin.class,
SealShard.class, BrokenStaff.class, CloakScrap.class, BowFragment.class, BrokenHilt.class);
@@ -253,6 +273,8 @@ public enum Catalog {
static {
equipmentCatalogs.add(MELEE_WEAPONS);
equipmentCatalogs.add(ARMOR);
equipmentCatalogs.add(ENCHANTMENTS);
equipmentCatalogs.add(GLYPHS);
equipmentCatalogs.add(THROWN_WEAPONS);
equipmentCatalogs.add(WANDS);
equipmentCatalogs.add(RINGS);
@@ -277,7 +299,7 @@ public enum Catalog {
consumableCatalogs.add(MISC_CONSUMABLES);
}
public static boolean isSeen(Class<? extends Item> itemClass){
public static boolean isSeen(Class<?> itemClass){
for (Catalog cat : values()) {
if (cat.seen.containsKey(itemClass)) {
return cat.seen.get(itemClass);
@@ -286,10 +308,10 @@ public enum Catalog {
return false;
}
public static void setSeen(Class<? extends Item> itemClass){
public static void setSeen(Class<?> cls){
for (Catalog cat : values()) {
if (cat.seen.containsKey(itemClass) && !cat.seen.get(itemClass)) {
cat.seen.put(itemClass, true);
if (cat.seen.containsKey(cls) && !cat.seen.get(cls)) {
cat.seen.put(cls, true);
Journal.saveNeeded = true;
}
}
@@ -305,15 +327,15 @@ public enum Catalog {
ArrayList<Class> seen = new ArrayList<>();
//if we have identified all items of a set, we use the badge to keep track instead.
if (!Badges.isUnlocked(Badges.Badge.ALL_ITEMS_IDENTIFIED)) {
//if (!Badges.isUnlocked(Badges.Badge.ALL_ITEMS_IDENTIFIED)) {
for (Catalog cat : values()) {
if (!Badges.isUnlocked(catalogBadges.get(cat))) {
for (Class<? extends Item> item : cat.items()) {
//if (!Badges.isUnlocked(catalogBadges.get(cat))) {
for (Class<?> item : cat.items()) {
if (cat.seen.get(item)) seen.add(item);
}
}
//}
}
}
//}
bundle.put( CATALOG_ITEMS, seen.toArray(new Class[0]) );
@@ -335,13 +357,13 @@ public enum Catalog {
}*/
//catalog-specific badge logic
/*for (Catalog cat : values()){
for (Catalog cat : values()){
if (Badges.isUnlocked(catalogBadges.get(cat))){
for (Class<? extends Item> item : cat.items()){
for (Class<?> item : cat.items()){
cat.seen.put(item, true);
}
}
}*/
}
//general save/load
if (bundle.contains(CATALOG_ITEMS)) {
@@ -351,7 +373,7 @@ public enum Catalog {
}
for (Catalog cat : values()) {
for (Class<? extends Item> item : cat.items()) {
for (Class<?> item : cat.items()) {
if (seenClasses.contains(item)) {
cat.seen.put(item, true);
}

View File

@@ -38,6 +38,7 @@ import com.watabou.glwrap.Matrix;
import com.watabou.glwrap.Vertexbuffer;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.MovieClip;
import com.watabou.noosa.NoosaScript;
import com.watabou.noosa.audio.Sample;
@@ -125,6 +126,16 @@ public class ItemSprite extends MovieClip {
}
}
@Override
public void copy(Image other) {
super.copy(other);
if (other instanceof ItemSprite && ((ItemSprite) other).glowing != null){
glow(((ItemSprite) other).glowing);
}
}
public void visible(boolean value){
this.visible = value;
if (emitter != null && !visible){

View File

@@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.watabou.noosa.ColorBlock;
import com.watabou.noosa.Image;
import com.watabou.noosa.ui.Component;
@@ -112,7 +113,13 @@ public class ScrollingGridPane extends ScrollPane {
public GridItem( Image icon ) {
super();
if (icon instanceof ItemSprite){
this.icon = new ItemSprite();
} else {
this.icon = new Image();
}
this.icon.copy(icon);
add(this.icon);
}
public void addSecondIcon( Image icon ){
@@ -133,9 +140,6 @@ public class ScrollingGridPane extends ScrollPane {
protected void createChildren() {
bg = new ColorBlock( 1, 1, 0x9953564D);
add(bg);
icon = new Image();
add( icon );
}
@Override

View File

@@ -25,10 +25,12 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
@@ -556,52 +558,101 @@ public class WndJournal extends WndTabbed {
}
private static void addGridItems( ScrollingGridPane grid, Collection<Class<? extends Item>> itemClasses) {
for (Class<? extends Item> itemClass : itemClasses) {
Item item = Reflection.newInstance(itemClass);
boolean itemSeen = Catalog.isSeen(itemClass);
private static void addGridItems( ScrollingGridPane grid, Collection<Class<?>> classes) {
for (Class<?> itemClass : classes) {
if (itemSeen) {
if (item instanceof Ring) {
((Ring) item).anonymize();
} else if (item instanceof Potion) {
((Potion) item).anonymize();
} else if (item instanceof Scroll) {
((Scroll) item).anonymize();
boolean seen = Catalog.isSeen(itemClass);;
Image sprite = null;
Image secondIcon = null;
String title = "";
String desc = "";
if (Item.class.isAssignableFrom(itemClass)) {
Item item = (Item) Reflection.newInstance(itemClass);
if (seen) {
if (item instanceof Ring) {
((Ring) item).anonymize();
} else if (item instanceof Potion) {
((Potion) item).anonymize();
} else if (item instanceof Scroll) {
((Scroll) item).anonymize();
}
}
sprite = new ItemSprite(item.image, seen ? item.glowing() : null);
if (!seen) {
sprite.lightness(0);
title = "???";
desc = Messages.get(CatalogTab.class, "not_seen_item");
} else {
title = Messages.titleCase(item.trueName());
desc = item instanceof ClassArmor ? item.desc() : item.info();
if (item.icon != -1) {
secondIcon = new Image(Assets.Sprites.ITEM_ICONS);
secondIcon.frame(ItemSpriteSheet.Icons.film.get(item.icon));
}
}
} else if (Weapon.Enchantment.class.isAssignableFrom(itemClass)){
Weapon.Enchantment ench = (Weapon.Enchantment) Reflection.newInstance(itemClass);
if (seen){
sprite = new ItemSprite(ItemSpriteSheet.WORN_SHORTSWORD, ench.glowing());
title = Messages.titleCase(ench.name());
desc = ench.desc();
} else {
sprite = new ItemSprite(ItemSpriteSheet.WORN_SHORTSWORD);
sprite.lightness(0f);
title = "???";
desc = Messages.get(CatalogTab.class, "not_seen_enchantment");
}
} else if (Armor.Glyph.class.isAssignableFrom(itemClass)){
Armor.Glyph glyph = (Armor.Glyph) Reflection.newInstance(itemClass);
if (seen){
sprite = new ItemSprite(ItemSpriteSheet.ARMOR_CLOTH, glyph.glowing());
title = Messages.titleCase(glyph.name());
desc = glyph.desc();
} else {
sprite = new ItemSprite(ItemSpriteSheet.ARMOR_CLOTH);
sprite.lightness(0f);
title = "???";
desc = Messages.get(CatalogTab.class, "not_seen_glyph");
}
}
Image sprite = new ItemSprite(item);
if (!itemSeen) sprite.lightness(0);
ScrollingGridPane.GridItem gridItem = new ScrollingGridPane.GridItem(
sprite) {
String finalTitle = title;
String finalDesc = desc;
ScrollingGridPane.GridItem gridItem = new ScrollingGridPane.GridItem(sprite) {
@Override
public boolean onClick(float x, float y) {
if (inside(x, y)) {
Image sprite = new Image(icon);
if (itemSeen) {
GameScene.show(new WndTitledMessage(sprite,
Messages.titleCase(item.trueName()),
item instanceof ClassArmor ? item.desc() : item.info()));
//TODO need to dupe!
Image sprite;
if (icon instanceof ItemSprite){
sprite = new ItemSprite();
sprite.copy(icon);
} else {
sprite.lightness(0);
GameScene.show(new WndTitledMessage(sprite,
"???",
Messages.get(CatalogTab.class, "not_seen")));
sprite = new Image(icon);
}
GameScene.show(new WndTitledMessage(sprite, finalTitle, finalDesc));
return true;
} else {
return false;
}
}
};
if (itemSeen) {
if (item.icon != -1) {
Image icon = new Image(Assets.Sprites.ITEM_ICONS);
icon.frame(ItemSpriteSheet.Icons.film.get(item.icon));
gridItem.addSecondIcon(icon);
}
} else {
if (secondIcon != null){
gridItem.addSecondIcon(secondIcon);
}
if (!seen) {
gridItem.hardLightBG(2f, 1f, 2f);
}
grid.addItem(gridItem);