UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

77 lines 2.96 kB
import { defaultsOwnKeysRecordMap } from "../../collections/defaultsCollections"; import { mathNodeDefaults, mathNodeSchema } from "../../interface/IMathNode"; import GameGraphChild from "../GameGraphChild"; import { extractParenthesisTree, compile } from "./compile"; import math from "../../math"; import { TokenList, tokenize } from "./tokenize"; import { runtimeIncludeKeysMap, runtimeSchemaMap } from "../../collections/runtimeCollections"; class MathNode extends GameGraphChild { static componentName = "mathNode"; static defaults = mathNodeDefaults; static schema = mathNodeSchema; static includeKeys = ["expression"]; mathFn = math; setRuntimeData(runtimeDefaults, runtimeSchema, runtimeIncludeKeys) { this.runtimeDefaults = runtimeDefaults; runtimeSchema ? runtimeSchemaMap.set(this, runtimeSchema) : runtimeSchemaMap.delete(this); runtimeIncludeKeys ? runtimeIncludeKeysMap.set(this, runtimeIncludeKeys) : runtimeIncludeKeysMap.delete(this); if (!runtimeSchema) { this.runtimeData = undefined; this.$emitEvent("runtimeSchema"); return; } const runtimeData = (this.runtimeData ??= { out: 0 }); const runtimeValues = { ...runtimeData }; const ownKeysRecord = {}; for (const key of Object.keys(runtimeSchema)) { Object.defineProperty(runtimeData, key, { get: () => { return runtimeValues[key] ?? 0; }, set: (value) => { runtimeValues[key] = value; runtimeData.out = eval(this.compiled); }, enumerable: true }); ownKeysRecord[key] = true; } ownKeysRecord.out = true; defaultsOwnKeysRecordMap.set(mathNodeDefaults, ownKeysRecord); runtimeData.out = eval(this.compiled); runtimeSchema.out = Number; runtimeDefaults.out = 0; runtimeIncludeKeys.add("out"); this.$emitEvent("runtimeSchema"); } compiled; _expression; get expression() { return this._expression; } set expression(val) { this._expression = val; if (!val) { this.setRuntimeData(); return; } const tokenList = new TokenList(); try { extractParenthesisTree(tokenize(val, tokenList)); } catch (err) { this.setRuntimeData(); console.warn(err); return; } const varTokens = []; this.compiled = compile(tokenList, varTokens); this.setRuntimeData(Object.fromEntries(varTokens.map((token) => [token.value, 0])), Object.fromEntries(varTokens.map((token) => [token.value, Number])), new Set(varTokens.map((token) => token.value))); } } export default MathNode; //# sourceMappingURL=index.js.map