11/*
2- * v0.5.1 generated at Thu Apr 25 03:56:52 PM UTC 2024
2+ * v0.5.1 generated at Tue Jun 4 04:54:19 PM UTC 2024
33 * https://xrfragment.org
44 * SPDX-License-Identifier: MPL-2.0
55 */
@@ -1591,15 +1591,17 @@ var xrf = {}
15911591xrf . init = function ( opts ) {
15921592 opts = opts || { }
15931593
1594- xrf . debug = document . location . hostname . match ( / ^ ( l o c a l h o s t | [ 0 - 9 ] ) / ) ? 0 : false
1595- if ( ! xrf . debug ) {
1594+ xrf . debug = document . location . hostname . match ( / ^ ( l o c a l h o s t | [ 0 - 9 ] \. [ 0 - 9 ] ) / ) || document . location . port == '8080' ? 0 : false
1595+ if ( xrf . debug === false ) {
15961596 console . log ( "add #debug=[0-9] to URL to see XR Fragment debuglog" )
15971597 xrf . debug = parseInt ( ( document . location . hash . match ( / d e b u g = ( [ 0 - 9 ] ) / ) || [ 0 , '0' ] ) [ 1 ] )
1598+ } else {
1599+ xrf . stats ( )
15981600 }
15991601
16001602 xrf . Parser . debug = xrf . debug
16011603 xrf . detectCameraRig ( opts )
1602- for ( let i in opts ) xrf [ i ] = opts [ i ]
1604+ for ( let i in opts ) xrf [ i ] = opts [ i ]
16031605 xrf . emit ( 'init' , opts )
16041606 return xrf
16051607}
@@ -1626,10 +1628,9 @@ xrf.detectCameraRig = function(opts){
16261628xrf . stats = ( ) => {
16271629 // bookmarklet from https://github.com/zlgenuine/threejs_stats
16281630 ( function ( ) {
1629- for ( let i = 0 ; i < 4 ; i ++ ) {
1630- var script = document . createElement ( 'script' ) ; script . onload = function ( ) { var stats = new Stats ( ) ; stats . showPanel ( i ) ;
1631- stats . dom . style . marginTop = `${ i * 48 } px` ; document . body . appendChild ( stats . dom ) ; requestAnimationFrame ( function loop ( ) { stats . update ( ) ; requestAnimationFrame ( loop ) } ) ; } ; script . src = '//rawgit.com/mrdoob/stats.js/master/build/stats.min.js' ; document . head . appendChild ( script ) ;
1632- }
1631+ let i = 0 ;
1632+ var script = document . createElement ( 'script' ) ; script . onload = function ( ) { var stats = new Stats ( ) ; stats . showPanel ( i ) ;
1633+ stats . dom . style . marginTop = `${ i * 48 } px` ; document . body . appendChild ( stats . dom ) ; requestAnimationFrame ( function loop ( ) { stats . update ( ) ; requestAnimationFrame ( loop ) } ) ; } ; script . src = '//rawgit.com/mrdoob/stats.js/master/build/stats.min.js' ; document . head . appendChild ( script ) ;
16331634 } ) ( )
16341635}
16351636
@@ -1905,14 +1906,17 @@ xrf.model = {}
19051906xrf . mixers = [ ]
19061907
19071908xrf . init = ( ( init ) => function ( opts ) {
1909+ // operate in own subscene
19081910 let scene = new opts . THREE . Group ( )
19091911 opts . scene . add ( scene )
1910- opts . scene = scene
1912+ opts . sceneRoot = opts . scene
1913+ opts . scene = scene
19111914 init ( opts )
19121915 //if( opts.loaders ) Object.values(opts.loaders).map( xrf.patchLoader )
19131916
19141917 xrf . patchRenderer ( opts )
19151918 xrf . navigator . init ( )
1919+ xrf . interactive = xrf . interactiveGroup ( xrf . THREE , xrf . renderer , xrf . camera )
19161920 // return xrfragment lib as 'xrf' query functor (like jquery)
19171921 for ( let i in xrf ) xrf . query [ i ] = xrf [ i ]
19181922
@@ -1983,11 +1987,11 @@ xrf.reset = () => {
19831987 obj . removeFromParent ( )
19841988 return true
19851989 } ;
1990+ // also remove XRF objects from global scene
19861991 let nodes = [ ]
19871992 xrf . scene . traverse ( ( child ) => child . isXRF && ( nodes . push ( child ) ) )
1988- nodes . map ( disposeObject ) // leave non-XRF objects intact
1989- xrf . interactive = xrf . interactiveGroup ( xrf . THREE , xrf . renderer , xrf . camera )
1990- xrf . add ( xrf . interactive )
1993+ nodes . map ( disposeObject )
1994+ xrf . interactive . clear ( )
19911995 xrf . layers = 0
19921996}
19931997
@@ -3024,14 +3028,14 @@ xrf.interactiveGroup = function(THREE,renderer,camera){
30243028
30253029 if ( intersects . length > 0 ) {
30263030
3027- console . log ( object . name )
30283031
30293032 const intersection = intersects [ 0 ] ;
30303033
30313034 object = intersection . object ;
30323035 const uv = intersection . uv ;
30333036
30343037 _event . type = eventsMapper [ event . type ] ;
3038+ console . log ( ( new Date ( ) ) . getTime ( ) + " " + event . type + ":" + _event . type + " " + object . name )
30353039 if ( uv ) _event . data . set ( uv . x , 1 - uv . y ) ;
30363040
30373041 object . dispatchEvent ( _event ) ;
@@ -3066,6 +3070,11 @@ xrf.interactiveGroup = function(THREE,renderer,camera){
30663070 this . objects . push ( obj )
30673071 }
30683072
3073+ clear ( ) {
3074+ while ( this . children [ 0 ] != undefined ) this . children [ 0 ] . remove ( )
3075+ this . objects = [ ]
3076+ }
3077+
30693078 }
30703079
30713080 return new interactive ( renderer , camera )
@@ -3250,7 +3259,7 @@ xrf.filter.process = function(frag,scene,opts){
32503259 if ( processed ) processed [ n . uuid ] == true
32513260 }
32523261
3253- // spec 2: https://xrfragment.org/doc/RFC_XR_Macros.html#embedding-xr-content-using-src
3262+ // spec 3 @ https://xrfragment.org/doc/RFC_XR_Macros.html#embedding-xr-content-using-src
32543263 // reparent scene based on objectname in case it matches a (non-negating) selector
32553264 if ( opts . reparent && firstFilter && ! firstFilter . value && firstFilter . show === true ) {
32563265 let obj
@@ -4133,8 +4142,8 @@ window.AFRAME.registerComponent('xrf', {
41334142 let pos = xrf . frag . pos . last
41344143 if ( pos ) { AFRAME . XRF . camera . position . set ( pos . x , pos . y * scale , pos . z ) }
41354144 }
4136- aScene . addEventListener ( 'enter-vr' , repositionUser ( 1 ) )
4137- aScene . addEventListener ( 'enter-ar' , repositionUser ( 2 ) )
4145+ aScene . addEventListener ( 'enter-vr' , ( ) => setTimeout ( ( ) => repositionUser ( 1 ) , 100 ) )
4146+ aScene . addEventListener ( 'enter-ar' , ( ) => setTimeout ( ( ) => repositionUser ( 2 ) , 100 ) )
41384147
41394148 xrf . addEventListener ( 'navigateLoaded' , ( opts ) => {
41404149 setTimeout ( ( ) => AFRAME . fade . out ( ) , 500 )
@@ -4221,12 +4230,6 @@ window.AFRAME.registerComponent('xrf', {
42214230 }
42224231 xrf . addEventListener ( 'interactionReady' , AFRAME . XRF . clickableMeshToEntity )
42234232
4224- // cleanup xrf-get objects when resetting scene
4225- xrf . addEventListener ( 'reset' , ( opts ) => {
4226- let els = [ ...document . querySelectorAll ( '[xrf-get]' ) ]
4227- els . map ( ( el ) => document . querySelector ( 'a-scene' ) . removeChild ( el ) )
4228- } )
4229-
42304233 if ( typeof this . data === 'string' || this . data . http || this . data . https ) {
42314234 let url
42324235 if ( typeof this . data === 'string' ) url = this . data
@@ -4939,7 +4942,7 @@ window.AFRAME.registerComponent('xrf-get', {
49394942 setTimeout ( ( ) => {
49404943
49414944 if ( ! this . mesh ) {
4942- let scene = AFRAME . XRF . scene
4945+ let scene = xrf . scene
49434946 let mesh = this . mesh = scene . getObjectByName ( meshname ) ;
49444947 if ( ! this . el . className . match ( / r a y / ) ) this . el . className += " ray"
49454948 if ( ! mesh ) {
@@ -4978,17 +4981,6 @@ window.AFRAME.registerComponent('xrf-get', {
49784981
49794982 this . el . emit ( "update" , { timeout :0 } )
49804983
4981- AFRAME . XRF . addEventListener ( 'reset' , ( ) => {
4982- try {
4983- if ( this . el ) {
4984- while ( this . el . object3D . children . length ) {
4985- this . el . object3D . children [ 0 ] . remove ( )
4986- }
4987- this . el . remove ( )
4988- }
4989- } catch ( e ) { }
4990- } )
4991-
49924984 }
49934985
49944986} ) ;
@@ -5008,12 +5000,13 @@ window.AFRAME.registerComponent('xrf-pinchmove', {
50085000 // multiply the direction by a "speed" factor
50095001 direction . multiplyScalar ( 0.4 )
50105002 // get the current position
5011- var pos = player . getAttribute ( "position" )
5003+ var pos = xrf . camera . position
5004+ //player.getAttribute("position")
50125005 // add the direction vector
50135006 pos . x += direction . x
50145007 pos . z += direction . z
50155008 // set the new position
5016- this . data . rig . setAttribute ( "position" , pos ) ;
5009+ // this.data.rig.setAttribute("position", pos);
50175010 // !!! NOTE - it would be more efficient to do the
50185011 // position change on the players THREE.Object:
50195012 // `player.object3D.position.add(direction)`
0 commit comments