AttackInfo attackInfo = getNextAttackInfo();
if (attackInfo == null) {
return false;
} else {
Attacking attacker = attackInfo.attacker;
int time = attackInfo.time;
Field target = attackInfo.target;
// DamagableMapObject target = attackManager.getTarget(weapon, damagables);
// Damage damage = weapon.getDamage();
ShotResults shotResults = attacker.calculateAttack();
Damage[] damages = shotResults.getDamage();
for (Damage damage : damages) {
List<GameChange> shotChanges = shotResults.getChanges();
List<GameChange> receiveChanges = damageManager.damage(target, damage);
List<GameChange> timeChanges = computeTimeChanges(attacker, time);
if (attacker instanceof Unit) {
UnitShot unitShot = new UnitShot(attacker.getID(), shotChanges,
damage, target.getPosition(),
damageManager, receiveChanges,
timeChanges);
unitShot.execute();
} else {