use of com.watabou.utils.Callback in project pixel-dungeon-remix by NYRDS.
the class Barrel method burn.
@Override
public void burn() {
if (burned) {
return;
}
burned = true;
sprite.playAnim(10, false, new Callback() {
@Override
public void call() {
remove();
}
}, image() + 0, image() + 1, image() + 2, image() + 3, image() + 4);
Sample.INSTANCE.play(Assets.SND_EXPLOSION);
LiquidFlame fire = Blob.seed(getPos(), 10, LiquidFlame.class);
GameScene.add(fire);
}
use of com.watabou.utils.Callback in project pixel-dungeon-remix by NYRDS.
the class ShadowLord method blink.
private void blink(int epos) {
if (Dungeon.level.distance(getPos(), epos) == 1) {
int y = Dungeon.level.cellX(getPos());
int x = Dungeon.level.cellY(getPos());
int ey = Dungeon.level.cellX(epos);
int ex = Dungeon.level.cellY(epos);
int dx = x - ex;
int dy = y - ey;
x += 2 * dx;
y += 2 * dy;
final int tgt = Dungeon.level.cell(x, y);
if (Dungeon.level.cellValid(tgt)) {
final Char ch = this;
fx(getPos(), new Callback() {
@Override
public void call() {
WandOfBlink.appear(ch, tgt);
}
});
}
}
}
use of com.watabou.utils.Callback in project pixel-dungeon-remix by NYRDS.
the class Item method cast.
public void cast(final Hero user, int dst) {
setCurUser(user);
final int cell = Ballistica.cast(user.getPos(), dst, false, true);
user.getSprite().zap(cell);
user.busy();
Char enemy = Actor.findChar(cell);
QuickSlot.target(this, enemy);
float delay = TIME_TO_THROW;
if (this instanceof MissileWeapon) {
// FIXME
delay *= ((MissileWeapon) this).speedFactor(user);
if (enemy != null && enemy.hasBuff(SnipersMark.class)) {
delay *= 0.5f;
}
}
final float finalDelay = delay;
final Item item = detach(user.belongings.backpack);
((MissileSprite) user.getSprite().getParent().recycle(MissileSprite.class)).reset(user.getPos(), cell, this, new Callback() {
@Override
public void call() {
item.onThrow(cell);
user.spendAndNext(finalDelay);
}
});
}
use of com.watabou.utils.Callback in project pixel-dungeon by watabou.
the class Item method cast.
public void cast(final Hero user, int dst) {
final int cell = Ballistica.cast(user.pos, dst, false, true);
user.sprite.zap(cell);
user.busy();
Sample.INSTANCE.play(Assets.SND_MISS, 0.6f, 0.6f, 1.5f);
Char enemy = Actor.findChar(cell);
QuickSlot.target(this, enemy);
// FIXME!!!
float delay = TIME_TO_THROW;
if (this instanceof MissileWeapon) {
delay *= ((MissileWeapon) this).speedFactor(user);
if (enemy != null) {
SnipersMark mark = user.buff(SnipersMark.class);
if (mark != null) {
if (mark.object == enemy.id()) {
delay *= 0.5f;
}
user.remove(mark);
}
}
}
final float finalDelay = delay;
((MissileSprite) user.sprite.parent.recycle(MissileSprite.class)).reset(user.pos, cell, this, new Callback() {
@Override
public void call() {
Item.this.detach(user.belongings.backpack).onThrow(cell);
user.spendAndNext(finalDelay);
}
});
}
use of com.watabou.utils.Callback in project pixel-dungeon by watabou.
the class Goo method doAttack.
@Override
protected boolean doAttack(final Char enemy) {
if (pumpedUp) {
if (Level.adjacent(pos, enemy.pos)) {
// Pumped up attack WITHOUT accuracy penalty
jumped = false;
return super.doAttack(enemy);
} else {
// Pumped up attack WITH accuracy penalty
jumped = true;
if (Ballistica.cast(pos, enemy.pos, false, true) == enemy.pos) {
final int dest = Ballistica.trace[Ballistica.distance - 2];
Callback afterJump = new Callback() {
@Override
public void call() {
move(dest);
Dungeon.level.mobPress(Goo.this);
Goo.super.doAttack(enemy);
}
};
if (Dungeon.visible[pos] || Dungeon.visible[dest]) {
sprite.jump(pos, dest, afterJump);
return false;
} else {
afterJump.call();
return true;
}
} else {
sprite.idle();
pumpedUp = false;
return true;
}
}
} else if (Random.Int(3) > 0) {
// Normal attack
return super.doAttack(enemy);
} else {
// Pumping up
pumpedUp = true;
spend(PUMP_UP_DELAY);
((GooSprite) sprite).pumpUp();
if (Dungeon.visible[pos]) {
sprite.showStatus(CharSprite.NEGATIVE, "!!!");
GLog.n("Goo is pumping itself up!");
}
return true;
}
}
Aggregations