UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

91 lines (64 loc) 2.53 kB
import DatGuiController from "../../../../editor/view/ecs/components/DatGuiController.js"; class NumericIntervalControl extends DatGuiController { constructor() { super(); this.dRoot.addClass('numeric-interval-control'); const surrogate = { min: 0, max: 0 }; const minController = this.addControl(surrogate, 'min').onChange(surrogate2model); const maxController = this.addControl(surrogate, 'max').onChange(surrogate2model); const precision = 5; minController.__precision = precision; maxController.__precision = precision; this.controllers = { min: minController, max: maxController }; const self = this; let modelWriteLock = false; let controllerWriteLock = false; function surrogate2model() { controllerWriteLock = true; const interval = self.model.getValue(); if (interval !== null && !modelWriteLock) { const min = surrogate.min; const max = surrogate.max; if (min > max) { //invariant violated, fix maxController.setValue(min); interval.set(min, min); } else { interval.set(min, max); } } controllerWriteLock = false; } function model2surrogate() { modelWriteLock = true; const interval = self.model.getValue(); if (interval !== null && !controllerWriteLock) { surrogate.min = interval.min; surrogate.max = interval.max; minController.setValue(interval.min); maxController.setValue(interval.max); } modelWriteLock = false; } function modelChanged(modelNew, modelOld) { if (modelNew !== null) { model2surrogate(); self.bindSignal(modelNew.onChanged, model2surrogate); } if (modelOld !== null && modelOld !== undefined) { self.unbindSignal(modelOld.onChanged, model2surrogate); } } this.on.linked.add(function () { model2surrogate(); }); this.model.process(modelChanged); } } export default NumericIntervalControl;