diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java index e4828f32f..5c712363a 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java @@ -60,29 +60,35 @@ public class TimekeepersHourglass extends Artifact { @Override public void execute( Hero hero, String action ) { if (action.equals(AC_ACTIVATE)){ - GameScene.show( - new WndOptions(TXT_HGLASS, TXT_DESC, TXT_STASIS, TXT_FREEZE) { - @Override - protected void onSelect(int index) { - if (index == 0){ - GLog.i("Everything seems to fly around you."); - GameScene.flash( 0xFFFFFF ); - Sample.INSTANCE.play( Assets.SND_TELEPORT ); - activeBuff = new timeStasis(); - activeBuff.attachTo(Dungeon.hero); - } else if (index == 1){ - GLog.i("everything around you suddenly freezes."); - GameScene.flash( 0xFFFFFF ); - Sample.INSTANCE.play( Assets.SND_TELEPORT ); + if (!isEquipped( hero )) GLog.i("You need to equip your hourglass to do that."); + else if (activeBuff != null) GLog.i("Your hourglass is already in use."); + else if (charge <= 1) GLog.i("Your hourglass hasn't recharged enough to be usable yet."); + else GameScene.show( + new WndOptions(TXT_HGLASS, TXT_DESC, TXT_STASIS, TXT_FREEZE) { + @Override + protected void onSelect(int index) { + if (index == 0) { + GLog.i("Everything seems to blur while moving around you."); + GameScene.flash(0xFFFFFF); + Sample.INSTANCE.play(Assets.SND_TELEPORT); + + activeBuff = new timeStasis(); + activeBuff.attachTo(Dungeon.hero); + } else if (index == 1) { + GLog.i("everything around you suddenly freezes."); + GameScene.flash(0xFFFFFF); + Sample.INSTANCE.play(Assets.SND_TELEPORT); + + activeBuff = new timeFreeze(); + activeBuff.attachTo(Dungeon.hero); + } - activeBuff = new timeFreeze(); - activeBuff.attachTo(Dungeon.hero); } - }; - } - ); + ; + } + ); } else super.execute(hero, action); } @@ -94,6 +100,18 @@ public class TimekeepersHourglass extends Artifact { activeBuff.attachTo(ch); } + @Override + public boolean doUnequip(Hero hero, boolean collect, boolean single) { + if (super.doUnequip(hero, collect, single)){ + if (activeBuff != null){ + activeBuff.detach(); + activeBuff = null; + } + return true; + } else + return false; + } + @Override protected ArtifactBuff passiveBuff() { return new hourglassRecharge(); @@ -126,7 +144,9 @@ public class TimekeepersHourglass extends Artifact { super.storeInBundle(bundle); bundle.put( CHARGECAP, chargeCap ); bundle.put( SANDBAGS, sandBags ); - bundle.put( BUFF , activeBuff ); + + if (activeBuff != null) + bundle.put( BUFF , activeBuff ); } @Override @@ -134,7 +154,18 @@ public class TimekeepersHourglass extends Artifact { super.restoreFromBundle(bundle); chargeCap = bundle.getInt( CHARGECAP ); sandBags = bundle.getInt( SANDBAGS ); - activeBuff = (ArtifactBuff)bundle.get( BUFF ); + + //these buffs belong to hourglass, need to handle unbundling within the hourglass class. + if (bundle.contains( BUFF )){ + Bundle buffBundle = bundle.getBundle( BUFF ); + + if (buffBundle.contains( timeFreeze.PARTIALTIME )) + activeBuff = new timeFreeze(); + else + activeBuff = new timeStasis(); + + activeBuff.restoreFromBundle(buffBundle); + } } public class hourglassRecharge extends ArtifactBuff { @@ -162,8 +193,6 @@ public class TimekeepersHourglass extends Artifact { } public class timeStasis extends ArtifactBuff { - //todo: add visuals - @Override public boolean attachTo(Char target) { @@ -181,6 +210,8 @@ public class TimekeepersHourglass extends Artifact { QuickSlot.refresh(); + Dungeon.observe(); + return super.attachTo(target); }