v0.3.0: added support for callbacks in pushing, used in ethereal chains

This commit is contained in:
Evan Debenham 2015-05-25 20:37:16 -04:00
parent f16865aade
commit 7aab6a8452
2 changed files with 18 additions and 5 deletions

View File

@ -22,6 +22,7 @@ import com.watabou.noosa.Visual;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.watabou.utils.Callback;
import com.watabou.utils.PointF; import com.watabou.utils.PointF;
public class Pushing extends Actor { public class Pushing extends Actor {
@ -32,6 +33,8 @@ public class Pushing extends Actor {
private Effect effect; private Effect effect;
private Callback callback;
{ {
actPriority = Integer.MIN_VALUE; //it's a visual effect, gets priority no matter what actPriority = Integer.MIN_VALUE; //it's a visual effect, gets priority no matter what
} }
@ -40,6 +43,12 @@ public class Pushing extends Actor {
sprite = ch.sprite; sprite = ch.sprite;
this.from = from; this.from = from;
this.to = to; this.to = to;
this.callback = null;
}
public Pushing( Char ch, int from, int to, Callback callback ) {
this(ch, from, to);
this.callback = callback;
} }
@Override @Override
@ -100,6 +109,7 @@ public class Pushing extends Actor {
killAndErase(); killAndErase();
Actor.remove(Pushing.this); Actor.remove(Pushing.this);
if (callback != null) callback.call();
next(); next();
} }

View File

@ -126,11 +126,14 @@ public class EtherealChains extends Artifact {
curUser.busy(); curUser.busy();
curUser.sprite.parent.add(new Chains(curUser.pos, target, new Callback() { curUser.sprite.parent.add(new Chains(curUser.pos, target, new Callback() {
public void call() { public void call() {
Actor.add(new Pushing(curUser, curUser.pos, newHeroPos)); Actor.add(new Pushing(curUser, curUser.pos, newHeroPos, new Callback() {
public void call() {
Dungeon.level.press(newHeroPos, curUser);
}
}));
curUser.spendAndNext(1f);
curUser.pos = newHeroPos; curUser.pos = newHeroPos;
Dungeon.observe(); Dungeon.observe();
curUser.spendAndNext(1f);
Dungeon.level.press(newHeroPos, curUser);
} }
})); }));
} }