RetrowayBBS/helpers/menu.js

94 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { Color, Point } = require("telidon");
const Page = require("./page.js");
module.exports = class Menu extends Page {
globalMenu = {
"#": "./views/mainmenu.js",
"#8378": "./views/test.js",
"*": ()=>this.gotoPrev(),
"*69": null,
"*911": ()=>{throw new Error("Écran de la mort qui tue causé par l'utilisateur")},
}
selection = "";
menu = {};
bgColor = new Color(0,0,0);
fgColor = new Color(1,1,1);
position = new Point(0.836,0);
maxLength = 5;
constructor(naplps) {
super(naplps);
}
start() {
//this.naplps.pointSetAbs(this.position);
//this.naplps.textMode();
}
data(byte) {
if(byte == 13) {
if(Object.keys(this.globalMenu).includes(this.selection))
{
if(typeof this.globalMenu[this.selection] == "function")
this.globalMenu[this.selection]();
else
this.goto(this.globalMenu[this.selection]);
}
else if(Object.keys(this.menu).includes(this.selection))
{
if(typeof this.menu[this.selection] == "function")
this.menu[this.selection]();
else
this.goto(this.menu[this.selection]);
}
else {
this.naplps.bell();
if(this.selection.length > 0){
this.naplps.pdiMode();
this.naplps.pointSetAbs(this.position);
this.naplps.setColor(this.bgColor);
this.naplps.textMode();
this.naplps.write(this.selection);
/*this.naplps.pdiMode();
this.naplps.pointSetAbs(this.position);
this.naplps.setColor(this.fgColor);
this.naplps.textMode();*/
this.selection = "";
}
}
}
if((byte >= 48 && byte <= 57 && this.selection.length < this.maxLength) ||
((byte == 35 || byte == 42) && this.selection.length == 0))
{
this.naplps.pdiMode();
this.naplps.pointSetAbs(new Point(this.position.x + this.naplps.options.characterSize.x * this.selection.length, this.position.y));
this.selection += String.fromCharCode(byte);
this.naplps.textMode();
this.naplps.writeBytes(byte);
this.naplps.pdiMode();
}
if(byte == 8)
{
if(this.selection.length > 0)
{
this.naplps.pdiMode();
this.naplps.pointSetAbs(this.position);
this.naplps.setColor(this.bgColor);
this.naplps.text(this.selection);
this.naplps.pointSetAbs(this.position);
this.naplps.setColor(this.fgColor);
this.selection = this.selection.slice(0,-1);
this.naplps.text(this.selection);
}
else
{
this.naplps.bell();
}
}
// TODO: if arrow keys, esc
}
leave() {
}
}