diff --git a/libs/color-sensor/color.ts b/libs/color-sensor/color.ts index 9b88e32d..c1c624c1 100644 --- a/libs/color-sensor/color.ts +++ b/libs/color-sensor/color.ts @@ -94,6 +94,7 @@ namespace sensors { } _update(prev: number, curr: number) { + if (curr == null) return; if (this.mode == ColorSensorMode.Color) control.raiseEvent(this._id, this._colorEventValue(curr)); else diff --git a/sim/state/sensor.ts b/sim/state/sensor.ts index ccef210b..7c37ffdd 100644 --- a/sim/state/sensor.ts +++ b/sim/state/sensor.ts @@ -5,6 +5,7 @@ namespace pxsim { protected mode: number; protected valueChanged: boolean; + protected modeChanged: boolean; constructor(port: number) { super(port); @@ -24,6 +25,8 @@ namespace pxsim { setMode(mode: number) { this.mode = mode; + this.changed = true; + this.modeChanged = true; } getMode() { @@ -44,6 +47,12 @@ namespace pxsim { return res; } + modeChange() { + const res = this.modeChanged; + this.modeChanged = false; + return res; + } + setChangedState() { this.changed = true; this.valueChanged = false; diff --git a/sim/visuals/board.ts b/sim/visuals/board.ts index 35b426c0..1a8eafb7 100644 --- a/sim/visuals/board.ts +++ b/sim/visuals/board.ts @@ -183,8 +183,8 @@ namespace pxsim.visuals { this.layoutView.updateTheme(theme); } - private getControlForNode(id: NodeType, port: number) { - if (this.cachedControlNodes[id] && this.cachedControlNodes[id][port]) { + private getControlForNode(id: NodeType, port: number, useCache = true) { + if (useCache && this.cachedControlNodes[id] && this.cachedControlNodes[id][port]) { return this.cachedControlNodes[id][port]; } @@ -406,7 +406,7 @@ namespace pxsim.visuals { if (view) { const isSelected = EV3View.isPreviousInputSelected(index, node.id) || view.getSelected(); if (isSelected && !view.getSelected()) view.setSelected(true); - const control = isSelected ? this.getControlForNode(node.id, index) : undefined; + const control = isSelected ? this.getControlForNode(node.id, index, !node.modeChange()) : undefined; const closeIcon = control ? this.getCloseIconView() : undefined; this.layoutView.setInput(index, view, control, closeIcon); view.updateState();