UNPKG

awatif-ui

Version:

Awatif User Interface

50 lines (38 loc) 1.29 kB
import * as THREE from "three"; import van, { State } from "vanjs-core"; import { Text } from "./Text"; import { Node } from "awatif-fem"; import { Settings } from "../settings/getSettings"; export function nodesIndexes( settings: Settings, derivedNodes: State<Node[]>, derivedDisplayScale: State<number> ): THREE.Group { const group = new THREE.Group(); const size = 0.05 * settings.gridSize.rawVal * 0.6; // on settings.nodesIndexes, and derivedNodes clear and create visuals van.derive(() => { if (!settings.nodesIndexes.val) return; group.children.forEach((c) => (c as Text).dispose()); group.clear(); derivedNodes.val.forEach((node, index) => { const text = new Text(`${index}`); text.position.set(...node); text.updateScale(size * derivedDisplayScale.rawVal); group.add(text); }); }); // on settings.nodesIndexes and setting.displayScale change van.derive(() => { derivedDisplayScale.val; // triggers update if (!settings.nodesIndexes.rawVal) return; group.children.forEach((c) => (c as Text).updateScale(size * derivedDisplayScale.rawVal) ); }); // on settings.nodesIndexes update visibility van.derive(() => { group.visible = settings.nodesIndexes.val; }); return group; }