if (ai.attOnLand && ai.targetUnderWater || ai.attUnderWater && ai.targetOnLand) { LosEffects los = new LosEffects(); los.blocked = true; return los;
final AttackInfo ai = new AttackInfo(); ai.attackPos = ae.getPosition(); ai.targetPos = target.getPosition(); ai.targetEntity = target.getTargetType() == Targetable.TYPE_ENTITY; ai.targetInfantry = target instanceof Infantry; ai.attackHeight = ae.getHeight(); ai.targetHeight = target.getHeight();  IHex attHex = game.getBoard().getHex(ae.getPosition()); IHex targetHex = game.getBoard().getHex(target.getPosition());  int attEl = ae.absHeight(); int targEl; if ( target.getTargetType() == Targetable.TYPE_ENTITY || target.getTargetType() == Targetable.TYPE_BUILDING || target.getTargetType() == Targetable.TYPE_BLDG_IGNITE ) { targEl = target.absHeight(); } else { targEl = game.getBoard().getHex(target.getPosition()).floor();
    public static LosEffects calculateLos(IGame game, AttackInfo ai) {                if (ai.attOffBoard) {            LosEffects los = new LosEffects();            los.blocked = true;            return los;        }        if (ai.attOnLand && ai.targetUnderWater ||            ai.attUnderWater && ai.targetOnLand) {            LosEffects los = new LosEffects();            los.blocked = true;            return los;                     }                double degree = ai.attackPos.degree(ai.targetPos);        if (degree % 60 == 30) {            return LosEffects.losDivided(game, ai);        } else {            return LosEffects.losStraight(game, ai);        }    }