mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-29 08:19:13 -04:00
wip
This commit is contained in:
parent
46228a2128
commit
9624c5b351
16 changed files with 518 additions and 52 deletions
99
src/runHistoryViewer.ts
Normal file
99
src/runHistoryViewer.ts
Normal 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
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue