@Override public void advance(float amount) { if (Global.getCombatEngine() == null) return; float t = Global.getCombatEngine().getTotalElapsedTime(false); if (t > timeOfNextUpdate) { timeOfNextUpdate = t + UPDATE_FREQUENCY; if (findTarget() == null) return; float selfOverloadTime = IceUtils.getBaseOverloadDuration(ship); float targetOverloadTime = IceUtils.estimateOverloadDurationOnHit( target, weapon.getDerivedStats().getDamagePerShot(), weapon.getDamageType()); float incomingMissileDamage = IceUtils.estimateIncomingMissileDamage(ship); float fpOfSupport = IceUtils.getFPWorthOfSupport(ship, 2000); float fpOfEnemies = IceUtils.getFPWorthOfHostility(ship, 2000); fpOfEnemies = Math.max(0, fpOfEnemies - IceUtils.getFP(target) / 2); hitChance = IceUtils.getHitChance(weapon, target); targetWillDieSoonAnyway = (IceUtils.getLifeExpectancy(ship) < 3); overloadBalance = targetOverloadTime - selfOverloadTime; fpRatio = IceUtils.getFPStrength(target) / IceUtils.getFPStrength(ship); danger = Math.max(0, fpOfEnemies - fpOfSupport + incomingMissileDamage / 100f); } }