ソースを参照

models, img, audio objects creating

Nikolay Suslov 7 年 前
コミット
1f0b58561e

+ 82 - 2
support/client/lib/vwf/model/aframe.js

@@ -431,6 +431,14 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                             aframeObject.setAttribute('src', propertyValue);
                         break;
 
+                        // case "width":
+                        //     aframeObject.width = propertyValue;
+                        // break;
+
+                        // case "height":
+                        //     aframeObject.height = propertyValue;
+                        // break;
+
                         default:
                             value = undefined;
                             break;
@@ -456,6 +464,25 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                     }
                 }
 
+                if (value === undefined && aframeObject.nodeName == "VIDEO") {
+                    value = propertyValue;
+
+                    switch (propertyName) {
+
+                        case "itemID":
+                            aframeObject.setAttribute('id', propertyValue);
+                        break;
+
+                        case "itemSrc":
+                            aframeObject.setAttribute('src', propertyValue);
+                        break;
+
+                        default:
+                            value = undefined;
+                            break;
+                    }
+                }
+
                 if (value === undefined && aframeObject.nodeName == "A-SKY") {
                     value = propertyValue;
 
@@ -866,6 +893,13 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                             value = aframeObject.getAttribute('src');
                         break;
 
+                        case "width":
+                            value = aframeObject.width;
+                        break;
+
+                        case "height":
+                            value = aframeObject.height;
+                        break;
                       
                     }
                 }
@@ -886,6 +920,29 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                     }
                 }
 
+                if (value === undefined && aframeObject.nodeName == "VIDEO") {
+
+                    switch (propertyName) {
+                        
+                        case "itemID":
+                            value = aframeObject.getAttribute('id');
+                        break;
+                    
+                        case "itemSrc":
+                            value = aframeObject.getAttribute('src');
+                        break;
+
+                        case "videoWidth":
+                        value = aframeObject.videoWidth;
+                        break;
+
+                        case "videoHeight":
+                            value = aframeObject.videoHeight;
+                        break;
+                      
+                    }
+                }
+
                 if (value === undefined && aframeObject.nodeName == "A-SCENE") {
 
                     switch (propertyName) {
@@ -1179,6 +1236,21 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
             }
 
 
+        } else if (self.state.isAFrameClass(protos, "http://vwf.example.com/aframe/a-asset-video-item.vwf")) {
+
+            let assets = document.querySelector('a-assets');
+            if (assets){
+
+                aframeObj = document.createElement('video');
+                aframeObj.setAttribute('id', "item-"+GUID());
+                aframeObj.setAttribute('src', "");
+                aframeObj.setAttribute('crossorigin', "anonymous");
+                aframeObj.setAttribute('autoplay', "");
+                aframeObj.setAttribute('loop', true);
+
+                assets.appendChild(aframeObj);
+            }
+
         } else if (self.state.isAFrameClass(protos, "http://vwf.example.com/aframe/asky.vwf")) {
             aframeObj = document.createElement('a-sky');
         } else if (self.state.isAFrameClass(protos, "http://vwf.example.com/aframe/acamera.vwf")) {
@@ -1217,7 +1289,11 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
             aframeObj = document.createElement('a-entity');
         }
 
-        if (aframeObj.nodeName !== "A-ASSET-ITEM" && aframeObj.nodeName !== "IMG" && aframeObj.nodeName !== "AUIDO"){
+        if (aframeObj.nodeName !== "A-ASSET-ITEM" && 
+            aframeObj.nodeName !== "IMG" && 
+            aframeObj.nodeName !== "AUIDO" &&
+            aframeObj.nodeName !== "VIDEO"
+        ){
             aframeObj.setAttribute('id', node.ID);
         }
 
@@ -1237,7 +1313,11 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                     }
                     parent.children.push(node.ID);
                     //console.info( "Adding child: " + childID + " to " + nodeID );
-                    if (node.aframeObj.nodeName !== "A-ASSET-ITEM" && node.aframeObj.nodeName !== "IMG" && node.aframeObj.nodeName !== "AUIDO"){
+                    if (node.aframeObj.nodeName !== "A-ASSET-ITEM" &&
+                        node.aframeObj.nodeName !== "IMG" &&
+                      node.aframeObj.nodeName !== "AUIDO" &&
+                      node.aframeObj.nodeName !== "VIDEO"
+                    ){
                     parent.aframeObj.appendChild(node.aframeObj);
                     }
                 }

+ 51 - 19
support/client/lib/vwf/model/aframeComponent.js

@@ -123,8 +123,15 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                     "width",
                     "wireframe",
                     "wireframe-linewidth",
-                    "src"]
+                    "src"],
+            
+                    'A-SOUND': [
+                        "autoplay", "distanceModel", "loop", "maxDistance", "on", "poolSize", "refDistance",
+                        "rolloffFactor", "src", "volume"
+                    ]
+
             }
+            
 
             //this.state.kernel = this.kernel.kernel.kernel;
 
@@ -358,6 +365,20 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                     }
                 }
 
+                if (value === undefined && isASoundDefinition(node.prototypes)) {
+                    if (aframeObject.el.getAttribute(aframeObject.compName)) {
+
+                        value = propertyValue;
+                        let parentNodeAF = aframeObject.el;
+                        //let defs = ['color', 'transparent', 'opacity', 'side'];
+
+                        self.aframeComponentDef['A-SOUND'].forEach(element => {
+                            element == propertyName ? parentNodeAF.setAttribute('sound', element, propertyValue) :
+                                value = undefined;
+                        })
+                    }
+                }
+
                 if (value === undefined && isAFogDefinition(node.prototypes)) {
                     if (aframeObject.el.getAttribute(aframeObject.compName)) {
 
@@ -765,28 +786,20 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                         }
 
                     })
+                }
 
-                    // switch (propertyName) {
-
-                    //     case "color":
-                    //         value = parentNodeAF.getAttribute('material').color;
-                    //         break;
-
-                    //     case "opacity":
-                    //         value = parentNodeAF.getAttribute('material').opacity;
-                    //         break;
-
-                    //     case "side":
-                    //         value = parentNodeAF.getAttribute('material').side;
-                    //         break;
-
-                    //     case "transparent":
-                    //         value = parentNodeAF.getAttribute('material').transparent;
-                    //         break;
+                if (value === undefined && isASoundDefinition(node.prototypes)) {
+                    value = propertyValue;
 
+                    // let parentNodeAF = self.state.nodes[node.parentID].aframeObj;
+                    let parentNodeAF = aframeObject.el;
 
-                    // }
+                    self.aframeComponentDef['A-SOUND'].forEach(element => {
+                        if (element == propertyName) {
+                            value = parentNodeAF.getAttribute('sound').element;
+                        }
 
+                    })
                 }
 
                 if (value === undefined && isALinePathDefinition(node.prototypes)) {
@@ -959,6 +972,17 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
         return found;
     }
 
+    function isASoundDefinition(prototypes) {
+        var found = false;
+        if (prototypes) {
+            for (var i = 0; i < prototypes.length && !found; i++) {
+                found = (prototypes[i] == "http://vwf.example.com/aframe/a-sound-component.vwf");
+            }
+        }
+        return found;
+    }
+
+
     function isAViewOffsetCameraDefinition(prototypes) {
         var found = false;
         if (prototypes) {
@@ -1152,6 +1176,14 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
 
         }
 
+        if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/a-sound-component.vwf")) {
+
+            // aframeObj.el.setAttribute(node.type, {});
+            aframeObj.compName = "sound";
+            aframeObj.el.setAttribute(aframeObj.compName, {});
+
+        }
+
         if (self.state.isComponentClass(protos, "http://vwf.example.com/aframe/interpolation-component.vwf")) {
 
 

+ 48 - 5
support/client/lib/vwf/view/aframe.js

@@ -163,21 +163,44 @@ define(["module", "vwf/view"], function (module, view) {
                 return;
             }
 
+            // 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 (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){
+                    let sound = el[1].aframeObj.getAttribute('sound');
+                    if(sound) {
+                   
+                    if (sound.src !== ""){
                        // console.log("my: " + src);
-                        if (src == elID)
-                        self.kernel.callMethod(el[0], "updateSrc", [elID])
+                        let src = '#' + sound.src.id;
+                        if (src == elID){
+                            let soundID = vwf.find(el[0], 'sound');
+                            self.kernel.callMethod(soundID, "updateSrc", [elID])
+                        }
+                        
                     }
-                })
+                }
 
+                })
             }
 
+
             if (node.aframeObj.nodeName == "IMG" && propertyName == 'itemSrc') {
 
                 //console.log("sat new item");
@@ -198,7 +221,27 @@ define(["module", "vwf/view"], function (module, view) {
                 }
 
                 })
+            }
+
+            if (node.aframeObj.nodeName == "VIDEO" && propertyName == 'itemSrc') {
 
+                //console.log("sat new item");
+                let elID = '#' + node.aframeObj.getAttribute('id');
+                Object.entries(this.state.nodes).forEach(el => {
+                    let material = el[1].aframeObj.getAttribute('material');
+                    if(material) {
+                   
+                    if (material.src !== ""){
+                       // console.log("my: " + src);
+                        let src = '#' + material.src.id;
+                        if (src == elID){
+                            let materialID = vwf.find(el[0], 'material');
+                            self.kernel.callMethod(materialID, "updateSrc", [elID])
+                        }
+                        
+                    }
+                }
+                })
             }
 
             if (node.aframeObj.nodeName == "A-ASSET-ITEM" && propertyName == 'itemSrc') {

+ 52 - 18
support/client/lib/vwf/view/editor-new.js

@@ -284,7 +284,7 @@ define([
                              
                             },
                             widgets.textField({
-                                id:"asset3dsrc",
+                                id:"assetsrc",
                                 value:"Enter URL to asset source",
                                 funconchange: function(e){
                                     console.log(this.value)
@@ -304,6 +304,10 @@ define([
                                                 {
                                                     label: "Image",
                                                     onclick: function(e){
+                                                        let srcEl = document.querySelector('#assetsrc');
+                                                            let avatarID = 'avatar-' + vwf.moniker_;
+                                                            vwf_view.kernel.callMethod(vwf.application(), "createImage", [srcEl.value, null, null, avatarID])
+                                                        
                                                     }
                                                 }
                                             ),
@@ -311,6 +315,9 @@ define([
                                                 {
                                                     label: "Sound",
                                                     onclick: function(e){
+                                                        let srcEl = document.querySelector('#assetsrc');
+                                                        let avatarID = 'avatar-' + vwf.moniker_;
+                                                        vwf_view.kernel.callMethod(vwf.application(), "createAudio", [srcEl.value, null, null, avatarID])
                                                     }
                                                 }
                                             ),
@@ -318,20 +325,21 @@ define([
                                                 {
                                                     label: "Video",
                                                     onclick: function(e){
+                                                        let srcEl = document.querySelector('#assetsrc');
+                                                        let avatarID = 'avatar-' + vwf.moniker_;
+                                                        vwf_view.kernel.callMethod(vwf.application(), "createVideo", [srcEl.value, null, null, avatarID])
                                                     }
                                                 }
                                             ),
-                                            widgets.buttonSimple(
-                                                {
-                                                    label: "MTL",
-                                                    onclick: function(e){
-                                                    }
-                                                }
-                                            ),
+                                           
                                             widgets.buttonSimple(
                                                 {
                                                     label: "GLTF",
                                                     onclick: function(e){
+                                                        let srcEl = document.querySelector('#assetsrc');
+                                                        let avatarID = 'avatar-' + vwf.moniker_;
+                                                        if(srcEl.value.includes('.gltf'))
+                                                        vwf_view.kernel.callMethod(vwf.application(), "createModel", ['GLTF', srcEl.value, avatarID])
                                                     }
                                                 }
                                             ),
@@ -339,11 +347,10 @@ define([
                                                 {
                                                     label: "DAE",
                                                     onclick: function(e){
-                                                        let srcEl = document.querySelector('#asset3dsrc');
+                                                        let srcEl = document.querySelector('#assetsrc');
                                                         let avatarID = 'avatar-' + vwf.moniker_;
                                                         if(srcEl.value.includes('.dae'))
-                                                        vwf_view.kernel.callMethod(vwf.application(), "createModelDAE", [srcEl.value, avatarID])
-
+                                                        vwf_view.kernel.callMethod(vwf.application(), "createModel", ['DAE', srcEl.value, avatarID])
                                                     }
                                                 }
                                             ),
@@ -351,6 +358,10 @@ define([
                                                 {
                                                     label: "OBJ",
                                                     onclick: function(e){
+                                                        let srcEl = document.querySelector('#assetsrc');
+                                                        let avatarID = 'avatar-' + vwf.moniker_;
+                                                        if(srcEl.value.includes('.obj'))
+                                                        vwf_view.kernel.callMethod(vwf.application(), "createModel", ['OBJ', srcEl.value, avatarID])
                                                     }
                                                 }
                                             )
@@ -383,7 +394,11 @@ define([
                                             self.widgets.gridListItem({
                                                 imgSrc: "vwf/view/lib/images/ui/icons/3ditem.png",
                                                 title: 'Asset item',
-                                                styleClass: "createListItem"
+                                                styleClass: "createListItem",
+                                                onclickfunc: function(){
+                                                    let srcEl = document.querySelector('#assetsrc');
+                                                    vwf_view.kernel.callMethod(vwf.application(), "createAssetResource", ['ITEM', srcEl.value])
+                                                }
                                             }),
                                             self.widgets.gridListItem({
                                                 imgSrc: "vwf/view/lib/images/ui/icons/image.png",
@@ -391,19 +406,38 @@ define([
                                                 styleClass: "createListItem",
                                                 onclickfunc: function(){
                                                     //let cubeName = self.GUID();
-                                                    vwf_view.kernel.callMethod(vwf.application(), "createAssetItemImg")
+                                                    let srcEl = document.querySelector('#assetsrc');
+                                                    vwf_view.kernel.callMethod(vwf.application(), "createAssetResource", ['IMG', srcEl.value])
                                                 }
                                             }),
                                             self.widgets.gridListItem({
                                                 imgSrc: "vwf/view/lib/images/ui/icons/video.png",
                                                 title: 'Video',
-                                                styleClass: "createListItem"
+                                                styleClass: "createListItem",
+                                                onclickfunc: function(){
+                                                    let srcEl = document.querySelector('#assetsrc');
+                                                    vwf_view.kernel.callMethod(vwf.application(), "createAssetResource", ['VIDEO', srcEl.value])
+                                                }
                                             }),
                                             self.widgets.gridListItem({
                                                 imgSrc: "vwf/view/lib/images/ui/icons/sound.png",
                                                 title: 'Sound',
-                                                styleClass: "createListItem"
-                                            })
+                                                styleClass: "createListItem",
+                                                onclickfunc: function(){
+                                                    let srcEl = document.querySelector('#assetsrc');
+                                                    vwf_view.kernel.callMethod(vwf.application(), "createAssetResource", ['AUDIO', srcEl.value])
+                                                }
+                                            }),
+                                            self.widgets.buttonSimple(
+                                                {
+                                                    label: "MTL",
+                                                    onclick: function(e){
+                                                        let srcEl = document.querySelector('#assetsrc');
+                                                        if(srcEl.value.includes('.mtl'))
+                                                        vwf_view.kernel.callMethod(vwf.application(), "createAssetResource", ['ITEM', srcEl.value])
+                                                    }
+                                                }
+                                            )
                                         
                                         ]
                                     }
@@ -425,7 +459,7 @@ define([
                         onclickfunc: function(){
                             let avatarID = 'avatar-' + vwf.moniker_;
                             //let cubeName = self.GUID();
-                            vwf_view.kernel.callMethod(vwf.application(), "createPrimitive", [el.toLowerCase(), avatarID])
+                            vwf_view.kernel.callMethod(vwf.application(), "createPrimitive", [el.toLowerCase(), null, null, null, avatarID])
                         }
                 })
                 })
@@ -441,7 +475,7 @@ define([
                         onclickfunc: function(){
                             let avatarID = 'avatar-' + vwf.moniker_;
                             //let cubeName = self.GUID();
-                            vwf_view.kernel.callMethod(vwf.application(), "createPrimitive", ["light", avatarID, el.toLowerCase()])
+                            vwf_view.kernel.callMethod(vwf.application(), "createPrimitive", ["light", el.toLowerCase(), null, null, avatarID])
                         }
                     })
                 })

+ 3 - 1
support/proxy/vwf.example.com/aframe/a-asset-image-item.vwf.yaml

@@ -4,4 +4,6 @@ extends: http://vwf.example.com/aframe/node.vwf
 type: "image"
 properties:
   itemID:
-  itemSrc:
+  itemSrc:
+  width:
+  height:

+ 9 - 0
support/proxy/vwf.example.com/aframe/a-asset-video-item.vwf.yaml

@@ -0,0 +1,9 @@
+# https://aframe.io/docs/0.5.0/primitives/a-cursor.html
+---
+extends: http://vwf.example.com/aframe/node.vwf
+type: "video"
+properties:
+  itemID:
+  itemSrc:
+  videoWidth:
+  videoHeight:

+ 8 - 0
support/proxy/vwf.example.com/aframe/a-sound-component.js

@@ -0,0 +1,8 @@
+this.updateSrc = function(srcID){
+
+    if (srcID) {
+        this.src = "";
+        this.src = srcID;
+    }
+    
+}

+ 21 - 0
support/proxy/vwf.example.com/aframe/a-sound-component.vwf.yaml

@@ -0,0 +1,21 @@
+# https://aframe.io/docs/master/primitives/a-sound.html
+--- 
+extends: http://vwf.example.com/aframe/aentityComponent.vwf
+type: "component"
+properties:
+  autoplay:
+  distanceModel:
+  loop:
+  maxDistance:
+  on:
+  poolSize:
+  refDistance:
+  rolloffFactor:
+  src:
+  volume:
+methods:
+  updateSrc:
+    parameters:
+      - srcID
+scripts:
+  - source: "http://vwf.example.com/aframe/a-sound-component.js"

+ 1 - 0
support/proxy/vwf.example.com/aframe/aentity.js

@@ -26,6 +26,7 @@ this.showCloseGizmo = function () {
 this.updateSrc = function(srcID){
 
     if (srcID) {
+        debugger;
         this.src = "";
         this.src = srcID;
     }

+ 309 - 26
support/proxy/vwf.example.com/aframe/ascene.js

@@ -332,40 +332,63 @@ this.planeProto = function () {
     return node
 }
 
-this.createModelDAE = function (daeSrc, avatar) {
+this.createModel = function (modelType, modelSrc, avatar) {
 
     var self = this;
 
-    let daeTagName = 'DAE-ASSET-'+this.GUID();
-    let daeTagNode = {
+    let tagName = modelType + '-ASSET-'+ this.GUID();
+    let tagNode = {
         "extends": "http://vwf.example.com/aframe/a-asset-item.vwf",
         "properties": {
-            "itemID": daeTagName,
-            "itemSrc": daeSrc,
-        },
+            "itemID": tagName,
+            "itemSrc": modelSrc
+        }
     }
 
-    this.children.create(daeTagName, daeTagNode, function( child ) {
-        let daeNodeName = 'DAE-MODEL-'+self.GUID();
+    this.children.create(tagName, tagNode, function( child ) {
 
+        let nodeName = modelType + '-MODEL-'+self.GUID();
         var position = "0 0 0";
-        let myAvatar = self.children[avatar];
-        let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+        if (avatar) {
+            
+            let myAvatar = self.children[avatar];
+            let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+        
+            if (cursorNode) {
+                 position = cursorNode.worldPosition;
+                //console.log(position);
+            }
     
-        if (cursorNode) {
-             position = cursorNode.worldPosition;
-            //console.log(position);
+        }
+       
+        const protos = {
+            DAE: "http://vwf.example.com/aframe/acolladamodel.vwf",
+            OBJ: "http://vwf.example.com/aframe/aobjmodel.vwf",
+            GLTF: "http://vwf.example.com/aframe/agltfmodel.vwf"
         }
 
-        let daeNode = {
-            "extends": "http://vwf.example.com/aframe/acolladamodel.vwf",
+
+        let extendsName = Object.entries(protos).filter(el => el[0] == modelType)[0];
+ 
+        let modelNode = {
+            "extends": extendsName[1],
             "properties": {
                 "src": '#' + child.itemID,
                 "position": position
+            },
+            children:{
+                "interpolation":
+                {
+                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "type": "component",
+                    "properties": {
+                        "enabled": true
+                    }
+                }
             }
         }
 
-        self.children.create(daeNodeName, daeNode, function( child ) {
+        self.children.create(nodeName, modelNode, function( child ) {
             if (avatar) child.lookAt(self.children[avatar].worldPosition)
            });
 
@@ -373,24 +396,54 @@ this.createModelDAE = function (daeSrc, avatar) {
 }
 
 
-this.createPrimitive = function (type, avatar, params, name, node) {
+this.createAssetResource = function(resType, resSrc){
 
-    var position = "0 0 0";
-    var nodeName = name;
+    var self = this;
 
+    const protos = {
+        IMG: "http://vwf.example.com/aframe/a-asset-image-item.vwf",
+        AUDIO: "http://vwf.example.com/aframe/a-asset-audio-item.vwf",
+        VIDEO:  "http://vwf.example.com/aframe/a-asset-video-item.vwf",
+        ITEM:  "http://vwf.example.com/aframe/a-asset-item.vwf" 
+    };
 
-    let myAvatar = this.children[avatar];
-    let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+    let extendsName = Object.entries(protos).filter(el => el[0] == resType)[0];
 
-    if (cursorNode) {
-        position = cursorNode.worldPosition;
-        //console.log(position);
+    let tagName = resType + '-ASSET-'+ this.GUID();
+    let tagNode = {
+        "extends": extendsName[1],
+        "properties": {
+            "itemID": tagName,
+            "itemSrc": resSrc
+        }
     }
 
-    if (!name) {
+    this.children.create(tagName, tagNode);
+
+}
+
+
+this.createPrimitive = function (type, params, name, node, avatar) {
+
+    var position = "0 0 0";
+
+    var nodeName = name;
+    if (!nodeName) {
         nodeName = this.GUID();
     }
 
+    if (avatar) {
+
+        let myAvatar = this.children[avatar];
+        let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+
+        if (cursorNode) {
+            position = cursorNode.worldPosition;
+            //console.log(position);
+        }
+
+    }
+
     var newNode = {};
 
     switch (type) {
@@ -433,12 +486,242 @@ this.createPrimitive = function (type, avatar, params, name, node) {
     if (newNode) {
         newNode.properties.position = position;
         this.children.create(nodeName, newNode, function( child ) {
-           child.lookAt(self.children[avatar].worldPosition)
+            if (avatar)child.lookAt(self.children[avatar].worldPosition)
           });
     }
 
 }
 
+this.createImage = function (imgSrc, name, node, avatar) {
+
+    var self = this;
+
+    var position = "0 0 0";
+
+    var nodeName = name;
+    if (!nodeName) {
+        nodeName = this.GUID();
+    }
+
+    if (avatar) {
+
+        let myAvatar = this.children[avatar];
+        let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+
+        if (cursorNode) {
+            position = cursorNode.worldPosition;
+            //console.log(position);
+        }
+
+    }
+
+    let tagName = 'IMG-ASSET-'+ this.GUID();
+    let tagNode = {
+        "extends": "http://vwf.example.com/aframe/a-asset-image-item.vwf",
+        "properties": {
+            "itemID": tagName,
+            "itemSrc": imgSrc
+        }
+    }
+
+    this.children.create(tagName, tagNode, function( child ) {
+
+
+        let allNodes = vwf.models["vwf/model/aframe"].model.state.nodes;
+        let imgAssetNode = allNodes[child.id];
+
+        imgAssetNode.aframeObj.onload = function(){
+
+       // console.log(imgAssetNode);
+
+        let nodeName = 'IMAGE-'+self.GUID();
+        var position = "0 0 0";
+        if (avatar) {
+            
+            let myAvatar = self.children[avatar];
+            let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+        
+            if (cursorNode) {
+                 position = cursorNode.worldPosition;
+                //console.log(position);
+            }
+    
+        }
+ 
+        let newNode = self.planeProto();
+        newNode.children.material.properties.src = '#' + child.itemID;
+        newNode.properties.position = position;
+        newNode.properties.width = child.width;
+        newNode.properties.height = child.height;
+        newNode.properties.scale = [0.003, 0.003, 0.003];
+
+        self.children.create(nodeName, newNode, function( child ) {
+            if (avatar) child.lookAt(self.children[avatar].worldPosition)
+           });
+
+        }
+        
+
+       });
+
+}
+
+this.createVideo = function (vidSrc, name, node, avatar) {
+
+    var self = this;
+
+    var position = "0 0 0";
+
+    var nodeName = name;
+    if (!nodeName) {
+        nodeName = this.GUID();
+    }
+
+    if (avatar) {
+
+        let myAvatar = this.children[avatar];
+        let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+
+        if (cursorNode) {
+            position = cursorNode.worldPosition;
+            //console.log(position);
+        }
+
+    }
+
+    let tagName = 'VIDEO-ASSET-'+ this.GUID();
+    let tagNode = {
+        "extends": "http://vwf.example.com/aframe/a-asset-video-item.vwf",
+        "properties": {
+            "itemID": tagName,
+            "itemSrc": vidSrc
+        }
+    }
+
+    this.children.create(tagName, tagNode, function( child ) {
+
+
+        // let allNodes = vwf.models["vwf/model/aframe"].model.state.nodes;
+        // let imgAssetNode = allNodes[child.id];
+
+        // imgAssetNode.aframeObj.onloadeddata = function(){
+
+       //console.log(imgAssetNode);
+
+        let nodeName = 'VIDEO-'+self.GUID();
+        var position = "0 0 0";
+        if (avatar) {
+            
+            let myAvatar = self.children[avatar];
+            let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+        
+            if (cursorNode) {
+                 position = cursorNode.worldPosition;
+                //console.log(position);
+            }
+    
+        }
+ 
+        let newNode = self.planeProto();
+        newNode.children.material.properties.src = '#' + child.itemID;
+        newNode.properties.position = position;
+        newNode.properties.width = 3;
+        newNode.properties.height = 1.75;
+        // newNode.properties.width = child.videoWidth;
+        // newNode.properties.height = child.videoHeight;
+        // newNode.properties.scale = [0.003, 0.003, 0.003];
+
+        self.children.create(nodeName, newNode, function( child ) {
+            if (avatar) child.lookAt(self.children[avatar].worldPosition)
+           });
+
+        //}
+        
+       });
+
+}
+
+this.createAudio = function (itemSrc, name, node, avatar) {
+
+    var self = this;
+
+    var position = "0 0 0";
+
+    var nodeName = name;
+    if (!nodeName) {
+        nodeName = this.GUID();
+    }
+
+    if (avatar) {
+
+        let myAvatar = this.children[avatar];
+        let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+
+        if (cursorNode) {
+            position = cursorNode.worldPosition;
+            //console.log(position);
+        }
+
+    }
+
+    let tagName = 'AUDIO-ASSET-'+ this.GUID();
+    let tagNode = {
+        "extends": "http://vwf.example.com/aframe/a-asset-audio-item.vwf",
+        "properties": {
+            "itemID": tagName,
+            "itemSrc": itemSrc
+        }
+    }
+
+    this.children.create(tagName, tagNode, function( child ) {
+
+
+        // let allNodes = vwf.models["vwf/model/aframe"].model.state.nodes;
+        // let itemAssetNode = allNodes[child.id];
+
+    //     itemAssetNode.aframeObj.onload = function(){
+
+    //    console.log(itemAssetNode);
+
+        let nodeName = 'AUDIO-'+self.GUID();
+        var position = "0 0 0";
+        if (avatar) {
+            
+            let myAvatar = self.children[avatar];
+            let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
+        
+            if (cursorNode) {
+                 position = cursorNode.worldPosition;
+                //console.log(position);
+            }
+    
+        }
+ 
+        let newNode = self.cubeProto();
+        newNode.properties.position = position;
+        newNode.children.sound = {
+            
+                "extends": "http://vwf.example.com/aframe/a-sound-component.vwf",
+                "type": "component",
+                "properties": {
+                    "autoplay": true,
+                    "loop": true,
+                    "src": '#' + child.itemID
+                }
+            
+        };
+
+        self.children.create(nodeName, newNode, function( child ) {
+            if (avatar) child.lookAt(self.children[avatar].worldPosition)
+           });
+
+       // }
+        
+
+       });
+
+}
+
 
 this.GUID = function () {
     var self = this;

+ 28 - 4
support/proxy/vwf.example.com/aframe/ascene.vwf.yaml

@@ -12,9 +12,10 @@ methods:
   createPrimitive:
     parameters:
       - type
-      - avatar
+      - params
       - name
       - node
+      - avatar
   createAssetItemImg:
   planeProto:
   cubeProto:
@@ -23,11 +24,34 @@ methods:
   coneProto:
   textProto:
   lightProto:
-     parameters:
+    parameters:
       - lightType
-  createModelDAE:
+  createImage:
+    parameters:
+      - imgSrc
+      - name
+      - node
+      - avatar
+  createAudio:
+    parameters:
+      - itemSrc
+      - name
+      - node
+      - avatar
+  createVideo:
+    parameters:
+      - vidSrc
+      - name
+      - node
+      - avatar
+  createAssetResource:
+    parameters:
+      - resType
+      - resSrc
+  createModel:
     parameters:
-      - src
+      - modelType
+      - modelSrc
       - avatar
   deleteNode:
     parameters: