in sim/visuals/board.ts [231:282]
private getControlForNode(id: NodeType, port: number, useCache = true) {
if (useCache && this.cachedControlNodes[id] && this.cachedControlNodes[id][port]) {
return this.cachedControlNodes[id][port];
}
let view: View;
switch (id) {
case NodeType.ColorSensor: {
const state = ev3board().getInputNodes()[port] as ColorSensorNode;
if (state.getMode() == ColorSensorMode.Colors) {
view = new ColorGridControl(this.element, this.defs, state, port);
} else if (state.getMode() == ColorSensorMode.Reflected) {
view = new ColorWheelControl(this.element, this.defs, state, port);
} else if (state.getMode() == ColorSensorMode.Ambient) {
view = new ColorWheelControl(this.element, this.defs, state, port);
}
break;
}
case NodeType.UltrasonicSensor: {
const state = ev3board().getInputNodes()[port] as UltrasonicSensorNode;
view = new DistanceSliderControl(this.element, this.defs, state, port);
break;
}
case NodeType.InfraredSensor: {
const state = ev3board().getInputNodes()[port] as InfraredSensorNode;
if (state.getMode() == InfraredSensorMode.Proximity)
view = new ProximitySliderControl(this.element, this.defs, state, port);
else if (state.getMode() == InfraredSensorMode.RemoteControl)
view = new RemoteBeaconButtonsControl(this.element, this.defs, state, port);
break;
}
case NodeType.GyroSensor: {
const state = ev3board().getInputNodes()[port] as GyroSensorNode;
view = new RotationSliderControl(this.element, this.defs, state, port);
break;
}
case NodeType.MediumMotor:
case NodeType.LargeMotor: {
const state = ev3board().getMotors()[port];
view = new MotorSliderControl(this.element, this.defs, state, port);
break;
}
}
if (view) {
if (!this.cachedControlNodes[id]) this.cachedControlNodes[id] = [];
this.cachedControlNodes[id][port] = view;
return view;
}
return undefined;
}