예제 #1
0
  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);
        }
      }
    }
  }