repo: janusweb
action: commit
revision: 
path_from: 
revision_from: e10999d4ddf7e2db244abc2e366feca5d4ef2c01:
path_to: 
revision_to: 
git.thebackupbox.net
janusweb
git clone git://git.thebackupbox.net/janusweb
commit e10999d4ddf7e2db244abc2e366feca5d4ef2c01
Author: James Baicoianu 
Date:   Thu Oct 22 14:31:40 2020 -0700

    Added object.loadNewAsset() to define assets at object level instead of room level

diff --git a/scripts/janusbase.js b/scripts/janusbase.js
index ac2cd9a8bd308c4b80300884d9626ac3623675f3..
index ..55e1c3093dcc8d2c8fa0884cbdd3e51957b5396d 100644
--- a/scripts/janusbase.js
+++ b/scripts/janusbase.js
@@ -511,6 +511,173 @@ elation.require(['engine.things.generic', 'utils.template', 'janusweb.parts'], f

       return asset;
     }
+    this.loadNewAsset = function(type, args) {
+      // FIXME - this is duplicated from room.loadNewAsset.  room should inherit from janusbase, so it would get this without duplication
+      type = type.toLowerCase();
+      args = args || {};
+
+      var assetlist = [];
+      if (type == 'image') {
+        if (args.src) {
+          var src = (args.src.match(/^file:/) ? args.src.replace(/^file:/, datapath) : args.src);
+          let assetargs = {
+            assettype:'image',
+            name:args.id,
+            src: src,
+            texture: args.texture,
+            tex_linear: args.tex_linear,
+            sbs3d: args.sbs3d,
+            ou3d: args.ou3d,
+            reverse3d: args.reverse3d,
+            hasalpha: args.hasalpha,
+            maxsize: args.maxsize,
+            preload: args.preload,
+            baseurl: this.baseurl
+          };
+          assetlist.push(assetargs);
+        } else if (args.canvas) {
+          assetlist.push({
+            assettype: 'image',
+            name: args.id,
+            canvas: args.canvas,
+            tex_linear: args.tex_linear,
+            hasalpha: args.hasalpha,
+            baseurl: this.baseurl
+          });
+        } else if (args.texture) {
+          assetlist.push({
+            assettype:'image',
+            name:args.id,
+            texture: args.texture,
+            tex_linear: args.tex_linear,
+            hasalpha: args.hasalpha,
+            baseurl: this.baseurl
+          });
+        }
+      } else if (type == 'video') {
+        if (args.src) {
+          var src = (args.src.match(/^file:/) ? args.src.replace(/^file:/, datapath) : args.src);
+          assetlist.push({
+            assettype:'video',
+            name:args.id,
+            src: src,
+            loop: args.loop,
+            sbs3d: args.sbs3d,
+            ou3d: args.ou3d,
+            eac360: args.eac360,
+            hasalpha: args.hasalpha,
+            auto_play: args.auto_play,
+            type: args.type,
+            format: args.format,
+            hls: args.hls,
+            preload: args.preload,
+            baseurl: this.baseurl
+          });
+        } else if (args.video) {
+          assetlist.push({
+            assettype:'video',
+            name:args.id,
+            video: args.video,
+            loop: args.loop,
+            sbs3d: args.sbs3d,
+            ou3d: args.ou3d,
+            hasalpha: args.hasalpha,
+            auto_play: args.auto_play,
+            type: args.type,
+            format: args.format,
+            hls: args.hls,
+            baseurl: this.baseurl
+          });
+        }
+      } else if (type == 'sound') {
+        var src = (args.src && args.src.match(/^file:/) ? args.src.replace(/^file:/, datapath) : args.src);
+        assetlist.push({
+          assettype:'sound',
+          name:args.id,
+          src: src,
+          buffer: args.buffer,
+          rate: args.rate,
+          baseurl: this.baseurl
+        });
+      } else if (type == 'websurface') {
+        if (args.id) {
+          this.websurfaces[args.id] = args;
+        }
+      } else if (type == 'script') {
+        var src = (args.src.match(/^file:/) ? args.src.replace(/^file:/, datapath) : args.src);
+        assetlist.push({
+          assettype:'script',
+          name: src,
+          src: src,
+          baseurl: this.baseurl
+        });
+      } else if (type == 'object' || type == 'model') {
+        var src, mtlsrc, srcparts = [];
+        if (args.src) {
+          src = (args.src.match(/^file:/) ? args.src.replace(/^file:/, datapath) : args.src);
+          mtlsrc = (args.mtl && args.mtl.match(/^file:/) ? args.mtl.replace(/^file:/, datapath) : args.mtl);
+          if (mtlsrc && !mtlsrc.match(/^(https?:)?\/\//)) mtlsrc = this.baseurl + mtlsrc;
+          srcparts = src.split(' ');
+          src = srcparts[0];
+        }
+        let object = args.object;
+        if (args.mesh_verts) {
+          let geo = new THREE.BufferGeometry();
+          geo.addAttribute( 'position', new THREE.Float32BufferAttribute( args.mesh_verts, 3 ) );
+          if (args.mesh_faces) {
+            geo.setIndex(args.mesh_faces);
+          }
+          if (args.mesh_normals) {
+            geo.addAttribute( 'normal', new THREE.Float32BufferAttribute( args.mesh_normals, 3 ) );
+          }
+          if (args.mesh_uvs) {
+            geo.addAttribute( 'uv', new THREE.Float32BufferAttribute( args.mesh_uvs, 2 ) );
+          }
+          object = new THREE.Mesh(geo, new THREE.MeshPhongMaterial());
+        }
+        assetlist.push({
+          assettype: 'model',
+          name: args.id,
+          src: src,
+          mtl: mtlsrc,
+          object: object,
+          tex_linear: args.tex_linear,
+          tex0: args.tex || args.tex0 || srcparts[1],
+          tex1: args.tex1 || srcparts[2],
+          tex2: args.tex2 || srcparts[3],
+          tex3: args.tex3 || srcparts[4]
+        });
+      } else if (type == 'ghost') {
+        var src = (args.src.match(/^file:/) ? args.src.replace(/^file:/, datapath) : args.src);
+        assetlist.push({
+          assettype:'ghost',
+          name: args.id,
+          src: src,
+          baseurl: this.baseurl
+        });
+      } else if (type == 'shader') {
+        assetlist.push({
+          assettype: 'shader',
+          name: args.id,
+          fragment_src: args.src,
+          vertex_src: args.vertex_src,
+          uniforms: args.uniforms,
+          hasalpha: args.hasalpha,
+        });
+      } else if (type == 'font') {
+        assetlist.push({
+          assettype: 'font',
+          name: args.id,
+          src: args.src,
+        });
+      }
+
+      if (!this.assetpack) {
+        this.assetpack = new elation.engine.assets.pack({name: this.id + '_assets', baseurl: this.baseurl, json: assetlist});
+      } else {
+        this.assetpack.loadJSON(assetlist);
+      }
+    }
     this.getActiveAssets = function(assetlist) {
       if (assetlist) {
         for (var type in this.assets) {

-----END OF PAGE-----