int direction = ae.getFacing();
int damage = Compute.getChargeDamageFor(ae); int damageTaken = Compute.getChargeDamageTakenBy(ae, te);
    private void resolveChargeAttack(ChargeAttackAction caa, int lastEntityId) {        final Entity ae = game.getEntity(caa.getEntityId());        final Entity te = game.getEntity(caa.getTargetId());        if (lastEntityId != caa.getEntityId()) {            phaseReport.append("\nPhysical attacks for " + ae.getDisplayName() + "\n");        }        phaseReport.append("    Charging " + te.getDisplayName());        // should we even bother?        if (te.isDestroyed() || te.isDoomed() || te.crew.isDead()) {            phaseReport.append(" but the target is already destroyed!\n");            return;        }        // target still in the same position?        if (!te.getPosition().equals(caa.getTargetPos())) {            phaseReport.append(" but the target has moved.\n");            return;        }        // compute to-hit        ToHitData toHit = Compute.toHitCharge(game, caa);        phaseReport.append("; needs " + toHit.getValue() + ", ");        // roll        int roll = Compute.d6(2);        phaseReport.append("rolls " + roll + " : ");        // do we hit?        if (roll < toHit.getValue()) {            phaseReport.append("misses.\n");            return;        }        // we hit...        int direction = ae.getFacing();        if (Compute.isValidDisplacement(game, te.getId(), te.getPosition(), direction)) {            Coords src = te.getPosition();            Coords dest = src.translated(direction);            phaseReport.append("succeeds: target is pushed into hex "                               + dest.getBoardNum()                               + "\n");            doEntityDisplacement(te, src, dest, new PilotingRollData(te.getId(), 0, "was pushed"));            // if push actually moved the target, attacker follows thru            if (game.getEntity(src) == null) {                ae.setPosition(src);            }        } else {            phaseReport.append("succeeds, but target can't be moved.\n");            pilotRolls.addElement(new PilotingRollData(te.getId(), 0, "was pushed"));        }        phaseReport.append("\n");    }