toHita.append(los.losModifiers());
toHita.append(los.losModifiers(game));
    public int[] getModifiers(final Entity te) {        //set them at the appropriate positions        final Entity ae = this.entity;        int attHeight = ae.isProne() ? 0 : 1;        int targHeight = te.isProne() ? 0 : 1;        int attEl = 0;        int targEl = 0;        attEl = ae.getElevation() + attHeight;        targEl = te.getElevation() + targHeight;        boolean pc = false;        boolean apc = false;        //get all relevent modifiers        ToHitData toHita = new ToHitData();        ToHitData toHitd = new ToHitData();        toHita.append(Compute.getAttackerMovementModifier(game, ae.getId()));        toHita.append(Compute.getTargetMovementModifier(game, te.getId()));        toHita.append(Compute.getTargetTerrainModifier(game, te));        toHita.append(Compute.getAttackerTerrainModifier(game, ae.getId()));        toHitd.append(Compute.getAttackerMovementModifier(game, te.getId()));        toHitd.append(Compute.getTargetMovementModifier(game, ae.getId()));        if (!(this.isPhysical && isJumping())) {            toHitd.append(Compute.getTargetTerrainModifier(game, ae));        }        toHitd.append(Compute.getAttackerTerrainModifier(game, te.getId()));        Hex attHex = game.board.getHex(ae.getPosition());        if (attHex.contains(Terrain.WATER) && attHex.surface() > attEl) {            toHita.addModifier(ToHitData.IMPOSSIBLE, "Attacker in depth 2+ water");            toHitd.addModifier(ToHitData.IMPOSSIBLE, "Defender in depth 2+ water");        } else if (attHex.surface() == attEl && ae.height() > 0) {            apc = true;        }        Hex targHex = game.board.getHex(te.getPosition());        if (targHex.contains(Terrain.WATER)) {            if (targHex.surface() == targEl && te.height() > 0) {                pc = true;            } else if (targHex.surface() > targEl) {                toHita.addModifier(ToHitData.IMPOSSIBLE, "Attacker in depth 2+ water");                toHitd.addModifier(ToHitData.IMPOSSIBLE, "Defender in depth 2+ water");            }        }        // calc & add attacker los mods        LosEffects los = LosEffects.calculateLos(game, ae.getId(), te);        toHita.append(los.losModifiers());        // save variables        pc = los.isTargetCover();        apc = los.isAttackerCover();        // reverse attacker & target partial cover & calc defender los mods        los.setTargetCover(apc);        los.setAttackerCover(pc);        toHitd.append(los.losModifiers());        // heatBuildup        if (ae.getHeatFiringModifier() != 0) {            toHita.addModifier(ae.getHeatFiringModifier(), "heatBuildup");        }        if (te.getHeatFiringModifier() != 0) {            toHitd.addModifier(te.getHeatFiringModifier(), "heatBuildup");        }        // target immobile        if (te.isImmobile()) {            toHita.addModifier(-4, "target immobile");        }        if (ae.isImmobile()) {            toHitd.addModifier(-4, "target immobile");        }        final int range = ae.getPosition().distance(te.getPosition());        // target prone        if (te.isProne()) {            // easier when point-blank            if (range == 1) {                toHita.addModifier(-2, "target prone and adjacent");            }            // harder at range            if (range > 1) {                toHita.addModifier(1, "target prone and at range");            }        }        if (ae.isProne()) {            // easier when point-blank            if (range == 1) {                toHitd.addModifier(-2, "target prone and adjacent");            }            // harder at range            if (range > 1) {                toHitd.addModifier(1, "target prone and at range");            }        }        return new int[] { toHita.getValue(), toHitd.getValue(), apc ? 1 : 0, pc ? 1 : 0 };    }