Search in sources :

Example 1 with ChallengeStats

use of com.ixale.starparse.domain.stats.ChallengeStats in project StarParse by Ixale.

the class CombatDaoImpl method getCombatChallengeStats.

@Override
public List<ChallengeStats> getCombatChallengeStats(final Combat combat, final CombatSelection combatSel, final String playerName) throws Exception {
    if ((combat.getBoss() == null) || ((availableChallenges = combat.getBoss().getRaid().getChallenges(combat.getBoss())) == null)) {
        return null;
    }
    phasesToChallenges.clear();
    for (final CombatChallenge ch : availableChallenges) {
        phasesToChallenges.put(ch.getPhaseName(), ch);
    }
    final Map<String, Object> args = new HashMap<>();
    args.put("combatId", combat.getCombatId());
    args.put("tickFrom", combatSel != null && combatSel.getTickFrom() != null ? combatSel.getTickFrom() : 0);
    args.put("tickTo", combatSel != null && combatSel.getTickTo() != null ? combatSel.getTickTo() : Integer.MAX_VALUE);
    args.put("phaseNames", new ArrayList<>(phasesToChallenges.keySet()));
    return getJdbcTemplate().query(SQL_GET_COMBAT_CHALLENGES, args, new RowMapper<ChallengeStats>() {

        Long tickFrom, tickTo;

        boolean noCache = false;

        @Override
        public ChallengeStats mapRow(ResultSet rs, int rowNum) {
            try {
                noCache = false;
                if (combatSel != null) {
                    if (combatSel.getTickFrom() != null && (combatSel.getTickFrom() > rs.getLong("tick_from"))) {
                        tickFrom = combatSel.getTickFrom();
                        noCache = true;
                    } else {
                        tickFrom = rs.getLong("tick_from");
                    }
                    if (combatSel.getTickTo() != null && (getValueOrNull(rs, rs.getLong("tick_to")) == null || context.getTickTo() < rs.getLong("tick_to"))) {
                        tickTo = combatSel.getTickTo();
                        noCache = true;
                    } else {
                        tickTo = getValueOrNull(rs, rs.getLong("tick_to"));
                        noCache = noCache || tickTo == null;
                    }
                } else {
                    tickFrom = rs.getLong("tick_from");
                    tickTo = getValueOrNull(rs, rs.getLong("tick_to"));
                }
                if (!noCache && cachedChallenges.containsKey(combat.getCombatId())) {
                    if (cachedChallenges.get(combat.getCombatId()).containsKey(playerName)) {
                        if (cachedChallenges.get(combat.getCombatId()).get(playerName).containsKey(rs.getLong("tick_from"))) {
                            return cachedChallenges.get(combat.getCombatId()).get(playerName).get(rs.getLong("tick_from"));
                        // NOTREACHED
                        }
                    }
                }
                final CombatSelection challengeCombatSel = new CombatSelection(rs.getInt("event_id_from"), getValueOrNull(rs, rs.getInt("event_id_to")), tickFrom, tickTo, phasesToChallenges.get(rs.getString("name")).getArgs(), phasesToChallenges.get(rs.getString("name")).getSql());
                final CombatStats stats = getCombatStats(combat, challengeCombatSel, playerName, true);
                final ChallengeStats challengeStats = new ChallengeStats(phasesToChallenges.get(rs.getString("name")).getChallengeName(), tickFrom, tickFrom + stats.getTick(), stats.getDamage(), stats.getHeal(), stats.getEffectiveHeal());
                if (!noCache && (getValueOrNull(rs, rs.getLong("tick_to")) != null)) {
                    if (!cachedChallenges.containsKey(combat.getCombatId())) {
                        cachedChallenges.put(combat.getCombatId(), new HashMap<>());
                    }
                    if (!cachedChallenges.get(combat.getCombatId()).containsKey(playerName)) {
                        cachedChallenges.get(combat.getCombatId()).put(playerName, new HashMap<>());
                    }
                    cachedChallenges.get(combat.getCombatId()).get(playerName).put(rs.getLong("tick_from"), challengeStats);
                }
                return challengeStats;
            } catch (Exception e) {
                logger.error("Unable to get combat challenge: " + e.getMessage(), e);
                return null;
            }
        }
    });
}
Also used : CombatSelection(com.ixale.starparse.domain.CombatSelection) HashMap(java.util.HashMap) ChallengeStats(com.ixale.starparse.domain.stats.ChallengeStats) DataAccessException(org.springframework.dao.DataAccessException) SQLException(java.sql.SQLException) EmptyResultDataAccessException(org.springframework.dao.EmptyResultDataAccessException) CombatChallenge(com.ixale.starparse.domain.CombatChallenge) CombatStats(com.ixale.starparse.domain.stats.CombatStats) ResultSet(java.sql.ResultSet)

Example 2 with ChallengeStats

use of com.ixale.starparse.domain.stats.ChallengeStats in project StarParse by Ixale.

the class PersonalStatsPopoutPresenter method refreshCombatStats.

@Override
protected void refreshCombatStats(final Combat combat, final CombatStats stats) throws Exception {
    if (MODE_DAMAGE.equals(getMode().mode)) {
        refreshDamageStats(combat, stats);
    } else if (MODE_HEALING.equals(getMode().mode)) {
        refreshHealingStats(combat, stats);
    } else {
        refreshAllStats(combat, stats);
    }
    // any challenge available?
    if ((combat.getBoss() == null) || ((availableChallenges = combat.getBoss().getRaid().getChallenges(combat.getBoss())) == null)) {
        return;
    }
    currentChallenge = null;
    availableChallengeStats = eventService.getCombatChallengeStats(combat, context.getCombatSelection(), context.getSelectedPlayer());
    if (availableChallengeStats != null && !availableChallengeStats.isEmpty()) {
        // try to map
        for (final ChallengeStats chStats : availableChallengeStats) {
            for (final CombatChallenge ch : availableChallenges) {
                if (chStats.getChallengeName().equals(ch.getChallengeName())) {
                    currentChallenge = ch;
                    currentChallengeStats = chStats;
                }
            }
        }
    }
    if (currentChallenge == null) {
        if (lastChallenge != null) {
            removeChallenge(lastChallenge);
            lastChallenge = null;
        }
        return;
    }
    if (CombatChallenge.Type.FRIENDLY.equals(currentChallenge.getType()) && (currentChallengeStats.getDamage() == null || currentChallengeStats.getDamage() <= 0)) {
        // do not display negative challenges unless broken
        currentChallenge = null;
        currentChallengeStats = null;
        return;
    }
    if (lastChallenge != null) {
        if (!lastChallenge.getPhaseName().equals(currentChallenge.getPhaseName())) {
            removeChallenge(lastChallenge);
            addChallenge(currentChallenge);
        } else {
        // nothing to do
        }
    } else {
        addChallenge(currentChallenge);
    }
    updateChallenge(currentChallenge, currentChallengeStats);
    lastChallenge = currentChallenge;
}
Also used : CombatChallenge(com.ixale.starparse.domain.CombatChallenge) ChallengeStats(com.ixale.starparse.domain.stats.ChallengeStats)

Aggregations

CombatChallenge (com.ixale.starparse.domain.CombatChallenge)2 ChallengeStats (com.ixale.starparse.domain.stats.ChallengeStats)2 CombatSelection (com.ixale.starparse.domain.CombatSelection)1 CombatStats (com.ixale.starparse.domain.stats.CombatStats)1 ResultSet (java.sql.ResultSet)1 SQLException (java.sql.SQLException)1 HashMap (java.util.HashMap)1 DataAccessException (org.springframework.dao.DataAccessException)1 EmptyResultDataAccessException (org.springframework.dao.EmptyResultDataAccessException)1