protected void useAbility(Unit U, Ability A, GPoint T) { // uses the selected ability on the selected target // code copied from player class // decrement action points U.usePoints(A.getCost()); // get the tiles that were affected by the attack List<AttackedTile> tilesAffected = A.getTilesAffected(U, T, map); for (int j = 0; j < tilesAffected.size(); j++) { MapTile tile = map.getTile(tilesAffected.get(j).tile); if (tile.hasUnit()) { // there is a unit on the tile int unitId = tile.getUnit_id(); Unit unit = map.getUnit(unitId); // reduce unit health by attack dmg if (unit != null) { DamageDealt damageDone = unit.takeDamage(tilesAffected.get(j).damageTaken, map); healthIndicators.add( new HealthIndicator( map, new GPoint(tilesAffected.get(j).tile.row, tilesAffected.get(j).tile.col), 30, damageDone.healthDamage, indicatorPaint, false)); if (damageDone.isAttack && damageDone.armorDamage < 0) { healthIndicators.add( new HealthIndicator( map, new GPoint(tilesAffected.get(j).tile.row, tilesAffected.get(j).tile.col), 0, damageDone.armorDamage, indicatorPaint, true)); } if (U != unit && damageDone.isAttack) // don't send indicator for heals map.sendHitIndicator(new HitIndicator(U, A, unit, tilesAffected.get(j).tile, map), unit); } } } }