v0.2.3e: refactored quick slot button, should now support multiple instances of itself tied to different quickslots, needs testing

This commit is contained in:
Evan Debenham 2015-01-20 17:26:53 -05:00
parent 18580f7f0b
commit 2b44154ac1
16 changed files with 86 additions and 82 deletions

View File

@ -23,7 +23,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -86,7 +86,7 @@ public class Bones {
item = hero.belongings.misc2; item = hero.belongings.misc2;
break; break;
case 4: case 4:
item = QuickSlot.getItem(); item = Dungeon.quickslot.randomNonePlaceholder();
break; break;
} }
if (item != null && !item.bones) if (item != null && !item.bones)

View File

@ -3,6 +3,7 @@ package com.shatteredpixel.shatteredpixeldungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.watabou.utils.Bundlable; import com.watabou.utils.Bundlable;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -77,6 +78,16 @@ public class QuickSlot {
setSlot( i , placeholder ); setSlot( i , placeholder );
} }
public Item randomNonePlaceholder(){
ArrayList<Item> result = new ArrayList<Item>();
for (int i = 0; i < slots.size(); i ++)
if (slots.get(i) != null && !isPlaceholder(i))
result.add(slots.get(i));
return Random.element(result);
}
private final String PLACEHOLDERS = "placeholders"; private final String PLACEHOLDERS = "placeholders";
private final String PLACEMENTS = "placements"; private final String PLACEMENTS = "placements";

View File

@ -98,7 +98,7 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage; import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect; import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect;
@ -879,7 +879,7 @@ public class Hero extends Char {
wand.curCharges++; wand.curCharges++;
if (Dungeon.quickslot.contains(wand)) { if (Dungeon.quickslot.contains(wand)) {
QuickSlot.refresh(); QuickSlotButton.refresh();
} }
ScrollOfRecharging.charge( this ); ScrollOfRecharging.charge( this );

View File

@ -21,14 +21,12 @@ import java.util.ArrayList;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShaftParticle;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite.Glowing;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils; import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
@ -111,7 +109,7 @@ public class DewVial extends Item {
Sample.INSTANCE.play( Assets.SND_DRINK ); Sample.INSTANCE.play( Assets.SND_DRINK );
hero.sprite.operate( hero.pos ); hero.sprite.operate( hero.pos );
QuickSlot.refresh(); QuickSlotButton.refresh();
} else { } else {
@ -125,7 +123,7 @@ public class DewVial extends Item {
} }
} }
public void empty() {volume = 0; QuickSlot.refresh();} public void empty() {volume = 0; QuickSlotButton.refresh();}
@Override @Override
public boolean isUpgradable() { public boolean isUpgradable() {
@ -150,12 +148,12 @@ public class DewVial extends Item {
GLog.p( TXT_FULL ); GLog.p( TXT_FULL );
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
} }
public void fill() { public void fill() {
volume = MAX_VOLUME; volume = MAX_VOLUME;
QuickSlot.refresh(); QuickSlotButton.refresh();
} }
//removed as people need a bigger distinction to realize the dew vial doesn't revive. //removed as people need a bigger distinction to realize the dew vial doesn't revive.

View File

@ -32,7 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MissileSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.MissileSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils; import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
@ -179,7 +179,7 @@ public class Item implements Bundlable {
items.add( this ); items.add( this );
Dungeon.quickslot.replaceSimilar(this); Dungeon.quickslot.replaceSimilar(this);
QuickSlot.refresh(); QuickSlotButton.refresh();
Collections.sort( items, itemComparator ); Collections.sort( items, itemComparator );
return true; return true;
@ -234,12 +234,12 @@ public class Item implements Bundlable {
public final Item detachAll( Bag container ) { public final Item detachAll( Bag container ) {
Dungeon.quickslot.clearItem( this ); Dungeon.quickslot.clearItem( this );
QuickSlot.refresh(); QuickSlotButton.refresh();
for (Item item : container.items) { for (Item item : container.items) {
if (item == this) { if (item == this) {
container.items.remove( this ); container.items.remove(this);
item.onDetach( ); item.onDetach();
return this; return this;
} else if (item instanceof Bag) { } else if (item instanceof Bag) {
Bag bag = (Bag)item; Bag bag = (Bag)item;
@ -398,7 +398,7 @@ public class Item implements Bundlable {
public void updateQuickslot() { public void updateQuickslot() {
if (Dungeon.quickslot.contains( this )) { if (Dungeon.quickslot.contains( this )) {
QuickSlot.refresh(); QuickSlotButton.refresh();
} }
} }
@ -455,7 +455,7 @@ public class Item implements Bundlable {
user.busy(); user.busy();
Char enemy = Actor.findChar( cell ); Char enemy = Actor.findChar( cell );
QuickSlot.target( this, enemy ); QuickSlotButton.target(enemy);
float delay = TIME_TO_THROW; float delay = TIME_TO_THROW;
if (this instanceof MissileWeapon) { if (this instanceof MissileWeapon) {

View File

@ -22,7 +22,7 @@ import java.util.ArrayList;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -61,7 +61,7 @@ public class KindOfWeapon extends EquipableItem {
hero.belongings.weapon = this; hero.belongings.weapon = this;
activate( hero ); activate( hero );
QuickSlot.refresh(); QuickSlotButton.refresh();
cursedKnown = true; cursedKnown = true;
if (cursed) { if (cursed) {

View File

@ -4,7 +4,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -60,7 +60,7 @@ public class CapeOfThorns extends Artifact {
BuffIndicator.refreshHero(); BuffIndicator.refreshHero();
GLog.w("Your Cape becomes inert again."); GLog.w("Your Cape becomes inert again.");
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
} }
spend(TICK); spend(TICK);
return true; return true;
@ -92,7 +92,7 @@ public class CapeOfThorns extends Artifact {
} }
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
return damage; return damage;
} }

View File

@ -8,7 +8,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.noosa.tweeners.AlphaTweener;
@ -185,7 +185,7 @@ public class CloakOfShadows extends Artifact {
if (cooldown > 0) if (cooldown > 0)
cooldown --; cooldown --;
QuickSlot.refresh(); QuickSlotButton.refresh();
spend( TICK ); spend( TICK );
@ -227,7 +227,7 @@ public class CloakOfShadows extends Artifact {
GLog.p("Your Cloak Grows Stronger!"); GLog.p("Your Cloak Grows Stronger!");
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
spend( TICK ); spend( TICK );
@ -247,7 +247,7 @@ public class CloakOfShadows extends Artifact {
cooldown = 10 - (level / 3); cooldown = 10 - (level / 3);
QuickSlot.refresh(); QuickSlotButton.refresh();
super.detach(); super.detach();
} }
} }

View File

@ -19,7 +19,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest; import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
@ -211,7 +211,7 @@ public class DriedRose extends Artifact {
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
spend( TICK ); spend( TICK );

View File

@ -10,7 +10,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
@ -202,7 +202,7 @@ public class TimekeepersHourglass extends Artifact {
} else if (cursed && Random.Int(10) == 0) } else if (cursed && Random.Int(10) == 0)
((Hero) target).spend( TICK ); ((Hero) target).spend( TICK );
QuickSlot.refresh(); QuickSlotButton.refresh();
spend( TICK ); spend( TICK );
@ -226,7 +226,7 @@ public class TimekeepersHourglass extends Artifact {
target.invisible++; target.invisible++;
QuickSlot.refresh(); QuickSlotButton.refresh();
Dungeon.observe(); Dungeon.observe();
@ -262,7 +262,7 @@ public class TimekeepersHourglass extends Artifact {
charge --; charge --;
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
if (charge <= 0){ if (charge <= 0){
detach(); detach();
@ -301,7 +301,7 @@ public class TimekeepersHourglass extends Artifact {
GameScene.freezeEmitters = false; GameScene.freezeEmitters = false;
charge = 0; charge = 0;
QuickSlot.refresh(); QuickSlotButton.refresh();
super.detach(); super.detach();
activeBuff = null; activeBuff = null;
} }

View File

@ -13,7 +13,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMappi
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
@ -197,7 +197,7 @@ public class UnstableSpellbook extends Artifact {
} }
} }
QuickSlot.refresh(); QuickSlotButton.refresh();
spend( TICK ); spend( TICK );

View File

@ -39,7 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Callback; import com.watabou.utils.Callback;
@ -410,7 +410,7 @@ public abstract class Wand extends KindOfWeapon {
final int cell = Ballistica.cast( curUser.pos, target, true, curWand.hitChars ); final int cell = Ballistica.cast( curUser.pos, target, true, curWand.hitChars );
curUser.sprite.zap( cell ); curUser.sprite.zap( cell );
QuickSlot.target( curItem, Actor.findChar( cell ) ); QuickSlotButton.target(Actor.findChar(cell));
if (curWand.curCharges > 0) { if (curWand.curCharges > 0) {

View File

@ -22,7 +22,6 @@ import java.io.IOException;
import com.shatteredpixel.shatteredpixeldungeon.*; import com.shatteredpixel.shatteredpixeldungeon.*;
import com.watabou.noosa.Camera; import com.watabou.noosa.Camera;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.noosa.Gizmo;
import com.watabou.noosa.Group; import com.watabou.noosa.Group;
import com.watabou.noosa.SkinnedBlock; import com.watabou.noosa.SkinnedBlock;
import com.watabou.noosa.Visual; import com.watabou.noosa.Visual;
@ -57,7 +56,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Banner;
import com.shatteredpixel.shatteredpixeldungeon.ui.BusyIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BusyIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.GameLog; import com.shatteredpixel.shatteredpixeldungeon.ui.GameLog;
import com.shatteredpixel.shatteredpixeldungeon.ui.HealthIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.HealthIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.StatusPane; import com.shatteredpixel.shatteredpixeldungeon.ui.StatusPane;
import com.shatteredpixel.shatteredpixeldungeon.ui.Toast; import com.shatteredpixel.shatteredpixeldungeon.ui.Toast;
import com.shatteredpixel.shatteredpixeldungeon.ui.Toolbar; import com.shatteredpixel.shatteredpixeldungeon.ui.Toolbar;
@ -597,7 +596,7 @@ public class GameScene extends PixelScene {
public static void ready() { public static void ready() {
selectCell( defaultCellListener ); selectCell( defaultCellListener );
QuickSlot.cancel(); QuickSlotButton.cancel();
} }
private static final CellSelector.Listener defaultCellListener = new CellSelector.Listener() { private static final CellSelector.Listener defaultCellListener = new CellSelector.Listener() {

View File

@ -28,28 +28,30 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
//TODO: add proper multi-quickslot functionality. //TODO: investigate targeting with multiple quickslots
public class QuickSlot extends Button implements WndBag.Listener { public class QuickSlotButton extends Button implements WndBag.Listener {
private static final String TXT_SELECT_ITEM = "Select an item for the quickslot"; private static final String TXT_SELECT_ITEM = "Select an item for the quickslot";
private static QuickSlot instance; private static QuickSlotButton[] instance = new QuickSlotButton[4];
private int slotNum;
private Item itemInSlot; private Item itemInSlot;
private ItemSlot slot; private ItemSlot slot;
private Image crossB; private static Image crossB;
private Image crossM; private static Image crossM;
private boolean targeting = false; private static boolean targeting = false;
private Item lastItem = null; private Item lastItem = null;
private Char lastTarget= null; private static Char lastTarget= null;
public QuickSlot() { public QuickSlotButton( int slotNum ) {
super(); super();
item( select() ); this.slotNum = slotNum;
item( select( slotNum ) );
instance = this; instance[slotNum] = this;
} }
@Override @Override
@ -72,18 +74,14 @@ public class QuickSlot extends Button implements WndBag.Listener {
if (targeting) { if (targeting) {
GameScene.handleCell( lastTarget.pos ); GameScene.handleCell( lastTarget.pos );
} else { } else {
Item item = select(); Item item = select(slotNum);
if (item == lastItem) { useTargeting();
useTargeting();
} else {
lastItem = item;
}
item.execute( Dungeon.hero ); item.execute( Dungeon.hero );
} }
} }
@Override @Override
protected boolean onLongClick() { protected boolean onLongClick() {
return QuickSlot.this.onLongClick(); return QuickSlotButton.this.onLongClick();
} }
@Override @Override
protected void onTouchDown() { protected void onTouchDown() {
@ -124,21 +122,15 @@ public class QuickSlot extends Button implements WndBag.Listener {
GameScene.selectItem( this, WndBag.Mode.QUICKSLOT, TXT_SELECT_ITEM ); GameScene.selectItem( this, WndBag.Mode.QUICKSLOT, TXT_SELECT_ITEM );
return true; return true;
} }
@SuppressWarnings("unchecked")
private static Item select() {
return Dungeon.quickslot.getItem(0);
}
public static Item getItem(){ private static Item select(int slotNum){
Item item = select(); return Dungeon.quickslot.getItem( slotNum );
return (item != null && item.quantity() != 0)? item : null; }
}
@Override @Override
public void onSelect( Item item ) { public void onSelect( Item item ) {
if (item != null) { if (item != null) {
Dungeon.quickslot.setSlot( 0 , item ); Dungeon.quickslot.setSlot( slotNum , item );
refresh(); refresh();
} }
} }
@ -181,24 +173,26 @@ public class QuickSlot extends Button implements WndBag.Listener {
} }
public static void refresh() { public static void refresh() {
if (instance != null) { for (int i = 0; i < instance.length; i++) {
instance.item( select() ); if (instance[i] != null) {
instance[i].item(select(i));
}
} }
} }
public static void target( Item item, Char target ) { public static void target( Char target ) {
if (item == instance.lastItem && target != Dungeon.hero) { if (target != Dungeon.hero) {
instance.lastTarget = target; lastTarget = target;
HealthIndicator.instance.target( target ); HealthIndicator.instance.target( target );
} }
} }
public static void cancel() { public static void cancel() {
if (instance != null && instance.targeting) { if (targeting) {
instance.crossB.visible = false; crossB.visible = false;
instance.crossM.remove(); crossM.remove();
instance.targeting = false; targeting = false;
} }
} }
} }

View File

@ -275,17 +275,19 @@ public class Toolbar extends Component {
private static class QuickslotTool extends Tool { private static class QuickslotTool extends Tool {
private QuickSlot slot; private QuickSlotButton slot;
private int slotNum;
public QuickslotTool( int x, int y, int width, int height ) { public QuickslotTool( int x, int y, int width, int height, int slotNum ) {
super( x, y, width, height ); super( x, y, width, height );
this.slotNum = slotNum;
} }
@Override @Override
protected void createChildren() { protected void createChildren() {
super.createChildren(); super.createChildren();
slot = new QuickSlot(); slot = new QuickSlotButton( slotNum );
add( slot ); add( slot );
} }

View File

@ -42,7 +42,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.ItemSlot;
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils; import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
import com.watabou.gltextures.TextureCache; import com.watabou.gltextures.TextureCache;
import com.watabou.noosa.BitmapText; import com.watabou.noosa.BitmapText;
@ -396,7 +396,7 @@ public class WndBag extends WndTabbed {
if (listener == null && item.defaultAction != null) { if (listener == null && item.defaultAction != null) {
hide(); hide();
Dungeon.quickslot.setSlot( 0 , item ); Dungeon.quickslot.setSlot( 0 , item );
QuickSlot.refresh(); QuickSlotButton.refresh();
return true; return true;
} else { } else {
return false; return false;