public boolean canAttack(Unit defender) {
        if (!isOffensiveUnit()
            || defender == null
            || defender.getTile() == null) return false;
        Tile tile = defender.getTile();

        return (isNaval())
            ? (tile.getSettlement() == null && defender.isNaval())
            : (!defender.isNaval() || defender.isBeached());
    }