|  | @@ -0,0 +1,556 @@
 | 
	
		
			
				|  |  | +"use strict";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
 | 
	
		
			
				|  |  | +// Secretary of Defense (Personnel & Readiness).
 | 
	
		
			
				|  |  | +// 
 | 
	
		
			
				|  |  | +// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 | 
	
		
			
				|  |  | +// in compliance with the License. You may obtain a copy of the License at
 | 
	
		
			
				|  |  | +// 
 | 
	
		
			
				|  |  | +//   http://www.apache.org/licenses/LICENSE-2.0
 | 
	
		
			
				|  |  | +// 
 | 
	
		
			
				|  |  | +// Unless required by applicable law or agreed to in writing, software distributed under the License
 | 
	
		
			
				|  |  | +// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 | 
	
		
			
				|  |  | +// or implied. See the License for the specific language governing permissions and limitations under
 | 
	
		
			
				|  |  | +// the License.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/// vwf/model/scenejs.js is a placeholder for a 3-D scene manager.
 | 
	
		
			
				|  |  | +/// 
 | 
	
		
			
				|  |  | +/// @module vwf/model/scenejs
 | 
	
		
			
				|  |  | +/// @requires vwf/model
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +define(["module", "vwf/model", "vwf/utility"], function (module, model, utility) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var self;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // vwf/model/example/scene.js is a demonstration of a scene manager.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return model.load(module, {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // == Module Definition ====================================================================
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- pipeline -----------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // pipeline: [ log ], // vwf <=> log <=> scene
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- initialize ---------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        initialize: function () {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            self = this;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            this.state = {
 | 
	
		
			
				|  |  | +                nodes: {},
 | 
	
		
			
				|  |  | +                scenes: {},
 | 
	
		
			
				|  |  | +                prototypes: {},
 | 
	
		
			
				|  |  | +                createLocalNode: function (nodeID, childID, childExtendsID, childImplementsIDs,
 | 
	
		
			
				|  |  | +                    childSource, childType, childIndex, childName, callback) {
 | 
	
		
			
				|  |  | +                    return {
 | 
	
		
			
				|  |  | +                        "parentID": nodeID,
 | 
	
		
			
				|  |  | +                        "ID": childID,
 | 
	
		
			
				|  |  | +                        "extendsID": childExtendsID,
 | 
	
		
			
				|  |  | +                        "implementsIDs": childImplementsIDs,
 | 
	
		
			
				|  |  | +                        "source": childSource,
 | 
	
		
			
				|  |  | +                        "type": childType,
 | 
	
		
			
				|  |  | +                        "name": childName,
 | 
	
		
			
				|  |  | +                        "prototypes": undefined,
 | 
	
		
			
				|  |  | +                        "aframeObj": undefined,
 | 
	
		
			
				|  |  | +                        "componentName": undefined
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    };
 | 
	
		
			
				|  |  | +                },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                isComponentClass: function (prototypes, classID) {
 | 
	
		
			
				|  |  | +                    if (prototypes) {
 | 
	
		
			
				|  |  | +                        for (var i = 0; i < prototypes.length; i++) {
 | 
	
		
			
				|  |  | +                            if (prototypes[i] === classID) {
 | 
	
		
			
				|  |  | +                                //console.info( "prototypes[ i ]: " + prototypes[ i ] );
 | 
	
		
			
				|  |  | +                                return true;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    return false;
 | 
	
		
			
				|  |  | +                },
 | 
	
		
			
				|  |  | +                isComponentNode: function (prototypes) {
 | 
	
		
			
				|  |  | +                    var found = false;
 | 
	
		
			
				|  |  | +                    if (prototypes) {
 | 
	
		
			
				|  |  | +                        for (var i = 0; i < prototypes.length && !found; i++) {
 | 
	
		
			
				|  |  | +                            found = (prototypes[i] === "http://vwf.example.com/aframe/componentNode.vwf");
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    return found;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            this.state.kernel = this.kernel.kernel.kernel;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //this.state.kernel = this.kernel.kernel.kernel;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        // == Model API ============================================================================
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- creatingNode -------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        creatingNode: function (nodeID, childID, childExtendsID, childImplementsIDs,
 | 
	
		
			
				|  |  | +            childSource, childType, childIndex, childName, callback /* ( ready ) */) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // If the parent nodeID is 0, this node is attached directly to the root and is therefore either 
 | 
	
		
			
				|  |  | +            // the scene or a prototype.  In either of those cases, save the uri of the new node
 | 
	
		
			
				|  |  | +            var childURI = (nodeID === 0 ? childIndex : undefined);
 | 
	
		
			
				|  |  | +            var appID = this.kernel.application();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // If the node being created is a prototype, construct it and add it to the array of prototypes,
 | 
	
		
			
				|  |  | +            // and then return
 | 
	
		
			
				|  |  | +            var prototypeID = utility.ifPrototypeGetId(appID, this.state.prototypes, nodeID, childID);
 | 
	
		
			
				|  |  | +            if (prototypeID !== undefined) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                this.state.prototypes[prototypeID] = {
 | 
	
		
			
				|  |  | +                    parentID: nodeID,
 | 
	
		
			
				|  |  | +                    ID: childID,
 | 
	
		
			
				|  |  | +                    extendsID: childExtendsID,
 | 
	
		
			
				|  |  | +                    implementsID: childImplementsIDs,
 | 
	
		
			
				|  |  | +                    source: childSource,
 | 
	
		
			
				|  |  | +                    type: childType,
 | 
	
		
			
				|  |  | +                    name: childName
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            var protos = getPrototypes(this.kernel, childExtendsID);
 | 
	
		
			
				|  |  | +            //var kernel = this.kernel.kernel.kernel;
 | 
	
		
			
				|  |  | +            var node;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (this.state.isComponentNode(protos)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // Create the local copy of the node properties
 | 
	
		
			
				|  |  | +                if (this.state.nodes[childID] === undefined) {
 | 
	
		
			
				|  |  | +                    this.state.nodes[childID] = this.state.createLocalNode(nodeID, childID, childExtendsID, childImplementsIDs,
 | 
	
		
			
				|  |  | +                        childSource, childType, childIndex, childName, callback);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                node = this.state.nodes[childID];
 | 
	
		
			
				|  |  | +                node.prototypes = protos;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //node.aframeObj = createAFrameObject(node);
 | 
	
		
			
				|  |  | +                node.aframeObj = setAFrameObject(node);
 | 
	
		
			
				|  |  | +                // addNodeToHierarchy(node);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //notifyDriverOfPrototypeAndBehaviorProps();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- initializingNode -------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //   initializingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
 | 
	
		
			
				|  |  | +        //     childSource, childType, childIndex, childName ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- deletingNode -------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          deletingNode: function (nodeID) {
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +                        if (this.state.nodes[nodeID] !== undefined) {
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +                            var node = this.state.nodes[nodeID];
 | 
	
		
			
				|  |  | +                            if (node.aframeObj !== undefined) {
 | 
	
		
			
				|  |  | +                                // removes and destroys object
 | 
	
		
			
				|  |  | +                                node.aframeObj = undefined;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +                            delete this.state.nodes[nodeID];
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +                    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- initializingProperty -----------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        initializingProperty: function (nodeID, propertyName, propertyValue) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            var value = undefined;
 | 
	
		
			
				|  |  | +            var node = this.state.nodes[nodeID];
 | 
	
		
			
				|  |  | +            if (node !== undefined) {
 | 
	
		
			
				|  |  | +                value = this.settingProperty(nodeID, propertyName, propertyValue);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            return value;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- creatingProperty ---------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        creatingProperty: function (nodeID, propertyName, propertyValue) {
 | 
	
		
			
				|  |  | +            return this.initializingProperty(nodeID, propertyName, propertyValue);
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- settingProperty ----------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        settingProperty: function (nodeID, propertyName, propertyValue) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            var node = this.state.nodes[nodeID];
 | 
	
		
			
				|  |  | +            var value = undefined;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (node && node.aframeObj && utility.validObject(propertyValue)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                var aframeObject = node.aframeObj;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (isComponentNodeDefinition(node.prototypes)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    value = propertyValue;
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        default:
 | 
	
		
			
				|  |  | +                            value = undefined;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (value === undefined && isComponentDefinition(node.prototypes)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    value = propertyValue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "compName":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        default:
 | 
	
		
			
				|  |  | +                            value = undefined;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                //isALineDefinition(node.prototypes)
 | 
	
		
			
				|  |  | +                //if (value === undefined && node.componentName == 'line') { //isALineDefinition( node.prototypes )
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    value = propertyValue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    //let parentNodeAF = self.state.kernel.find(node.parentID);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // aframeObject.el.setAttribute('line', 'color')
 | 
	
		
			
				|  |  | +                    let parentNodeAF = aframeObject.el;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "start":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            parentNodeAF.setAttribute(aframeObject.compName, { start: propertyValue });
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "end":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            parentNodeAF.setAttribute(aframeObject.compName, { end: propertyValue });
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "color":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            parentNodeAF.setAttribute(aframeObject.compName, 'color', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "opacity":
 | 
	
		
			
				|  |  | +                            parentNodeAF.setAttribute(aframeObject.compName, 'opacity', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "visible":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            parentNodeAF.setAttribute(aframeObject.compName, 'visible', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        default:
 | 
	
		
			
				|  |  | +                            value = undefined;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (value === undefined && aframeObject.el.getAttribute(aframeObject.compName)) {
 | 
	
		
			
				|  |  | +                    
 | 
	
		
			
				|  |  | +                                        value = propertyValue;
 | 
	
		
			
				|  |  | +                    
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                        let parentNodeAF = aframeObject.el;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "enabled":
 | 
	
		
			
				|  |  | +                        parentNodeAF.setAttribute(aframeObject.compName, 'enabled', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "duration":
 | 
	
		
			
				|  |  | +                        parentNodeAF.setAttribute(aframeObject.compName, 'duration', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "deltaPos":
 | 
	
		
			
				|  |  | +                        parentNodeAF.setAttribute(aframeObject.compName, 'deltaPos', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "deltaRot":
 | 
	
		
			
				|  |  | +                        parentNodeAF.setAttribute(aframeObject.compName, 'deltaRot', propertyValue);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        default:
 | 
	
		
			
				|  |  | +                            value = undefined;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return value;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // -- gettingProperty ----------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        gettingProperty: function (nodeID, propertyName, propertyValue) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            var node = this.state.nodes[nodeID];
 | 
	
		
			
				|  |  | +            var value = undefined;
 | 
	
		
			
				|  |  | +            if (node && node.aframeObj) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                var aframeObject = node.aframeObj;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (isComponentNodeDefinition(node.prototypes)) {
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (value === undefined && isComponentDefinition(node.prototypes)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "compName":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                // isALineDefinition( node.prototypes ) aframeObject.compName == compName
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (value === undefined && isALineDefinition(node.prototypes)) {
 | 
	
		
			
				|  |  | +                    value = propertyValue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
 | 
	
		
			
				|  |  | +                    let parentNodeAF = aframeObject.el;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "start":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            value = AFRAME.utils.coordinates.stringify(parentNodeAF.getAttribute(aframeObject.compName).start);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "end":
 | 
	
		
			
				|  |  | +                            value = AFRAME.utils.coordinates.stringify(parentNodeAF.getAttribute(aframeObject.compName).end);
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "color":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).color;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "opacity":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).opacity;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "visible":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).visible;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (value === undefined && isAInterpolationDefinition(node.prototypes)) {
 | 
	
		
			
				|  |  | +                    value = propertyValue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
 | 
	
		
			
				|  |  | +                    let parentNodeAF = aframeObject.el;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    switch (propertyName) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "enabled":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).enabled;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "duration":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).duration;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "deltaPos":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).deltaPos;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        case "deltaRot":
 | 
	
		
			
				|  |  | +                            value = parentNodeAF.getAttribute(aframeObject.compName).deltaRot;
 | 
	
		
			
				|  |  | +                            break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (value !== undefined) {
 | 
	
		
			
				|  |  | +                propertyValue = value;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return value;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function getPrototypes(kernel, extendsID) {
 | 
	
		
			
				|  |  | +        var prototypes = [];
 | 
	
		
			
				|  |  | +        var id = extendsID;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while (id !== undefined) {
 | 
	
		
			
				|  |  | +            prototypes.push(id);
 | 
	
		
			
				|  |  | +            id = kernel.prototype(id);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return prototypes;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function isAInterpolationDefinition(prototypes) {
 | 
	
		
			
				|  |  | +        var found = false;
 | 
	
		
			
				|  |  | +        if (prototypes) {
 | 
	
		
			
				|  |  | +            for (var i = 0; i < prototypes.length && !found; i++) {
 | 
	
		
			
				|  |  | +                found = (prototypes[i] == "http://vwf.example.com/aframe/interpolation-component.vwf");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return found;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function isALineDefinition(prototypes) {
 | 
	
		
			
				|  |  | +        var found = false;
 | 
	
		
			
				|  |  | +        if (prototypes) {
 | 
	
		
			
				|  |  | +            for (var i = 0; i < prototypes.length && !found; i++) {
 | 
	
		
			
				|  |  | +                found = (prototypes[i] == "http://vwf.example.com/aframe/lineComponent.vwf");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return found;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function isComponentNodeDefinition(prototypes) {
 | 
	
		
			
				|  |  | +        var found = false;
 | 
	
		
			
				|  |  | +        if (prototypes) {
 | 
	
		
			
				|  |  | +            for (var i = 0; i < prototypes.length && !found; i++) {
 | 
	
		
			
				|  |  | +                found = (prototypes[i] == "http://vwf.example.com/aframe/componentNode.vwf");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return found;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function isComponentDefinition(prototypes) {
 | 
	
		
			
				|  |  | +        var found = false;
 | 
	
		
			
				|  |  | +        if (prototypes) {
 | 
	
		
			
				|  |  | +            for (var i = 0; i < prototypes.length && !found; i++) {
 | 
	
		
			
				|  |  | +                found = (prototypes[i] == "http://vwf.example.com/aframe/aentityComponent.vwf");
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return found;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function setAFrameObject(node, config) {
 | 
	
		
			
				|  |  | +        var protos = node.prototypes;
 | 
	
		
			
				|  |  | +        var aframeObj = {};
 | 
	
		
			
				|  |  | +        var sceneEl = document.querySelector('a-scene');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        aframeObj.id = node.parentID;
 | 
	
		
			
				|  |  | +        aframeObj.el = sceneEl.children[node.parentID];
 | 
	
		
			
				|  |  | +        aframeObj.el = Array.from(sceneEl.querySelectorAll('*')).filter(item => {return item.id == aframeObj.id})[0];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/lineComponent.vwf")) {
 | 
	
		
			
				|  |  | +            // aframeObj.id = node.parentID;
 | 
	
		
			
				|  |  | +            // aframeObj.el = sceneEl.children[node.parentID];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (node.name !== 'line') {
 | 
	
		
			
				|  |  | +                aframeObj.compName = node.name;
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                aframeObj.compName = "line";
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //aframeObj.el.setAttribute(node.type, {});
 | 
	
		
			
				|  |  | +            aframeObj.el.setAttribute(aframeObj.compName, {});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/interpolation-component.vwf")) {
 | 
	
		
			
				|  |  | +           
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +               // aframeObj.el.setAttribute(node.type, {});
 | 
	
		
			
				|  |  | +            aframeObj.compName = "interpolation";
 | 
	
		
			
				|  |  | +            aframeObj.el.setAttribute(aframeObj.compName, {});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return aframeObj;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // function addNodeToHierarchy(node) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //                 if (self.state.nodes[node.parentID] !== undefined) {
 | 
	
		
			
				|  |  | +    //                     var parent = self.state.nodes[node.parentID];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //                         if (parent.children === undefined) {
 | 
	
		
			
				|  |  | +    //                             parent.children = [];
 | 
	
		
			
				|  |  | +    //                         }
 | 
	
		
			
				|  |  | +    //                         parent.children.push(node.ID);
 | 
	
		
			
				|  |  | +    //                         console.info( "Adding child: " + node.ID );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //                 }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //         }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function addNodeToHierarchy(node) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (node.aframeObj) {
 | 
	
		
			
				|  |  | +            if (self.state.nodes[node.parentID] !== undefined) {
 | 
	
		
			
				|  |  | +                var parent = self.state.nodes[node.parentID];
 | 
	
		
			
				|  |  | +                if (parent.aframeObj) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    if (parent.children === undefined) {
 | 
	
		
			
				|  |  | +                        parent.children = [];
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    parent.children.push(node.ID);
 | 
	
		
			
				|  |  | +                    //console.info( "Adding child: " + childID + " to " + nodeID );
 | 
	
		
			
				|  |  | +                    //node.aframeObj.setAttribute(node.componentName, {});
 | 
	
		
			
				|  |  | +                    console.info("Adding child: " + node.ID);
 | 
	
		
			
				|  |  | +                    //parent.aframeObj.appendChild(node.aframeObj);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +});
 |