UNPKG

glam

Version:

Experimental WebGL Engine

165 lines (111 loc) 5.87 kB
'use strict'; var _tape = require('tape'); var _tape2 = _interopRequireDefault(_tape); var _glMat = require('gl-mat4'); var _lib = require('../../lib'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (0, _tape2.default)("Scene", function (t) { t.test("A node can be added and removed from the scene node", function (t) { t.plan(11); var scene = (0, _lib.Scene)(); var nodeA = {}; var nodeB = {}; scene.add(nodeA); scene.add(nodeB); var children = scene.children(); t.equals(children.length, 2, "The scene should have two things in it"); t.equals(children[0], nodeA, "The first should be node a"); t.equals(children[1], nodeB, "The second should be node b"); t.equals(scene.parent(nodeA), scene, "node a's parent is scene"); t.equals(scene.parent(nodeB), scene, "node b's parent is scene"); scene.remove(nodeA); t.equals(children.length, 1, "The scene should still have one thing on it."); t.equals(children[0], nodeB, "It should be node b"); t.equals(children, scene.children(), "A second scene.children should be the same list"); t.equals(scene.parent(nodeA), undefined, "node a's parent is undefined"); t.equals(scene.parent(nodeB), scene, "node b's parent is left alone"); scene.remove(nodeB); t.equals(children.length, 0, "The scene should be empty after removing all the nodes"); }); t.test("Nodes can be made children", function (t) { t.plan(11); var scene = (0, _lib.Scene)(); var root = {}; var nodeA = {}; var nodeB = {}; scene.add(root, nodeA); scene.add(root, nodeB); var children = scene.children(root); t.equals(children.length, 2, "The root should have two things in it"); t.equals(children[0], nodeA, "The first should be node a"); t.equals(children[1], nodeB, "The second should be node b"); t.equals(scene.parent(nodeA), root, "node a's parent is root"); t.equals(scene.parent(nodeB), root, "node b's parent is root"); scene.remove(root, nodeA); t.equals(children.length, 1, "The root should still have one thing on it."); t.equals(children[0], nodeB, "It should be node b"); t.equals(children, scene.children(root), "A second scene.children should be the same list"); t.equals(scene.parent(nodeA), undefined, "node a's parent is undefined"); t.equals(scene.parent(nodeB), root, "node b's parent is still the same"); scene.remove(root, nodeB); t.equals(children.length, 0, "The scene should be empty"); }); t.test("Update the sorted types in the graph", function (t) { t.plan(10); var scene = (0, _lib.Scene)(); var root = { type: ['root'] }; var nodeA = { type: ['subnode', 'nodeA'] }; var nodeB = { type: ['subnode', 'nodeB'] }; var nodeC = { type: ['subnode', 'nodeC'] }; var nodeD = { type: ['subnode', 'nodeD'] }; scene.add(root, nodeA); scene.add(root, nodeB); t.isEquivalent(scene.getByType('root'), [], "The root isn't counted when nothing is in the scene"); t.isEquivalent(scene.getByType('subnode'), [], "The subnode isn't counted when nothing is in the scene"); scene.add(root); t.isEquivalent(scene.getByType('root'), [root], "The root shows up when added to the scene"); t.isEquivalent(scene.getByType('subnode'), [nodeA, nodeB], "The subnodes show up when the root is added to the scene"); scene.add(root, nodeC); t.isEquivalent(scene.getByType('subnode'), [nodeA, nodeB, nodeC], "Adding a single node in works"); scene.add(nodeD); t.isEquivalent(scene.getByType('subnode'), [nodeA, nodeB, nodeC, nodeD], "Adding a single node to the root works"); t.isEquivalent(scene.getByType('nodeD'), [nodeD], "Nodes can have multiple types"); scene.remove(root); t.isEquivalent(scene.getByType('root'), [], "Removing a node works"); t.isEquivalent(scene.getByType('subnode'), [nodeD], "Removing the parent removes the children "); t.isEquivalent(scene.getByType('nodeD'), [nodeD], "Detached node is still there"); }); t.test("Update the global matrices of nodes", function (t) { t.plan(12); // TODO var scene = (0, _lib.Scene)(); var parent = (0, _lib.Mesh)(); var child = (0, _lib.Mesh)(); var identityMatrix = (0, _glMat.identity)([]); var childLocalMatrix = (0, _glMat.identity)([]); var childGlobalMatrix = (0, _glMat.identity)([]); var parentMovedMatrix = (0, _glMat.identity)([]); scene.add(parent); scene.add(parent, child); scene.updateTransforms(); t.isEquivalent(parent.transform.local, identityMatrix, "parent local transform is clean to start"); t.isEquivalent(parent.transform.global, identityMatrix, "parent global transform is clean to start"); t.isEquivalent(child.transform.local, identityMatrix, "child local transform is clean to start"); t.isEquivalent(child.transform.global, identityMatrix, "child global transform is clean to start"); parentMovedMatrix[13] = 7; parent.position[1] = 7; scene.updateTransforms(); t.isEquivalent(parent.transform.local, parentMovedMatrix, "parent local transform is moved"); t.isEquivalent(parent.transform.global, parentMovedMatrix, "parent global transform is moved"); t.isEquivalent(child.transform.local, identityMatrix, "child local transform is clean"); t.isEquivalent(child.transform.global, parentMovedMatrix, "child global transform matches the parent"); childLocalMatrix[13] = 5; childGlobalMatrix[13] = 12; child.position[1] = 5; scene.updateTransforms(); t.isEquivalent(parent.transform.local, parentMovedMatrix, "parent local transform is still moved"); t.isEquivalent(parent.transform.global, parentMovedMatrix, "parent global transform is still moved"); t.isEquivalent(child.transform.local, childLocalMatrix, "child local transform is custom"); t.isEquivalent(child.transform.global, childGlobalMatrix, "child global transform is the combination of the two matrices"); }); });