X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhelpers%2FTournament.js;h=ec141d12829b9758405314e052ddeae2aba9d7d7;hb=d32516335ea2534e15256c948e9c38d3de40794b;hp=7dffebbd07d96c1c189d6f51bdef61b62a524365;hpb=2b3d5b3d98705cda41a7218d7133234b227e87b6;p=alttp.git diff --git a/resources/js/helpers/Tournament.js b/resources/js/helpers/Tournament.js index 7dffebb..ec141d1 100644 --- a/resources/js/helpers/Tournament.js +++ b/resources/js/helpers/Tournament.js @@ -1,54 +1,6 @@ import Participant from './Participant'; import Round from './Round'; -export const calculateScores = tournament => { - const runners = getRunners(tournament); - const scores = runners.map(participant => ({ participant, score: 0 })); - if (!scores.length) return scores; - if (!tournament.rounds || !tournament.rounds.length) return scores; - tournament.rounds.forEach(round => { - const filtered = Participant - .sortByResult(runners, round) - .map(p => ({ participant: p, result: Participant.findResult(p, round) })) - .filter(r => r.result && (r.result.time || r.result.forfeit)) - .reverse(); - let running = 0; - let bonus = 1; - let lastResult = null; - for (let i = 0; i < filtered.length; ++i) { - const score = scores.find(s => s.participant.id === filtered[i].participant.id); - if (!score) return; - const result = filtered[i].result; - const betterThanLast = lastResult === null || result.time < lastResult; - if (!result.forfeit && betterThanLast) { - running += bonus; - lastResult = result.time; - bonus = 1; - } else { - ++bonus; - } - if (!result.forfeit) { - score.score += running; - } - } - }); - const sorted = scores.sort(compareScore); - let placement = scores.length; - let skipped = 0; - let lastScore = sorted[0].score; - for (let i = 0; i < sorted.length; ++i) { - if (sorted[i].score > lastScore) { - placement -= skipped; - skipped = 1; - lastScore = sorted[i].score; - } else { - ++skipped; - } - sorted[i].placement = placement; - } - return sorted.reverse(); -}; - export const compareScore = (a, b) => { const a_score = a && a.score ? a.score : 0; const b_score = b && b.score ? b.score : 0; @@ -85,6 +37,28 @@ export const hasTournamentAdmins = tournament => { return getTournamentAdmins(tournament).length > 0; }; +export const patchParticipant = (tournament, participant) => { + if (!tournament) return tournament; + if (!tournament.participants || !tournament.participants.length) { + return { + ...tournament, + participants: [participant], + }; + } + if (!tournament.participants.find(p => p.id === participant.id)) { + return { + ...tournament, + participants: [...tournament.participants, participant], + }; + } + return { + ...tournament, + participants: tournament.participants.map( + p => p.id === participant.id ? participant : p, + ), + }; +}; + export const patchResult = (tournament, result) => { if (!tournament || !tournament.rounds) return tournament; return { @@ -125,7 +99,6 @@ export const sortParticipants = tournament => { }; export default { - calculateScores, compareScore, findParticipant, getRunners,