|  | @@ -50,9 +50,23 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |                  this.rootSelector = options;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            this.gearvr = options.gearvr !== undefined ? options.gearvr : false;
 | 
	
		
			
				|  |  | -            this.wmrright = options.wmrright !== undefined ? options.wmrright : false;
 | 
	
		
			
				|  |  | -            this.wmrleft = options.wmrleft !== undefined ? options.wmrleft : false;
 | 
	
		
			
				|  |  | +            // this.gearvr = options.gearvr !== undefined ? options.gearvr : false;
 | 
	
		
			
				|  |  | +            // this.wmrright = options.wmrright !== undefined ? options.wmrright : false;
 | 
	
		
			
				|  |  | +            // this.wmrleft = options.wmrleft !== undefined ? options.wmrleft : false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            this.xrType = undefined;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //TODO: FIX detection in better way! (now works for Oculus Browser only)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            this.hmd = false; 
 | 
	
		
			
				|  |  | +            this.threeDoF = false;
 | 
	
		
			
				|  |  | +            this.sixDoF = false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            this.threeDoFMobile = AFRAME.utils.device.isMobileVR() && AFRAME.utils.device.checkHeadsetConnected() && !navigator.userAgent.includes('Quest');
 | 
	
		
			
				|  |  | +            this.sixDoFMobile = AFRAME.utils.device.checkHeadsetConnected() && navigator.userAgent.includes('Quest');
 | 
	
		
			
				|  |  | +            this.sixDoFDesktop = !AFRAME.utils.device.isMobile && !AFRAME.utils.device.isMobileVR() && AFRAME.utils.device.checkHeadsetConnected();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          createdNode: function (nodeID, childID, childExtendsID, childImplementsIDs,
 | 
	
	
		
			
				|  | @@ -68,58 +82,52 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (this.state.scenes[childID]) {
 | 
	
		
			
				|  |  |                  let scene = this.state.scenes[childID];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +                //TODO: FIX
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  let prepairAvatar = new Promise((resolve, reject) => {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    function cb() {
 | 
	
		
			
				|  |  | -                        resolve("ok");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    createAvatarControl(scene, cb);
 | 
	
		
			
				|  |  | +                    document.body.appendChild(scene);
 | 
	
		
			
				|  |  | +                    let createAvatarPromise = new Promise(r=> r(createAvatarControl(scene)));
 | 
	
		
			
				|  |  | +                    return resolve(createAvatarPromise) 
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |                  prepairAvatar.then(res => {
 | 
	
		
			
				|  |  | -                    // console.log(res);
 | 
	
		
			
				|  |  | -                    createAvatar.call(self, childID);                  
 | 
	
		
			
				|  |  | -                    postLoadAction.call(self, childID);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (this.gearvr == true) {
 | 
	
		
			
				|  |  |                          console.log("CREATE GEARVR HERE!!");
 | 
	
		
			
				|  |  | -                        if (AFRAME.utils.device.isMobileVR()) {
 | 
	
		
			
				|  |  | +                        if (self.threeDoFMobile || _app.config.d3DoF ) {
 | 
	
		
			
				|  |  | +                            this.xrType = 'mobileVR';
 | 
	
		
			
				|  |  |                              let nodeName = 'gearvr-' + self.kernel.moniker();
 | 
	
		
			
				|  |  |                              createGearVRControls();
 | 
	
		
			
				|  |  |                              createGearVRController.call(self, childID, nodeName);
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (this.wmrright == true) {
 | 
	
		
			
				|  |  | -                        console.log("CREATE WMR RIGHT HERE!!");
 | 
	
		
			
				|  |  | -                        if (!AFRAME.utils.device.isMobileVR()) {
 | 
	
		
			
				|  |  | -                            if (AFRAME.utils.device.checkHeadsetConnected()) {
 | 
	
		
			
				|  |  | -                                let nodeName = 'wmrvr-right-' + self.kernel.moniker();
 | 
	
		
			
				|  |  | -                                createWMRVRControls('right');
 | 
	
		
			
				|  |  | -                                createWMRVR.call(this, childID, nodeName);
 | 
	
		
			
				|  |  | +                    
 | 
	
		
			
				|  |  | +                        console.log("CREATE XRController RIGHT HERE!!");
 | 
	
		
			
				|  |  | +                       // if (!AFRAME.utils.device.isMobileVR()) {
 | 
	
		
			
				|  |  | +                            if (self.sixDoFMobile || self.sixDoFDesktop || _app.config.d6DoF  ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                let nodeRight = 'xrcontroller-right-' + self.kernel.moniker();
 | 
	
		
			
				|  |  | +                                createXRControls('right');
 | 
	
		
			
				|  |  | +                                createXR.call(this, childID, nodeRight);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                console.log("CREATE XRController LEFT HERE!!");
 | 
	
		
			
				|  |  | +                       // if (!AFRAME.utils.device.isMobileVR()) {
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +                                let nodeLeft = 'xrcontroller-left-' + self.kernel.moniker();
 | 
	
		
			
				|  |  | +                                createXRControls('left');
 | 
	
		
			
				|  |  | +                                createXR.call(this, childID, nodeLeft);
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +                       // }
 | 
	
		
			
				|  |  | +                    
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    if (this.wmrleft == true) {
 | 
	
		
			
				|  |  | -                        console.log("CREATE WMR LEFT HERE!!");
 | 
	
		
			
				|  |  | -                        if (!AFRAME.utils.device.isMobileVR()) {
 | 
	
		
			
				|  |  | -                            if (AFRAME.utils.device.checkHeadsetConnected()) {
 | 
	
		
			
				|  |  | -                                let nodeName = 'wmrvr-left-' + self.kernel.moniker();
 | 
	
		
			
				|  |  | -                                createWMRVRControls('left');
 | 
	
		
			
				|  |  | -                                createWMRVR.call(this, childID, nodeName);
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +                     // console.log(res);
 | 
	
		
			
				|  |  | +                     createAvatar.call(self, childID);                  
 | 
	
		
			
				|  |  | +                     postLoadAction.call(self, childID);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                }).then(res=>{
 | 
	
		
			
				|  |  | +                    //document.body.appendChild(scene);
 | 
	
		
			
				|  |  |                  })
 | 
	
		
			
				|  |  |                  // this.state.appInitialized  = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                document.body.appendChild(scene); //append is not working in Edge browser
 | 
	
		
			
				|  |  | +                //document.body.appendChild(scene); //append is not working in Edge browser
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -178,6 +186,12 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            // if (node.extendsID == "http://vwf.example.com/aframe/atext.vwf") {
 | 
	
		
			
				|  |  | +            //     console.log("Text component initialized");
 | 
	
		
			
				|  |  | +            //     node.aframeObj.play();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              // if (node.prototypes.includes("http://vwf.example.com/aframe/aentity.vwf")) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //     var clientThatSatProperty = self.kernel.client();
 | 
	
	
		
			
				|  | @@ -260,26 +274,6 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |                  receiveModelTransformChanges(nodeId, 'scale', propertyValue);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // if (node.aframeObj.nodeName == "AUDIO" && propertyName == 'itemSrc') {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            //     //console.log("sat new item");
 | 
	
		
			
				|  |  | -            //     let elID = '#' + node.aframeObj.getAttribute('id');
 | 
	
		
			
				|  |  | -            //     Object.entries(this.state.nodes).forEach(el => {
 | 
	
		
			
				|  |  | -            //         let src = el[1].aframeObj.getAttribute('src');
 | 
	
		
			
				|  |  | -            //         if (src){
 | 
	
		
			
				|  |  | -            //            // console.log("my: " + src);
 | 
	
		
			
				|  |  | -            //             if (src == elID)
 | 
	
		
			
				|  |  | -            //             self.kernel.callMethod(el[0], "updateSrc", [elID])
 | 
	
		
			
				|  |  | -            //         }
 | 
	
		
			
				|  |  | -            //     })
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // if ( propertyName == "position" ) {
 | 
	
		
			
				|  |  | -            //     receiveModelTransformChanges( nodeId, propertyValue );
 | 
	
		
			
				|  |  | -            // }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              if (node.aframeObj.nodeName == "AUDIO" && propertyName == 'itemSrc') {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  //console.log("sat new item");
 | 
	
	
		
			
				|  | @@ -475,16 +469,22 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |              updateAvatarPosition();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //update vr controllers
 | 
	
		
			
				|  |  | -            if (this.gearvr == true) {
 | 
	
		
			
				|  |  | -                updateHandControllerVR('gearvr-', '#gearvrcontrol');
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (this.wmrright == true) {
 | 
	
		
			
				|  |  | -                updateHandControllerVR('wmrvr-right-', '#wmrvrcontrolright');
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (this.wmrleft == true) {
 | 
	
		
			
				|  |  | -                updateHandControllerVR('wmrvr-left-', '#wmrvrcontrolleft');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if(self.hmd){
 | 
	
		
			
				|  |  | +                if(self.threeDoF )
 | 
	
		
			
				|  |  | +                        updateHandControllerVR('gearvr-', '#gearvrcontrol');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if(this.sixDoF ) {
 | 
	
		
			
				|  |  | +                        updateHandControllerVR('xrcontroller-right-', '#xrcontrollerright');
 | 
	
		
			
				|  |  | +                        updateHandControllerVR('xrcontroller-left-', '#xrcontrollerleft');
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              //lerpTick ();
 | 
	
		
			
				|  |  |          },
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -643,7 +643,7 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function updateAvatarPosition() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let delta = 0.0001;
 | 
	
		
			
				|  |  | +        let delta = 0.001;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          let avatarName = 'avatar-' + self.kernel.moniker();
 | 
	
		
			
				|  |  |          var node = self.state.nodes[avatarName];
 | 
	
	
		
			
				|  | @@ -654,25 +654,51 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          if (el) {
 | 
	
		
			
				|  |  |              //let position = el.object3D.getWorldPosition(); //el.getAttribute('position');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            //var position;
 | 
	
		
			
				|  |  | +            // if((self.hmd && self.sixDoF) || _app.config.d6DoF){
 | 
	
		
			
				|  |  | +            //     position = el.getAttribute('position');
 | 
	
		
			
				|  |  | +            // } else {
 | 
	
		
			
				|  |  | +            //     position = new THREE.Vector3();
 | 
	
		
			
				|  |  | +            //     el.object3D.getWorldPosition(position);
 | 
	
		
			
				|  |  | +            // }
 | 
	
		
			
				|  |  | +            //let position = el.getAttribute('position');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //let position = el.getAttribute('position');
 | 
	
		
			
				|  |  | +            //let position = el.object3D.position.clone();
 | 
	
		
			
				|  |  |              let position = new THREE.Vector3();
 | 
	
		
			
				|  |  | -            el.object3D.getWorldPosition(position);
 | 
	
		
			
				|  |  | +            el.object3D.localToWorld(position);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              let rotation = el.getAttribute('rotation'); //getWorldRotation(el, 'YXZ');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              let lastRotation = self.nodes[avatarName].selfTickRotation;
 | 
	
		
			
				|  |  | -            let lastPosition = self.nodes[avatarName].selfTickPosition;
 | 
	
		
			
				|  |  | +            let lastPosition = self.nodes[avatarName].selfTickPosition ? self.nodes[avatarName].selfTickPosition: new THREE.Vector3(0, 0, 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // let currentPosition = node.aframeObj.getAttribute('position');
 | 
	
		
			
				|  |  |              // let currentRotation = node.aframeObj.getAttribute('rotation');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (position && rotation && lastPosition && lastRotation) {
 | 
	
		
			
				|  |  | -                if (compareCoordinates(position, lastPosition, delta) || Math.abs(rotation.y - lastRotation.y) > delta) {
 | 
	
		
			
				|  |  | -                    console.log("not equal!!")
 | 
	
		
			
				|  |  | -                    self.kernel.callMethod(avatarName, "followAvatarControl", [position, rotation]);
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // compareCoordinates(position, lastPosition, delta) 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if(position && lastPosition ) {
 | 
	
		
			
				|  |  | +                let distance = lastPosition.distanceTo(position);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (distance > delta)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    console.log("position not equal");
 | 
	
		
			
				|  |  | +                    self.kernel.setProperty(avatarName, "position", position);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (rotation && lastRotation) {
 | 
	
		
			
				|  |  | +                let distance = Math.abs(rotation.y - lastRotation.y);
 | 
	
		
			
				|  |  | +                if ( distance > delta) {
 | 
	
		
			
				|  |  | +                    console.log("rotation not equal")
 | 
	
		
			
				|  |  | +                    self.kernel.callMethod(avatarName, "updateAvatarRotation", [rotation]);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              self.nodes[avatarName].selfTickRotation = Object.assign({}, rotation);
 | 
	
		
			
				|  |  | -            self.nodes[avatarName].selfTickPosition = Object.assign({}, position);
 | 
	
		
			
				|  |  | +            //self.nodes[avatarName].selfTickPosition = Object.assign({}, position);
 | 
	
		
			
				|  |  | +            self.nodes[avatarName].selfTickPosition = position.clone();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -681,7 +707,7 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |      function updateHandControllerVR(aName, aSelector) {
 | 
	
		
			
				|  |  |          //let avatarName = 'avatar-' + self.kernel.moniker();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let delta = 0.0001
 | 
	
		
			
				|  |  | +        let delta = 0.001
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          let avatarName = aName + self.kernel.moniker();
 | 
	
		
			
				|  |  |          var node = self.state.nodes[avatarName];
 | 
	
	
		
			
				|  | @@ -692,30 +718,57 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          if (el) {
 | 
	
		
			
				|  |  |              //let position = el.object3D.getWorldPosition() //el.getAttribute('position');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            let position = new THREE.Vector3();
 | 
	
		
			
				|  |  | -            el.object3D.getWorldPosition(position);
 | 
	
		
			
				|  |  | +            // let position = new THREE.Vector3();
 | 
	
		
			
				|  |  | +            // el.object3D.getWorldPosition(position);
 | 
	
		
			
				|  |  | +            // let rotation = getWorldRotation(el, 'XYZ');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            let rotation = getWorldRotation(el, 'XYZ');
 | 
	
		
			
				|  |  | +            // let position = el.getAttribute('position');
 | 
	
		
			
				|  |  | +            // let rotation = el.getAttribute('rotation');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            //let rotation = el.getAttribute('rotation');
 | 
	
		
			
				|  |  | +           // let position = el.object3D.position;
 | 
	
		
			
				|  |  | +           let position = new THREE.Vector3();
 | 
	
		
			
				|  |  | +           el.object3D.localToWorld(position);
 | 
	
		
			
				|  |  | +            let rotation = el.getAttribute('rotation'); //getWorldRotation(el, 'YXZ');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              let lastRotation = self.nodes[avatarName].selfTickRotation;
 | 
	
		
			
				|  |  | -            let lastPosition = self.nodes[avatarName].selfTickPosition;
 | 
	
		
			
				|  |  | +            let lastPosition = self.nodes[avatarName].selfTickPosition ? self.nodes[avatarName].selfTickPosition: new THREE.Vector3(0, 0, 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // let currentPosition = node.aframeObj.getAttribute('position');
 | 
	
		
			
				|  |  |              //let currentRotation = node.aframeObj.getAttribute('rotation');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (position && rotation && lastRotation && lastPosition) {
 | 
	
		
			
				|  |  | -                if (compareCoordinates(position, lastPosition, delta) || compareCoordinates(rotation, lastRotation, delta)) {
 | 
	
		
			
				|  |  | -                    console.log("not equal!!");
 | 
	
		
			
				|  |  | -                    vwf_view.kernel.callMethod(avatarName, "updateVRControl", [position, rotation]);
 | 
	
		
			
				|  |  | +            if (position && lastPosition) {
 | 
	
		
			
				|  |  | +                let distance = lastPosition.distanceTo(position);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (distance > delta)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    console.log("position not equal");
 | 
	
		
			
				|  |  | +                    self.kernel.setProperty(avatarName, "position", position);
 | 
	
		
			
				|  |  | +                    self.kernel.callMethod(avatarName, "moveVRController",[]);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            if (rotation && lastRotation) {
 | 
	
		
			
				|  |  | +                let distance = compareCoordinates(rotation, lastRotation, delta)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (distance)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    console.log("rotation not equal");
 | 
	
		
			
				|  |  | +                    self.kernel.setProperty(avatarName, "rotation", rotation);
 | 
	
		
			
				|  |  | +                    self.kernel.callMethod(avatarName, "moveVRController",[]);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // if (position && rotation && lastRotation && lastPosition) {
 | 
	
		
			
				|  |  | +            //     if (compareCoordinates(position, lastPosition, delta) || compareCoordinates(rotation, lastRotation, delta)) {
 | 
	
		
			
				|  |  | +            //         console.log("not equal!!");
 | 
	
		
			
				|  |  | +            //         vwf_view.kernel.callMethod(avatarName, "updateVRControl", [position, rotation]);
 | 
	
		
			
				|  |  | +            //     }
 | 
	
		
			
				|  |  | +            // }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //vwf_view.kernel.callMethod(avatarName, "updateVRControl", [position, rotation]);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            self.nodes[avatarName].selfTickPosition = Object.assign({}, position);
 | 
	
		
			
				|  |  | +            self.nodes[avatarName].selfTickPosition = position.clone();
 | 
	
		
			
				|  |  |              self.nodes[avatarName].selfTickRotation = Object.assign({}, rotation);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -749,7 +802,7 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          //console.log(axes);
 | 
	
		
			
				|  |  |          let el = document.querySelector('#avatarControl');
 | 
	
		
			
				|  |  |          let position = new THREE.Vector3();
 | 
	
		
			
				|  |  | -        el.object3D.getWorldPosition(position);
 | 
	
		
			
				|  |  | +        el.object3D.localToWorld(position);//getWorldPosition(position);
 | 
	
		
			
				|  |  |          let vel = new THREE.Vector3(axes[0], 0, -axes[1]);
 | 
	
		
			
				|  |  |          el.object3D.position.add(getMovementVector(el,vel));
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -772,7 +825,7 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          //el.object3D.rotation.set(val+rotation.x, rotation.y, rotation.z)
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function createAvatarControl(aScene, cb) {
 | 
	
		
			
				|  |  | +    async function createAvatarControl(aScene) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          let avatarName = 'avatar-' + self.kernel.moniker();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -780,8 +833,10 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          avatarEl.setAttribute('id', 'avatarControlParent');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (AFRAME.utils.device.isMobileVR()) {
 | 
	
		
			
				|  |  | +        if (self.d3DoF || _app.config.d3DoF) {
 | 
	
		
			
				|  |  | +            //avatarEl.setAttribute('gearvr-controls', {}); 
 | 
	
		
			
				|  |  |              avatarEl.setAttribute('movement-controls', {});//{'controls': 'gamepad'});
 | 
	
		
			
				|  |  | +           // avatarEl.setAttribute("gamepad-controls", {});
 | 
	
		
			
				|  |  |              //avatarEl.setAttribute('position', '0 0 0');
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -791,11 +846,15 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          controlEl.setAttribute('id', 'avatarControl');
 | 
	
		
			
				|  |  |          controlEl.setAttribute('wasd-controls', {acceleration:20});
 | 
	
		
			
				|  |  | -        controlEl.setAttribute('look-controls', { pointerLockEnabled: false });
 | 
	
		
			
				|  |  | +        controlEl.setAttribute('look-controls', { pointerLockEnabled: false});
 | 
	
		
			
				|  |  | +        controlEl.setAttribute('look-controls', 'enabled', true );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //controlEl.setAttribute('gamepad-controls', {'controller': 0});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (AFRAME.utils.device.isMobile()) {
 | 
	
		
			
				|  |  |              //self.state.showMobileJoystick()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            controlEl.setAttribute('look-controls', 'enabled', true );
 | 
	
		
			
				|  |  |              controlEl.setAttribute("virtual-gamepad-controls", {});
 | 
	
		
			
				|  |  |              controlEl.addEventListener("move", setJoystickMoveInput);
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -817,13 +876,14 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          cursorEl.setAttribute('raycaster', 'objects', '.clickable');
 | 
	
		
			
				|  |  |          cursorEl.setAttribute('raycaster', 'showLine', false);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (AFRAME.utils.device.isMobileVR()) { }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          // cursorEl.setAttribute('raycaster', {objects: '.intersectable', showLine: true, far: 100});
 | 
	
		
			
				|  |  |          // cursorEl.setAttribute('raycaster', 'showLine', true);
 | 
	
		
			
				|  |  |          controlEl.appendChild(cursorEl);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          avatarEl.appendChild(controlEl);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //avatarEl.setAttribute('avatar', {});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          aScene.appendChild(avatarEl);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          controlEl.setAttribute('camera', 'active', true);
 | 
	
	
		
			
				|  | @@ -840,8 +900,8 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |          // aScene.appendChild(arControl);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        cb();
 | 
	
		
			
				|  |  | +        return "OK!"
 | 
	
		
			
				|  |  | +       // cb();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // let gearVRControlsEl = document.createElement('a-entity');
 | 
	
		
			
				|  |  |          // gearVRControlsEl.setAttribute('id', 'gearvr-'+avatarName);
 | 
	
	
		
			
				|  | @@ -865,12 +925,12 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function createWMRVR(nodeID, nodeName) {
 | 
	
		
			
				|  |  | +    function createXR(nodeID, nodeName) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          var newNode = {
 | 
	
		
			
				|  |  |              "id": nodeName,
 | 
	
		
			
				|  |  |              "uri": nodeName,
 | 
	
		
			
				|  |  | -            "extends": "http://vwf.example.com/aframe/wmrvrcontroller.vwf",
 | 
	
		
			
				|  |  | +            "extends": "http://vwf.example.com/aframe/xrcontroller.vwf",
 | 
	
		
			
				|  |  |              "properties": {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -1025,35 +1085,57 @@ define(["module", "vwf/view"], function (module, view) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function createGearVRControls() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let sceneEl = document.querySelector('a-scene');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          let avatarControl = document.querySelector('#avatarControlParent');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let gearvr = document.createElement('a-entity');
 | 
	
		
			
				|  |  | -        gearvr.setAttribute('id', 'gearvrcontrol');
 | 
	
		
			
				|  |  | -        gearvr.setAttribute('gearvr-controls', {
 | 
	
		
			
				|  |  | +        let el = document.createElement('a-entity');
 | 
	
		
			
				|  |  | +        el.setAttribute('id', 'gearvrcontrol');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        el.setAttribute('gearvr-controls', {
 | 
	
		
			
				|  |  |              'hand': 'right',
 | 
	
		
			
				|  |  |              'model': true
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  |          // gearvr.setAttribute('gearvr-controls', 'hand', 'right');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        gearvr.setAttribute('gearvrcontrol', {});
 | 
	
		
			
				|  |  | -        avatarControl.appendChild(gearvr);
 | 
	
		
			
				|  |  | +        el.setAttribute('teleport-controls', { 
 | 
	
		
			
				|  |  | +            cameraRig: '#avatarControlParent',
 | 
	
		
			
				|  |  | +            teleportOrigin: '#avatarControl',
 | 
	
		
			
				|  |  | +            startEvents: 'teleportstart',
 | 
	
		
			
				|  |  | +            endEvents: 'teleportend'
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        el.setAttribute('gearvrcontrol', {});
 | 
	
		
			
				|  |  | +        avatarControl.appendChild(el);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function createWMRVRControls(hand) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        let sceneEl = document.querySelector('a-scene');
 | 
	
		
			
				|  |  | +    function createXRControls(hand) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          let avatarControl = document.querySelector('#avatarControlParent');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        let wmrvr = document.createElement('a-entity');
 | 
	
		
			
				|  |  | -        wmrvr.setAttribute('id', 'wmrvrcontrol' + hand);
 | 
	
		
			
				|  |  | -        wmrvr.setAttribute('windows-motion-controls', '');
 | 
	
		
			
				|  |  | -        wmrvr.setAttribute('windows-motion-controls', 'hand', hand);
 | 
	
		
			
				|  |  | -        wmrvr.setAttribute('wmrvrcontrol', { 'hand': hand });
 | 
	
		
			
				|  |  | -        avatarControl.appendChild(wmrvr);
 | 
	
		
			
				|  |  | +        let el = document.createElement('a-entity');
 | 
	
		
			
				|  |  | +        el.setAttribute('id', 'xrcontroller' + hand);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        el.setAttribute('hand-controls', {
 | 
	
		
			
				|  |  | +            'hand': hand,
 | 
	
		
			
				|  |  | +            'handModelStyle': 'lowPoly',
 | 
	
		
			
				|  |  | +            'color': '#ffcccc'
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // wmrvr.setAttribute('windows-motion-controls', '');
 | 
	
		
			
				|  |  | +        // wmrvr.setAttribute('windows-motion-controls', 'hand', hand);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        el.setAttribute('xrcontroller', { 'hand': hand });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //add teleport controls
 | 
	
		
			
				|  |  | +        el.setAttribute('teleport-controls', { 
 | 
	
		
			
				|  |  | +            cameraRig: '#avatarControlParent',
 | 
	
		
			
				|  |  | +            teleportOrigin: '#avatarControl',
 | 
	
		
			
				|  |  | +            startEvents: 'teleportstart',
 | 
	
		
			
				|  |  | +            endEvents: 'teleportend'
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        avatarControl.appendChild(el);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |