gctGenerator/site/.vuepress/components/codes/AttemptCounter/codegen.js
sup39 d75bdaa3ff Add 'Attempt Counter', Instant Level Select 0.2
Merge preview related config to codes/preview.js
2023-02-05 23:32:35 +09:00

55 lines
1.3 KiB
JavaScript

import { parseJSON } from '../codegen.js';
import { insts2hex, getDrawTextOpt, getFillRectParams } from '../asm';
import { measureText } from '../text.js';
import { int2hex } from '../utils.js';
export const lskey = 'config/AttemptCounter';
export const defaultConfig = {
x: 152,
y: 125,
fontSize: 32,
fgRGB: 0xffff99,
fgA: 0xff,
fgRGB2: null,
fgA2: null,
bgRGB: 0x000000,
bgA: 0x40,
bgLeft: 4,
bgRight: 6,
bgTop: 4,
bgBot: 3,
duration: 60,
};
export const getPreviewText = () => '88\n99';
/** @returns {typeof defaultConfig} */
export function getConfig() {
const config =
(typeof localStorage !== 'undefined' && parseJSON(localStorage.getItem(lskey))) || {};
return {
...defaultConfig,
...config,
text: getPreviewText(),
};
}
/**
* @param {keyof typeof import('../addrs.js').ctxSpOff} version
* @param {string=} baseCode
*/
export default function codegen(version, baseCode) {
if (!baseCode) return '';
const config = getConfig();
let code = baseCode;
code += '077F0479 0000002B';
code += int2hex(config.duration, 1);
code += '25640A256400'; // fmt = "%d\n%d"
code += insts2hex(getDrawTextOpt(config));
code += insts2hex(getFillRectParams(config, measureText(getPreviewText(), version)));
code += '0000000000'; // padding
return code.replace(/\s/g, '');
}