This commit is contained in:
Renan LE CARO 2025-04-07 08:24:17 +02:00
parent 46228a2128
commit 9624c5b351
16 changed files with 518 additions and 52 deletions

99
src/runHistoryViewer.ts Normal file
View file

@ -0,0 +1,99 @@
import {getHistory} from "./gameOver";
import {icons} from "./loadGameData";
import {t} from "./i18n/i18n";
import {asyncAlert} from "./asyncAlert";
import {rawUpgrades} from "./upgrades";
export function runHistoryViewerMenuEntry(){
const history = getHistory()
return {
icon:icons['icon:history'],
text:t('history.title'),
disabled : history.length<10,
help: history.length<10 ? t('history.locked'):t('history.help',{count:history.length}),
async value(){
let sort = 0
let sortDir = -1
let columns = [
{
label:t('history.columns.started'),
field: r=>r.started,
render(v){
return new Date(v).toISOString().slice(0,10)
}
},
{
label:t('history.columns.score'),
field: r=>r.score
},
{
label:t('history.columns.runTime'),
tooltip:t('history.columns.runTime_tooltip'),
field: r=>r.runTime,
render(v){
return Math.floor(v/1000)+'s'
}
},
{
label:t('history.columns.puck_bounces'),
tooltip:t('history.columns.puck_bounces_tooltip'),
field: r=>r.puck_bounces,
},
{
label:t('history.columns.max_combo'),
field: r=>r.max_combo,
},
{
label:t('history.columns.upgrades_picked'),
field: r=>r.upgrades_picked,
},
...rawUpgrades.map(u=>({
label: icons['icon:'+u.id],
tooltip:u.name,
field: r=>r.perks[u.id]||0,
render(v){
if(!v) return '-'
return v
}
}))
]
while(true){
const header = columns.map((c, ci) => `<th data-tooltip="${c.tooltip || ''}" data-resolve-to="sort:${ci}">${c.label}</th>`).join('')
const toString = v => v.toString()
const tbody = history.sort((a, b) => sortDir * (columns[sort].field(a) - columns[sort].field(b))).map(h => '<tr>' + columns.map(c => {
const value = c.field(h) ?? 0
const render = c.render || toString
return '<td>' + render(value) + '</td>'
}).join('') + '</tr>').join('')
const result = await asyncAlert({
title: t('history.title'),
className: 'history',
content: [
`
<table>
<thead><tr>${header}</tr></thead>
<tbody>${tbody}</tbody>
</table>
`
]
})
if(!result) return
if(result.startsWith('sort:')){
const newSort = parseInt(result.split(':')[1])
if(newSort==sort){
sortDir*=-1
}else{
sortDir=-1
sort=newSort
}
}
}
}
}
}