import { D } from "./engine/public.ts"; import { Point, Size } from "./engine/datatypes.ts"; import { ALL_STATS } from "./datatypes.ts"; import { getPlayerProgress } from "./playerprogress.ts"; import { getHuntMode } from "./huntmode.ts"; import { getStateManager } from "./statemanager.ts"; import { withCamera } from "./layout.ts"; import { C } from "./colors.ts"; export class Hud { get size(): Size { return new Size(96, 176); } update() { withCamera("HUD", () => { this.#update(); }); } draw() { withCamera("HUD", () => { this.#draw(); }); } #update() {} #draw() { D.fillRect(new Point(-4, -4), this.size.add(new Size(8, 8)), C.BG_OUTER); D.drawText(getPlayerProgress().name, new Point(0, 0), C.FG_BOLD); let levelText = `Level ${getHuntMode().getDepth()}`; let zoneLabel = getHuntMode().getZoneLabel(); if (zoneLabel != null) { levelText += ": " + zoneLabel; } D.drawText(levelText, new Point(0, 16), C.FG_TEXT); D.drawText( `Turn ${getStateManager().getTurn()}/${getStateManager().getMaxTurns()}`, new Point(0, 32), C.FG_TEXT, ); let y = 64; let prog = getPlayerProgress(); for (let s of ALL_STATS.values()) { D.drawText(`${s}`, new Point(0, y), C.FG_BOLD); D.drawText(`${prog.getStat(s)}`, new Point(32, y), C.FG_TEXT); let talent = prog.getTalent(s); if (talent > 0) { D.drawText(`(+${talent})`, new Point(56, y), C.FG_TEXT); } if (talent < 0) { D.drawText(`(${talent})`, new Point(56, y), C.FG_TEXT); } y += 16; } D.drawText("EXP", new Point(0, 144), C.FG_BOLD); D.drawText(`${prog.getExperience()}`, new Point(32, 144), C.FG_TEXT); D.drawText("BLD", new Point(0, 160), C.FG_BOLD); let bloodAmount = prog.getBlood(); let bloodColor = C.FG_TEXT; if (bloodAmount >= 2000) { bloodColor = C.FG_TEXT_ENDORSED; } if (bloodAmount < 100) { bloodColor = C.FG_TOO_EXPENSIVE; } D.drawText(`${prog.getBlood()}cc`, new Point(32, 160), bloodColor); } } let active = new Hud(); export function getHud(): Hud { return active; }