@muds/node
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

@muds/node

NPM @muds/node License: MIT

Overview

@muds/node is a minimal 2D/3D scene node graph library for muds, a modular microframework for interactive data-oriented systems.

API Documentation

http://andykswong.github.io/muds

Usage

npm install --save @muds/node

To create a node hierarchy:

import { Node, setParent, preorderTraverse } from '@muds/node';

const nodes = new Map();

const root = 1, child = 2;
nodes.set(child, new Node());
nodes.set(root, new Node());
setParent(nodes, child, root);
console.assert(nodes.get(root).lastChild === child && nodes.get(child).parent === root);

for (const [nodeId, node] of preorderTraverse(nodes, root)) {
  console.log(nodeId);
}
// prints: 1 2

Using the 3D transform component:

import { Transform } from '@muds/node';

const transform = new Transform();
transform.translation = [1, 2, 3]; // x-y-z translation
transform.rotation = [0, 0, 0, 1]; // quaternion rotation
transform.scale = [5, 6, 7]; // x-y-z scaling

transform.update(true); // if false (default), it sets transform.needUpdate = true only without updating the matrix.
console.log(transform.matrix); // prints the 4x4 local transformation matrix = T * R * S

To create a 3D transform hierarchy and calculate world transformations:

import { Node, Transform, setParent, updateWorldTransforms } from '@muds/node';

const nodes = new Map();
const transforms = new Map();
const worldTransforms /* : Map<number, Mat4> type */ = new Map();

const root = 1, child = 2;
nodes.set(root, new Node());
transforms.set(root, new Transform());
nodes.set(child, new Node());
transforms.set(child, new Transform());
setParent(nodes, child, root);
// set root/child transform logic omitted

updateWorldTransforms(nodes, transforms, worldTransforms, root);
console.log(worldTransforms.get(child)); // prints the 4x4 world matrix = (parent transform) * (child transform)

There are also 2D versions of above and the APIs are similar except for being 2D:

import { Transform2D, updateWorldTransforms2D } from '@muds/node';

License

This repository and the code inside it is licensed under the MIT License. Read LICENSE for more information.

Package Sidebar

Install

npm i @muds/node

Weekly Downloads

1

Version

0.1.0

License

MIT

Unpacked Size

31.9 kB

Total Files

28

Last publish

Collaborators

  • andykswong