@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
58 lines (39 loc) • 1.39 kB
JavaScript
import { TypeEditor } from "../../TypeEditor.js";
import { NumberController } from "../../../../view/ecs/components/common/NumberController.js";
import Vector1 from "../../../../../src/core/geom/Vector1.js";
import { isSubclassOf } from "../../../../../src/engine/plugin/isSubclassOf.js";
export class Vector1Editor extends TypeEditor {
build(parent, field, registry) {
/**
* @type {Vector1}
*/
const v1 = field.adapter.read(parent, field.name);
if (!((v1 instanceof Vector1) || isSubclassOf(v1, Vector1))) {
throw new Error(`Field ${field} is not Vector1`);
}
const view = new NumberController({ value: v1.getValue() });
let lock = false;
const sync_up = () => {
if (lock) {
return;
}
lock = true;
view.value.set(v1.x);
lock = false;
};
const sync_down = () => {
if (lock) {
return;
}
lock = true;
v1.set(
view.value.getValue(),
);
lock = false;
};
view.on.linked.add(sync_up);
view.bindSignal(view.value.onChanged, sync_down);
view.bindSignal(v1.onChanged, sync_up);
return view;
}
}