ui-refactor
Valerie 2021-06-19 21:22:28 -04:00
parent b697856c4e
commit 29b407de75
6 changed files with 95 additions and 74 deletions

View File

@ -30,7 +30,7 @@ export type GiftMessage = {
export default network;
export async function ready(name, onThing?) {
export async function ready(name) {
const port = await getPort({port: getPort.makeRange(52300, 52399)});
mdns.publish({
type: 'dfi',
@ -73,4 +73,6 @@ mdns.find({
p.port = service.port;
log.info('Found player', p);
devices.push(p);
});
}).on("down", (service) => {
// TODO remove player from MP
})

View File

@ -59,19 +59,7 @@ export class Menu implements Renderable {
Game.current.pawns.push(new Pawn());
} else if (key.full === 'x') {
Game.current.board.clear();
}
// if(this.view === View.PAWNS) {
// if (key.full === 'delete') {
// Game.current.removePawn(Game.current.selected);
// } else if (key.full === 'up') {
// Game.current.advanceSelection(-1);
// } else if (key.full === 'down') {
// Game.current.advanceSelection(1);
// } else if (key.full === 'enter') {
// new PawnDetails(Game.current.selected);
// }
// }
} else this.view.keypress(key);
// if(this.view === View.MULTIPLAYER) {
// if (key.full === 'enter') {
@ -84,6 +72,8 @@ export class Menu implements Renderable {
// }
// }
// TODO add colortest debug screen!
Game.current.sync();
});
}
@ -93,61 +83,19 @@ export class Menu implements Renderable {
return ` ${Game.current.clock.render()}{|}${getTheme().normal(`Idle: ${idlers.length}`)} `;
}
renderPawns() {
return `${
Game.current.pawns.map(pawn => `${(function() {
const selected = pawn === Game.current.selected;
let str = '';
if(selected) {
str += ` ${getTheme().selected(` ${pawn.toString()}`)}{|}${pawn.status} \n`;
str += ` ${getTheme().normal('Energy')}{|}${progressbar(pawn.energy / 100, (menuPanel.width - 4) / 2)} \n`;
} else {
str += ` ${getTheme().normal(pawn.toString())}{|}${pawn.status} `;
}
return str;
})()}`).join('\n')
}`;
}
renderView() {
const colSpace = ((menuPanel.width - 2) / 2);
return `${
// ' '.repeat(colSpace - 20)
'{center}'
}${(() => {
return Object.values(View).map(view => {
if(view === this.view) {
return getTheme().tab.selected(` ${view} `);
return `{center}${(() => {
return Object.values(this.views).map((view, idx) => {
if(idx === this.viewIndex) {
return getTheme().tab.selected(` ${view.name} `);
} else {
return getTheme().tab.normal(` ${view} `);
return getTheme().tab.normal(` ${view.name} `);
}
}).join('');
})()}{/center}\n\n${(() => {
this.view.render();
})()}`
}
multiplayerSelected = 0;
renderMultiplayer() {
if(mdns.players.length === 0) return `{center}${getTheme().normal('No friends online')}{/center}`;
return mdns.players.map((player, i) => {
if(i === this.multiplayerSelected) return ' ' + getTheme().selected(' ' + player.toString());
else return ' ' + getTheme().normal(player.toString());
}).join('\n');
}
renderInv() {
return Game.current.inv.render();
}
renderTreesSubMenu() {
return [
`{center}Chop Trees`,
`{left} ${getTheme().hotkey('-=_+')}: ${this.trees}`,
`{left} ${getTheme().hotkey('enter')}: Create Task`,
`{left} ${getTheme().hotkey('escape')}: Cancel`
].join('\n');
})()}{/center}\n\n${
this.view.render()
}`;
}
render() {

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,4 @@
import { Game } from "../../Game.js";
import { View } from "../View.js";
export default class InventoryView extends View {
@ -5,6 +6,9 @@ export default class InventoryView extends View {
super();
this.name = 'Inventory';
}
keypress: (key: { full: string; }) => void;
render() { void 0 };
keypress(key: { full: string; }) {}
render() {
return Game.current.inv.render();
};
}

View File

@ -1,10 +1,32 @@
import { View } from "../View.js";
import { GiftPopup } from "../GiftPopup.js";
import { View } from "../View.js"
import mdns from '../../multiplayer/mDNS.js';
import { getTheme } from "@theme";
export default class MultiplayerView extends View {
selected: number = 0;
constructor() {
super();
this.name = 'Multiplayer';
}
keypress: (key: { full: string; }) => void;
render() { void 0 };
keypress(key: { full: string; }) {
if (key.full === 'enter') {
new GiftPopup(mdns.players[this.selected]);
} else if (key.full === 'up') {
this.selected --;
} else if (key.full === 'down') {
this.selected ++;
}
}
render() {
if(mdns.players.length === 0) return `{center}${getTheme().normal('No friends online')}{/center}`;
return mdns.players.map((player, i) => {
if(i === this.selected) return ' ' + getTheme().selected(' ' + player.toString());
else return ' ' + getTheme().normal(player.toString());
}).join('\n');
};
}

View File

@ -1,3 +1,8 @@
import { getTheme } from "@theme";
import { Game } from "../../Game.js";
import { progressbar } from "../../Progressbar.js";
import { PawnDetails } from "../PawnDetails.js";
import { menuPanel } from "../UI.js";
import { View } from "../View.js";
export default class PawnsView extends View {
@ -5,6 +10,32 @@ export default class PawnsView extends View {
super();
this.name = 'Pawns';
}
keypress: (key: { full: string; }) => void;
render() { void 0 };
keypress(key: { full: string; }) {
if (key.full === 'delete') {
Game.current.removePawn(Game.current.selected);
} else if (key.full === 'up') {
Game.current.advanceSelection(-1);
} else if (key.full === 'down') {
Game.current.advanceSelection(1);
} else if (key.full === 'enter') {
new PawnDetails(Game.current.selected);
}
}
render() {
return `${
Game.current.pawns.map(pawn => `${(function() {
const selected = pawn === Game.current.selected;
let str = '';
if(selected) {
str += ` ${getTheme().selected(` ${pawn.toString()}`)}{|}${pawn.status} \n`;
str += ` ${getTheme().normal('Energy')}{|}${progressbar(pawn.energy / 100, (menuPanel.width - 4) / 2)} \n`;
} else {
str += ` ${getTheme().normal(pawn.toString())}{|}${pawn.status} `;
}
return str;
})()}`).join('\n')
}`;
}
}