From 1fa9bf12d54cf7bfff0441d0fa65868d148a1fb6 Mon Sep 17 00:00:00 2001 From: Peli de Halleux Date: Mon, 12 Sep 2016 21:29:55 -0700 Subject: [PATCH] refactoring dalboard --- sim/dalboard.ts | 70 +++++++++++++++++++++++----------------- sim/definitions.ts | 12 ------- sim/instructions.ts | 2 +- sim/visuals/boardhost.ts | 10 +++--- 4 files changed, 47 insertions(+), 47 deletions(-) diff --git a/sim/dalboard.ts b/sim/dalboard.ts index 2ccf966a..295e6f48 100644 --- a/sim/dalboard.ts +++ b/sim/dalboard.ts @@ -1,12 +1,40 @@ /// namespace pxsim { - export class DalBoard extends BaseBoard { + export class CoreBoard extends BaseBoard { id: string; // the bus bus: pxsim.EventBus; + // updates + updateSubscribers: (() => void)[]; + + // builtin state + builtinParts: Map; + + constructor() { + super() + this.id = "b" + Math_.random(2147483647); + this.bus = new pxsim.EventBus(runtime); + + // updates + this.updateSubscribers = [] + this.updateView = () => { + this.updateSubscribers.forEach(sub => sub()); + } + + this.builtinParts = {}; + } + + kill() { + super.kill(); + AudioContextManager.stop(); + } + } + + + export class DalBoard extends CoreBoard { // state & update logic for component services ledMatrixState: LedMatrixState; edgeConnectorState: EdgeConnectorState; @@ -19,37 +47,26 @@ namespace pxsim { radioState: RadioState; neopixelState: NeoPixelState; - // updates - updateSubscribers: (() => void)[]; - constructor() { super() - this.id = "b" + Math_.random(2147483647); - this.bus = new pxsim.EventBus(runtime); // components - this.ledMatrixState = new LedMatrixState(runtime); - this.buttonPairState = new ButtonPairState({ + this.builtinParts["ledmatrix"] = this.ledMatrixState = new LedMatrixState(runtime); + this.builtinParts["buttonpair"] = this.buttonPairState = new ButtonPairState({ ID_BUTTON_A: DAL.MICROBIT_ID_BUTTON_A, ID_BUTTON_B: DAL.MICROBIT_ID_BUTTON_B, ID_BUTTON_AB: DAL.MICROBIT_ID_BUTTON_AB, BUTTON_EVT_UP: DAL.MICROBIT_BUTTON_EVT_UP, BUTTON_EVT_CLICK: DAL.MICROBIT_BUTTON_EVT_CLICK }); - this.edgeConnectorState = new EdgeConnectorState(); - this.radioState = new RadioState(runtime); - this.accelerometerState = new AccelerometerState(runtime); - this.serialState = new SerialState(); - this.thermometerState = new ThermometerState(); - this.lightSensorState = new LightSensorState(); - this.compassState = new CompassState(); - this.neopixelState = new NeoPixelState(); - - // updates - this.updateSubscribers = [] - this.updateView = () => { - this.updateSubscribers.forEach(sub => sub()); - } + this.builtinParts["edgeconnector"] = this.edgeConnectorState = new EdgeConnectorState(); + this.builtinParts["radio"] = this.radioState = new RadioState(runtime); + this.builtinParts["accelerometer"] = this.accelerometerState = new AccelerometerState(runtime); + this.builtinParts["serial"] = this.serialState = new SerialState(); + this.builtinParts["thermometer"] = this.thermometerState = new ThermometerState(); + this.builtinParts["lightsensor"] = this.lightSensorState = new LightSensorState(); + this.builtinParts["compass"] = this.compassState = new CompassState(); + this.builtinParts["neopixel"] = this.neopixelState = new NeoPixelState(); } receiveMessage(msg: SimulatorMessage) { @@ -71,11 +88,6 @@ namespace pxsim { } } - kill() { - super.kill(); - AudioContextManager.stop(); - } - initAsync(msg: SimulatorRunMessage): Promise { super.initAsync(msg); @@ -131,9 +143,9 @@ namespace pxsim { if (!pxsim.initCurrentRuntime) { pxsim.initCurrentRuntime = initRuntimeWithDalBoard; - } + } export function board() { return runtime.board as DalBoard; - } + } } \ No newline at end of file diff --git a/sim/definitions.ts b/sim/definitions.ts index 2d29b786..8e553c4b 100644 --- a/sim/definitions.ts +++ b/sim/definitions.ts @@ -58,18 +58,6 @@ namespace pxsim { "ledmatrix": () => new visuals.LedMatrixView(), "neopixel": () => new visuals.NeoPixelView(), }; - export const builtinComponentSimState: Map<(d: DalBoard) => any> = { - "buttonpair": (d: DalBoard) => d.buttonPairState, - "ledmatrix": (d: DalBoard) => d.ledMatrixState, - "edgeconnector": (d: DalBoard) => d.edgeConnectorState, - "serial": (d: DalBoard) => d.serialState, - "radio": (d: DalBoard) => d.radioState, - "thermometer": (d: DalBoard) => d.thermometerState, - "accelerometer": (d: DalBoard) => d.accelerometerState, - "compass": (d: DalBoard) => d.compassState, - "lightsensor": (d: DalBoard) => d.lightSensorState, - "neopixel": (d: DalBoard) => d.neopixelState, - }; export const builtinComponentPartVisual: Map<(xy: visuals.Coord) => visuals.SVGElAndSize> = { "buttonpair": (xy: visuals.Coord) => visuals.mkBtnSvg(xy), "ledmatrix": (xy: visuals.Coord) => visuals.mkLedMatrixSvg(xy, 8, 8), diff --git a/sim/instructions.ts b/sim/instructions.ts index f0fa1220..055215c7 100644 --- a/sim/instructions.ts +++ b/sim/instructions.ts @@ -353,7 +353,7 @@ namespace pxsim.instructions { }; } function mkBlankBoardAndBreadboard(boardDef: BoardDefinition, cmpDefs: Map, fnArgs: any, width: number, buildMode: boolean = false): visuals.BoardHost { - let state = runtime.board as pxsim.DalBoard; + let state = runtime.board as pxsim.CoreBoard; let boardHost = new visuals.BoardHost({ state: state, boardDef: boardDef, diff --git a/sim/visuals/boardhost.ts b/sim/visuals/boardhost.ts index 5adf86fc..172670a3 100644 --- a/sim/visuals/boardhost.ts +++ b/sim/visuals/boardhost.ts @@ -1,6 +1,6 @@ namespace pxsim.visuals { export interface BoardHostOpts { - state: DalBoard, + state: CoreBoard, boardDef: BoardDefinition, partsList?: string[], partDefs: Map, @@ -22,7 +22,7 @@ namespace pxsim.visuals { private partOverGroup: SVGGElement; private style: SVGStyleElement; private defs: SVGDefsElement; - private state: DalBoard; + private state: CoreBoard; private useCrocClips: boolean; constructor(opts: BoardHostOpts) { @@ -160,9 +160,9 @@ namespace pxsim.visuals { //TODO: seperate simulation behavior from builtin visual let builtinBehavior = partInst.simulationBehavior; let cnstr = builtinComponentSimVisual[builtinBehavior]; - let stateFn = builtinComponentSimState[builtinBehavior]; + let stateFn = this.state.builtinParts[builtinBehavior]; part = cnstr(); - part.init(this.state.bus, stateFn(this.state), this.view, partInst.params); + part.init(this.state.bus, stateFn, this.view, partInst.params); } else { let vis = partInst.visual as PartVisualDefinition; part = new GenericPart(vis); @@ -179,7 +179,7 @@ namespace pxsim.visuals { let row = getRowName(rowIdx); let col = getColumnName(colIdx); let xOffset = partInst.bbFit.xOffset / partInst.visual.pinDistance; - let yOffset = partInst.bbFit.yOffset / partInst.visual.pinDistance; + let yOffset = partInst.bbFit.yOffset / partInst.visual.pinDistance; let rowCol = { type: "breadboard", row: row,