diff --git a/package.json b/package.json index 51e66ed..93a6636 100644 --- a/package.json +++ b/package.json @@ -7,11 +7,13 @@ "dependencies": { "@types/blessed": "^0.1.17", "@types/bonjour": "^3.5.8", + "@types/faker": "^5.5.6", "@types/uuid": "^8.3.0", "bonjour": "^3.5.0", "chalk": "^4.1.1", "faker": "^5.5.3", "frigid": "^1.3.6", + "get-port": "^5.1.1", "logger": "^0.0.1", "neo-blessed": "^0.2.0", "printable-characters": "^1.0.42", diff --git a/src/Game.ts b/src/Game.ts index 4ffc0ed..d06256b 100644 --- a/src/Game.ts +++ b/src/Game.ts @@ -5,11 +5,12 @@ import { TaskList } from './TaskList.js'; import { Inventory } from './Inventory.js'; import { Menu } from './Menu.js'; import Time, { Tickable } from './Time.js'; -import { render, Renderable } from './UI.js'; +import { render, Renderable, setTitle } from './UI.js'; import log from './log.js'; import { ChopTreeTask } from './ChopTreeTask.js'; import { Task } from './Task.js'; import { ready } from './mDNS.js'; +import faker from 'faker'; let game = null; @@ -20,6 +21,7 @@ export class Game extends Frigid implements Tickable, Renderable { board: TaskList; menu: Menu; clock: Time; + name: string; [DEBUG] = true; @@ -55,6 +57,8 @@ export class Game extends Frigid implements Tickable, Renderable { ctor () { game = this; + this.name ??= faker.address.city(); + setTitle(this.name); this.pawns ??= []; this.selected ??= this.pawns[0] || null; this.menu = new Menu(); @@ -63,7 +67,7 @@ export class Game extends Frigid implements Tickable, Renderable { this.clock ??= new Time(); this.clock.thing = this; this.clock.start(); - ready(); + ready(this.name); render(this); } diff --git a/src/Pawn.ts b/src/Pawn.ts index 604ad05..98e7d33 100644 --- a/src/Pawn.ts +++ b/src/Pawn.ts @@ -31,10 +31,13 @@ export class Pawn extends Serializable implements Tickable { }; job: Task; awake: boolean; + sex: number; energy: number; fun: number; + age: number; + async tick() { this.energy -= energyScale; @@ -78,6 +81,10 @@ export class Pawn extends Serializable implements Tickable { first: faker.name.firstName(), last: faker.name.lastName() }; + if(!this.sex) { + this.sex = Math.round(Math.random()); + this.name.first = faker.name.firstName(this.sex); + } this.awake ??= true; this.energy ??= 100; if(this.job?.completed) { diff --git a/src/Time.ts b/src/Time.ts index c0f871a..9e89fff 100644 --- a/src/Time.ts +++ b/src/Time.ts @@ -40,7 +40,7 @@ export default class Time extends Serializable{ } ctor() { - this.rate ??= 10; + this.rate = 60; this.minute ??= 0; this.hour ??= 0; this.day ??= 0; diff --git a/src/UI.ts b/src/UI.ts index d29ff79..84bcb66 100644 --- a/src/UI.ts +++ b/src/UI.ts @@ -76,9 +76,14 @@ const titleBar = blessed.box({ width: '100%', height: 1, tags: true, - content: ' Colony Manager Sim{|}{bold}{black-fg}v0.1.0 {/}' }); +export function setTitle(title) { + titleBar.setContent(` ${title}{|}{bold}{black-fg}v0.1.0 {/}`); +} + +setTitle(''); + menuPanel.focus(); screen.append(tasksPanel); diff --git a/src/mDNS.ts b/src/mDNS.ts index 78c996b..95cadca 100644 --- a/src/mDNS.ts +++ b/src/mDNS.ts @@ -1,15 +1,17 @@ - import bonjour from 'bonjour'; import log from './log.js'; +import getPort from 'get-port'; import os from 'os' import * as uuid from 'uuid'; +import faker from 'faker'; + const mdns = bonjour(); const ID = uuid.v4(); let devices = []; class Player { name: string; - address: string; + host: string; port: number; toString() { @@ -25,19 +27,22 @@ const network = { export default network; -export function ready() { +export async function ready(name, onThing?) { + const port = await getPort({port: getPort.makeRange(52300, 52399)}); mdns.publish({ type: 'dfi', - name: os.hostname() + '-' + ID, - port: 6969 + name, + port: port }); } mdns.find({ type: 'dfi' }, (service) => { - log.info('found network device', service); const p = new Player(); - p.name = service.fqdn; + p.name = service.name; + p.host = service.host; + p.port = service.port; + log.info('Found player', p); devices.push(p); }); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1bbddaf..5a95b8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,6 +14,10 @@ dependencies: "@types/node" "*" +"@types/faker@^5.5.6": + version "5.5.6" + resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.5.6.tgz#039b700a9d8ad9150ecc842bf5e717e2027b6f75" + "@types/node@*": version "15.12.2" resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz" @@ -125,6 +129,10 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"