|
const definition: Definition = JSON.parse(Deno.readTextFileSync("definition.json")); |
|
|
|
class Table { |
|
private rows: TableRow[] = []; |
|
private header: TableRow = new TableRow(); |
|
constructor(header: string[]) { |
|
for (const headerString of header) { |
|
this.header.add(headerString); |
|
} |
|
} |
|
|
|
add(row: TableRow) { |
|
this.rows.push(row); |
|
} |
|
|
|
toString(): string { |
|
return "[table]\n" + this.header.toString("th") + "\n" + this.rows.map(e => e.toString("td")).join("\n") + "\n[/table]"; |
|
} |
|
} |
|
|
|
class TableRow { |
|
private entries: string[] = []; |
|
|
|
add(string: string) { |
|
this.entries.push(string); |
|
} |
|
|
|
toString(code: string) { |
|
return "[tr]\n\t" + this.entries.map(e => `[${code}]${e}[/${code}]`).join("\n\t") + "\n[/tr]"; |
|
} |
|
} |
|
|
|
class GameEntry { |
|
private data: GameData; |
|
constructor(data: GameData) { |
|
this.data = data; |
|
} |
|
|
|
toTableRow(): TableRow { |
|
const tr = new TableRow(); |
|
tr.add(`[previewimg=${this.data.previewImg};][/previewimg]`); |
|
tr.add(`[url=https://store.steampowered.com/app/${this.data.appid}]Click[/url]`); |
|
tr.add(Rating.toString(this.data.story)); |
|
tr.add(Rating.toString(this.data.gameplay)); |
|
tr.add(Rating.toString(this.data.visual)); |
|
tr.add(Rating.toString(this.data.soundtrack)); |
|
tr.add(this.data.extra); |
|
return tr; |
|
} |
|
} |
|
|
|
interface Definition { |
|
games: GameData[]; |
|
rating: { [rating: string]: number } |
|
} |
|
|
|
interface GameData { |
|
appid: number, |
|
previewImg: number; |
|
story: number; |
|
gameplay: number; |
|
visual: number; |
|
soundtrack: number; |
|
extra: string; |
|
} |
|
|
|
namespace Rating { |
|
export function toString(rating: number): string { |
|
if (rating === 0) { |
|
return "UNRATED"; |
|
} else { |
|
return `[previewimg=${definition.rating[rating.toString()]};][/previewimg]`; |
|
} |
|
} |
|
} |
|
|
|
const table = new Table(["Game ", "Store", "Story", "Gameplay", "Visuals", "Soundtrack", "Extra"]); |
|
|
|
for (const data of definition.games) { |
|
const entry = new GameEntry(data); |
|
table.add(entry.toTableRow()); |
|
} |
|
|
|
Deno.writeTextFileSync("guide.txt", table.toString()); |