mirror of
https://gitlab.com/lecarore/breakout71.git
synced 2025-04-29 08:19:13 -04:00
wip
This commit is contained in:
parent
9624c5b351
commit
e78021ff83
24 changed files with 840 additions and 437 deletions
|
@ -1,99 +1,117 @@
|
|||
import {getHistory} from "./gameOver";
|
||||
import {icons} from "./loadGameData";
|
||||
import {t} from "./i18n/i18n";
|
||||
import {asyncAlert} from "./asyncAlert";
|
||||
import {rawUpgrades} from "./upgrades";
|
||||
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()
|
||||
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'),
|
||||
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('')
|
||||
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: [
|
||||
`
|
||||
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
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
],
|
||||
});
|
||||
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