@Override public int proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 33% // lvl 1 - 50% // lvl 2 - 60% int level = Math.max( 0, weapon.level() ); if (Random.Int( level + 3 ) >= 2) { affected.clear(); affected.add(attacker); arcs.clear(); arcs.add(new Lightning.Arc(attacker.sprite.center(), defender.sprite.center())); hit(defender, Random.Int(1, damage / 3)); attacker.sprite.parent.addToFront( new Lightning( arcs, null ) ); } return damage; }
@Override public int proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 33% // lvl 1 - 50% // lvl 2 - 60% int level = Math.max( 0, weapon.level() ); if (Random.Int( level + 3 ) >= 2) { affected.clear(); affected.add(attacker); arcs.clear(); arcs.add(new Lightning.Arc(attacker.sprite.center(), defender.sprite.center())); hit(defender, Random.Int(1, damage / 3)); attacker.sprite.parent.addToFront( new Lightning( arcs, null ) ); } return damage; }
private void useTargeting() { if (lastTarget != null && Actor.chars().contains( lastTarget ) && lastTarget.isAlive() && Dungeon.level.heroFOV[lastTarget.pos]) { targeting = true; CharSprite sprite = lastTarget.sprite; sprite.parent.addToFront( crossM ); crossM.point(sprite.center(crossM)); crossB.point(slot.icon.center(crossB)); crossB.visible = true; } else { lastTarget = null; targeting = false; } }
private void useTargeting() { if (lastTarget != null && Actor.chars().contains( lastTarget ) && lastTarget.isAlive() && Dungeon.level.heroFOV[lastTarget.pos]) { targeting = true; CharSprite sprite = lastTarget.sprite; sprite.parent.addToFront( crossM ); crossM.point(sprite.center(crossM)); crossB.point(slot.icon.center(crossB)); crossB.visible = true; } else { lastTarget = null; targeting = false; } }
@Override protected void fx( Ballistica bolt, Callback callback ) { affected.clear(); arcs.clear(); int cell = bolt.collisionPos; Char ch = Actor.findChar( cell ); if (ch != null) { arcs.add( new Lightning.Arc(curUser.sprite.center(), ch.sprite.center())); arc(ch); } else { arcs.add( new Lightning.Arc(curUser.sprite.center(), DungeonTilemap.raisedTileCenterToWorld(bolt.collisionPos))); CellEmitter.center( cell ).burst( SparkParticle.FACTORY, 3 ); } //don't want to wait for the effect before processing damage. curUser.sprite.parent.addToFront( new Lightning( arcs, null ) ); callback.call(); }
@Override protected void fx( Ballistica bolt, Callback callback ) { affected.clear(); arcs.clear(); int cell = bolt.collisionPos; Char ch = Actor.findChar( cell ); if (ch != null) { arcs.add( new Lightning.Arc(curUser.sprite.center(), ch.sprite.center())); arc(ch); } else { arcs.add( new Lightning.Arc(curUser.sprite.center(), DungeonTilemap.raisedTileCenterToWorld(bolt.collisionPos))); CellEmitter.center( cell ).burst( SparkParticle.FACTORY, 3 ); } //don't want to wait for the effect before processing damage. curUser.sprite.parent.addToFront( new Lightning( arcs, null ) ); callback.call(); }
@Override protected void activate(int cell) { Sample.INSTANCE.play( Assets.SND_LIGHTNING ); ArrayList<Lightning.Arc> arcs = new ArrayList<>(); int hits = 0; PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { Char n = Actor.findChar(i); if (n != null) { arcs.add(new Lightning.Arc(cell, n.sprite.center())); Buff.prolong(n, Paralysis.class, 1f); hits++; } } } CellEmitter.center( cell ).burst( SparkParticle.FACTORY, 3 ); if (hits > 0) { curUser.sprite.parent.addToFront( new Lightning( arcs, null ) ); curUser.sprite.centerEmitter().burst(EnergyParticle.FACTORY, 10); curUser.belongings.charge(1f + hits); } } }
@Override protected void activate(int cell) { Sample.INSTANCE.play( Assets.SND_LIGHTNING ); ArrayList<Lightning.Arc> arcs = new ArrayList<>(); int hits = 0; PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); for (int i = 0; i < PathFinder.distance.length; i++) { if (PathFinder.distance[i] < Integer.MAX_VALUE) { Char n = Actor.findChar(i); if (n != null) { arcs.add(new Lightning.Arc(cell, n.sprite.center())); Buff.prolong(n, Paralysis.class, 1f); hits++; } } } CellEmitter.center( cell ).burst( SparkParticle.FACTORY, 3 ); if (hits > 0) { curUser.sprite.parent.addToFront( new Lightning( arcs, null ) ); curUser.sprite.centerEmitter().burst(EnergyParticle.FACTORY, 10); curUser.belongings.charge(1f + hits); } } }
@Override protected void affectTarget(Ballistica bolt, Hero hero) { Trap t = Dungeon.level.traps.get(bolt.collisionPos); if (t != null && t.active){ if (!t.visible) t.reveal(); t.disarm(); Sample.INSTANCE.play( Assets.SND_LIGHTNING ); hero.sprite.parent.addToFront( new Lightning(DungeonTilemap.tileCenterToWorld(t.pos), hero.sprite.center(), null) ); ScrollOfRecharging.charge(hero); Buff.prolong(hero, Recharging.class, 15f); Buff.affect(hero, ArtifactRecharge.class).set( 15 ); } else { GLog.w(Messages.get(this, "no_trap")); } }
@Override protected void affectTarget(Ballistica bolt, Hero hero) { Trap t = Dungeon.level.traps.get(bolt.collisionPos); if (t != null && t.active){ if (!t.visible) t.reveal(); t.disarm(); Sample.INSTANCE.play( Assets.SND_LIGHTNING ); hero.sprite.parent.addToFront( new Lightning(DungeonTilemap.tileCenterToWorld(t.pos), hero.sprite.center(), null) ); ScrollOfRecharging.charge(hero); Buff.prolong(hero, Recharging.class, 15f); Buff.affect(hero, ArtifactRecharge.class).set( 15 ); } else { GLog.w(Messages.get(this, "no_trap")); } }