Browse Source

Merge remote-tracking branch 'upstream/lcs-v0.5'

Nikolay Suslov 4 years ago
parent
commit
b027a16f79
100 changed files with 2291 additions and 1070 deletions
  1. 167 531
      public/app.js
  2. 16 16
      public/defaults/assets/nodes/defaultAvatarCostume.yaml
  3. 11 0
      public/defaults/proxy/aframe/a-arjs-anchor.vwf.json
  4. 8 0
      public/defaults/proxy/aframe/a-asset-audio-item.vwf.json
  5. 10 0
      public/defaults/proxy/aframe/a-asset-image-item.vwf.json
  6. 8 0
      public/defaults/proxy/aframe/a-asset-item.vwf.json
  7. 10 0
      public/defaults/proxy/aframe/a-asset-video-item.vwf.json
  8. 8 0
      public/defaults/proxy/aframe/a-mirror-component.vwf.json
  9. 0 0
      public/defaults/proxy/aframe/a-sound-component.js
  10. 35 0
      public/defaults/proxy/aframe/a-sound-component.vwf.json
  11. 6 0
      public/defaults/proxy/aframe/a-sun-sky.vwf.json
  12. 0 0
      public/defaults/proxy/aframe/aMaterialComponent.js
  13. 56 0
      public/defaults/proxy/aframe/aMaterialComponent.vwf.json
  14. 11 0
      public/defaults/proxy/aframe/aSceneFogComponent.vwf.json
  15. 11 0
      public/defaults/proxy/aframe/aabb-collider-component.vwf.json
  16. 12 0
      public/defaults/proxy/aframe/aanimation.vwf.json
  17. 12 0
      public/defaults/proxy/aframe/abox.vwf.json
  18. 3 0
      public/defaults/proxy/aframe/acamera.js
  19. 22 0
      public/defaults/proxy/aframe/acamera.vwf.json
  20. 0 0
      public/defaults/proxy/aframe/acolladamodel.js
  21. 17 0
      public/defaults/proxy/aframe/acolladamodel.vwf.json
  22. 14 0
      public/defaults/proxy/aframe/acone.vwf.json
  23. 9 0
      public/defaults/proxy/aframe/acursor.vwf.json
  24. 15 0
      public/defaults/proxy/aframe/acylinder.vwf.json
  25. 73 34
      public/defaults/proxy/aframe/aentity.js
  26. 130 0
      public/defaults/proxy/aframe/aentity.vwf.json
  27. 5 0
      public/defaults/proxy/aframe/aentityComponent.vwf.json
  28. 0 0
      public/defaults/proxy/aframe/agltfmodel.js
  29. 17 0
      public/defaults/proxy/aframe/agltfmodel.vwf.json
  30. 17 0
      public/defaults/proxy/aframe/alight.vwf.json
  31. 11 0
      public/defaults/proxy/aframe/anim-mixer-component.vwf.json
  32. 0 0
      public/defaults/proxy/aframe/aobjmodel.js
  33. 23 0
      public/defaults/proxy/aframe/aobjmodel.vwf.json
  34. 10 0
      public/defaults/proxy/aframe/aplane.vwf.json
  35. 5 0
      public/defaults/proxy/aframe/app-aabb-collider-listener-component.vwf.json
  36. 5 0
      public/defaults/proxy/aframe/app-avatarbvh-component.vwf.json
  37. 5 0
      public/defaults/proxy/aframe/app-cursor-listener-component.vwf.json
  38. 5 0
      public/defaults/proxy/aframe/app-envmap-component.vwf.json
  39. 5 0
      public/defaults/proxy/aframe/app-raycaster-listener-component.vwf.json
  40. 5 0
      public/defaults/proxy/aframe/app-skyshader-component.vwf.json
  41. 5 0
      public/defaults/proxy/aframe/app-sun-component.vwf.json
  42. 56 56
      public/defaults/proxy/aframe/ascene.js
  43. 146 0
      public/defaults/proxy/aframe/ascene.vwf.json
  44. 13 0
      public/defaults/proxy/aframe/asky.vwf.json
  45. 14 0
      public/defaults/proxy/aframe/asphere.vwf.json
  46. 28 0
      public/defaults/proxy/aframe/atext.vwf.json
  47. 26 54
      public/defaults/proxy/aframe/avatar.js
  48. 107 0
      public/defaults/proxy/aframe/avatar.vwf.json
  49. 4 0
      public/defaults/proxy/aframe/componentNode.vwf.json
  50. 12 12
      public/defaults/proxy/aframe/gearvrcontroller.js
  51. 31 0
      public/defaults/proxy/aframe/gearvrcontroller.vwf.json
  52. 7 0
      public/defaults/proxy/aframe/gizmoComponent.vwf.json
  53. 31 0
      public/defaults/proxy/aframe/hand-controls.vwf.json
  54. 10 0
      public/defaults/proxy/aframe/interpolation-component.vwf.json
  55. 11 0
      public/defaults/proxy/aframe/lineComponent.vwf.json
  56. 9 0
      public/defaults/proxy/aframe/linepath.vwf.json
  57. 4 0
      public/defaults/proxy/aframe/node.vwf.json
  58. 2 2
      public/defaults/proxy/aframe/offsetcamera.js
  59. 21 0
      public/defaults/proxy/aframe/offsetcamera.vwf.json
  60. 15 0
      public/defaults/proxy/aframe/raycasterComponent.vwf.json
  61. 8 0
      public/defaults/proxy/aframe/shadowComponent.vwf.json
  62. 5 0
      public/defaults/proxy/aframe/streamSoundComponent.vwf.json
  63. 4 4
      public/defaults/proxy/aframe/transport.js
  64. 31 0
      public/defaults/proxy/aframe/transport.vwf.json
  65. 0 0
      public/defaults/proxy/aframe/viewOffsetCamera-component.js
  66. 18 0
      public/defaults/proxy/aframe/viewOffsetCamera-component.vwf.json
  67. 8 0
      public/defaults/proxy/aframe/wasd-controls.vwf.json
  68. 9 9
      public/defaults/proxy/aframe/wmrvrcontroller.js
  69. 31 0
      public/defaults/proxy/aframe/wmrvrcontroller.vwf.json
  70. 4 4
      public/defaults/proxy/aframe/xrcontroller.js
  71. 40 0
      public/defaults/proxy/aframe/xrcontroller.vwf.json
  72. 295 0
      public/defaults/proxy/animation/animation.js
  73. 138 0
      public/defaults/proxy/animation/animation.vwf.json
  74. 247 0
      public/defaults/proxy/animation/animationNode.js
  75. 73 0
      public/defaults/proxy/animation/animationNode.vwf.json
  76. 7 0
      public/defaults/proxy/animation/position.vwf.json
  77. 3 0
      public/defaults/proxy/client.js
  78. 18 0
      public/defaults/proxy/client.vwf.json
  79. 3 0
      public/defaults/proxy/clients.vwf.json
  80. 12 0
      public/defaults/proxy/node.vwf.json
  81. 8 0
      public/defaults/proxy/ohm/node.vwf.json
  82. 0 10
      public/defaults/proxy/vwf.example.com/aframe/a-arjs-anchor.vwf.yaml
  83. 0 7
      public/defaults/proxy/vwf.example.com/aframe/a-asset-audio-item.vwf.yaml
  84. 0 9
      public/defaults/proxy/vwf.example.com/aframe/a-asset-image-item.vwf.yaml
  85. 0 7
      public/defaults/proxy/vwf.example.com/aframe/a-asset-item.vwf.yaml
  86. 0 9
      public/defaults/proxy/vwf.example.com/aframe/a-asset-video-item.vwf.yaml
  87. 0 7
      public/defaults/proxy/vwf.example.com/aframe/a-mirror-component.vwf.yaml
  88. 0 28
      public/defaults/proxy/vwf.example.com/aframe/a-sound-component.vwf.yaml
  89. 0 5
      public/defaults/proxy/vwf.example.com/aframe/a-sun-sky.vwf.yaml
  90. 0 51
      public/defaults/proxy/vwf.example.com/aframe/aMaterialComponent.vwf.yaml
  91. 0 10
      public/defaults/proxy/vwf.example.com/aframe/aSceneFogComponent.vwf.yaml
  92. 0 10
      public/defaults/proxy/vwf.example.com/aframe/aabb-collider-component.vwf.yaml
  93. 0 10
      public/defaults/proxy/vwf.example.com/aframe/aanimation.vwf.yaml
  94. 0 11
      public/defaults/proxy/vwf.example.com/aframe/abox.vwf.yaml
  95. 0 17
      public/defaults/proxy/vwf.example.com/aframe/acamera.vwf.yaml
  96. 0 12
      public/defaults/proxy/vwf.example.com/aframe/acolladamodel.vwf.yaml
  97. 0 13
      public/defaults/proxy/vwf.example.com/aframe/acone.vwf.yaml
  98. 0 8
      public/defaults/proxy/vwf.example.com/aframe/acursor.vwf.yaml
  99. 0 14
      public/defaults/proxy/vwf.example.com/aframe/acylinder.vwf.yaml
  100. 0 110
      public/defaults/proxy/vwf.example.com/aframe/aentity.vwf.yaml

File diff suppressed because it is too large
+ 167 - 531
public/app.js


+ 16 - 16
public/defaults/assets/nodes/defaultAvatarCostume.yaml

@@ -1,5 +1,5 @@
   defaultAvatarCostume:
   defaultAvatarCostume:
-    extends: "http://vwf.example.com/aframe/aentity.vwf"
+    extends: "proxy/aframe/aentity.vwf"
     properties:
     properties:
       position: [0, -10, 0]
       position: [0, -10, 0]
       visible: false
       visible: false
@@ -14,7 +14,7 @@
                 this.myHead.myCursor.line.color = myColor;
                 this.myHead.myCursor.line.color = myColor;
     children:
     children:
       myBody:
       myBody:
-        extends: "http://vwf.example.com/aframe/abox.vwf"
+        extends: "proxy/aframe/abox.vwf"
         properties:
         properties:
           position: [0, 0.66, 0.7]
           position: [0, 0.66, 0.7]
           height: 1.3
           height: 1.3
@@ -22,12 +22,12 @@
           depth: 0.1
           depth: 0.1
         children:
         children:
           material:
           material:
-            extends: "http://vwf.example.com/aframe/aMaterialComponent.vwf"
+            extends: "proxy/aframe/aMaterialComponent.vwf"
             type: "component"
             type: "component"
             properties:
             properties:
               color: "white"
               color: "white"
       myName:
       myName:
-        extends: "http://vwf.example.com/aframe/atext.vwf"
+        extends: "proxy/aframe/atext.vwf"
         properties:
         properties:
           color: "white"
           color: "white"
           value: "avatar"
           value: "avatar"
@@ -35,18 +35,18 @@
           rotation: [0, 180, 0]
           rotation: [0, 180, 0]
           position: [0.3, 2.05, 0.5]
           position: [0.3, 2.05, 0.5]
       myHead:
       myHead:
-        extends: "http://vwf.example.com/aframe/aentity.vwf"
+        extends: "proxy/aframe/aentity.vwf"
         properties:
         properties:
           position: [0, 1.6, 0.7]
           position: [0, 1.6, 0.7]
           visible: true
           visible: true
         children:
         children:
           interpolation:
           interpolation:
-            extends: "http://vwf.example.com/aframe/interpolation-component.vwf"
+            extends: "proxy/aframe/interpolation-component.vwf"
             type: "component"
             type: "component"
             properties:
             properties:
               enabled: true
               enabled: true
           visual:
           visual:
-            extends: "http://vwf.example.com/aframe/abox.vwf"
+            extends: "proxy/aframe/abox.vwf"
             properties:
             properties:
               height: 0.5
               height: 0.5
               width: 0.5
               width: 0.5
@@ -54,22 +54,22 @@
               visible: true
               visible: true
             children:
             children:
               material:
               material:
-                extends: "http://vwf.example.com/aframe/aMaterialComponent.vwf"
+                extends: "proxy/aframe/aMaterialComponent.vwf"
                 type: "component"
                 type: "component"
                 properties:
                 properties:
                   color: "white"
                   color: "white"
           myCamera:
           myCamera:
-            extends: "http://vwf.example.com/aframe/acamera.vwf"
+            extends: "proxy/aframe/acamera.vwf"
             properties:
             properties:
               position: [0, 0, -0.7]
               position: [0, 0, -0.7]
               look-controls-enabled: false
               look-controls-enabled: false
               wasd-controls-enabled: false
               wasd-controls-enabled: false
               user-height: 0
               user-height: 0
           myCursor:
           myCursor:
-            extends: "http://vwf.example.com/aframe/aentity.vwf"
+            extends: "proxy/aframe/aentity.vwf"
             children:
             children:
               vis:
               vis:
-                extends: "http://vwf.example.com/aframe/abox.vwf"
+                extends: "proxy/aframe/abox.vwf"
                 properties:
                 properties:
                   position: [0, 0, -3]
                   position: [0, 0, -3]
                   height: 0.05
                   height: 0.05
@@ -78,29 +78,29 @@
                   visible: true
                   visible: true
                 children:
                 children:
                   material:
                   material:
-                    extends: "http://vwf.example.com/aframe/aMaterialComponent.vwf"
+                    extends: "proxy/aframe/aMaterialComponent.vwf"
                     type: "component"
                     type: "component"
                     properties:
                     properties:
                       color: "white"            
                       color: "white"            
                   aabb-collider:
                   aabb-collider:
-                    extends: "http://vwf.example.com/aframe/aabb-collider-component.vwf"
+                    extends: "proxy/aframe/aabb-collider-component.vwf"
                     type: "component"
                     type: "component"
                     properties:
                     properties:
                       debug: false
                       debug: false
                       interval: 10
                       interval: 10
                       objects: ".hit"
                       objects: ".hit"
               line:
               line:
-                extends: "http://vwf.example.com/aframe/lineComponent.vwf"
+                extends: "proxy/aframe/lineComponent.vwf"
                 type: "component"
                 type: "component"
                 properties:
                 properties:
                   start: "0 0 -1"
                   start: "0 0 -1"
                   end: "0 0 -3"
                   end: "0 0 -3"
                   color: "white"
                   color: "white"
               myRayCaster:
               myRayCaster:
-                extends: "http://vwf.example.com/aframe/aentity.vwf"
+                extends: "proxy/aframe/aentity.vwf"
                 children:
                 children:
                   raycaster:
                   raycaster:
-                    extends: "http://vwf.example.com/aframe/raycasterComponent.vwf"
+                    extends: "proxy/aframe/raycasterComponent.vwf"
                     type: "component"
                     type: "component"
                     properties:
                     properties:
                       recursive: false
                       recursive: false

+ 11 - 0
public/defaults/proxy/aframe/a-arjs-anchor.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-anchor",
+  "properties": {
+    "hit-testing-enabled": null,
+    "changeMatrixMode": null,
+    "preset": null,
+    "markerType": null,
+    "markerValue": null
+  }
+}

+ 8 - 0
public/defaults/proxy/aframe/a-asset-audio-item.vwf.json

@@ -0,0 +1,8 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "audio",
+  "properties": {
+    "itemID": null,
+    "itemSrc": null
+  }
+}

+ 10 - 0
public/defaults/proxy/aframe/a-asset-image-item.vwf.json

@@ -0,0 +1,10 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "image",
+  "properties": {
+    "itemID": null,
+    "itemSrc": null,
+    "width": null,
+    "height": null
+  }
+}

+ 8 - 0
public/defaults/proxy/aframe/a-asset-item.vwf.json

@@ -0,0 +1,8 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "a-asset-item",
+  "properties": {
+    "itemID": null,
+    "itemSrc": null
+  }
+}

+ 10 - 0
public/defaults/proxy/aframe/a-asset-video-item.vwf.json

@@ -0,0 +1,10 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "video",
+  "properties": {
+    "itemID": null,
+    "itemSrc": null,
+    "videoWidth": null,
+    "videoHeight": null
+  }
+}

+ 8 - 0
public/defaults/proxy/aframe/a-mirror-component.vwf.json

@@ -0,0 +1,8 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "camera": null,
+    "renderothermirror": null
+  }
+}

+ 0 - 0
public/defaults/proxy/vwf.example.com/aframe/a-sound-component.js → public/defaults/proxy/aframe/a-sound-component.js


+ 35 - 0
public/defaults/proxy/aframe/a-sound-component.vwf.json

@@ -0,0 +1,35 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "autoplay": null,
+    "distanceModel": null,
+    "loop": null,
+    "maxDistance": null,
+    "on": null,
+    "poolSize": null,
+    "refDistance": null,
+    "rolloffFactor": null,
+    "src": null,
+    "volume": null,
+    "isPlaying": null
+  },
+  "methods": {
+    "stopSound": {},
+    "playSound": {},
+    "pauseSound": {},
+    "refreshSrc": {
+      "parameters": [
+        "srcID"
+      ]
+    },
+    "updateSrc": {
+      "parameters": [
+        "srcID"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "a-sound-component.js"
+  }
+}

+ 6 - 0
public/defaults/proxy/aframe/a-sun-sky.vwf.json

@@ -0,0 +1,6 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "properties": {
+    "sunPosition": null
+  }
+}

+ 0 - 0
public/defaults/proxy/vwf.example.com/aframe/aMaterialComponent.js → public/defaults/proxy/aframe/aMaterialComponent.js


+ 56 - 0
public/defaults/proxy/aframe/aMaterialComponent.vwf.json

@@ -0,0 +1,56 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "alphaTest": null,
+    "depthTest": null,
+    "flatShading": null,
+    "npot": null,
+    "offset": null,
+    "opacity": null,
+    "remain": null,
+    "repeat": null,
+    "shader": null,
+    "side": null,
+    "transparent": null,
+    "vertexColors": null,
+    "visible": null,
+    "ambient-occlusion-map": null,
+    "ambient-occlusion-map-intensity": null,
+    "ambient-occlusion-texture-offset": null,
+    "ambient-occlusion-texture-repeat": null,
+    "color": null,
+    "displacement-bias": null,
+    "displacement-map": null,
+    "displacement-scale": null,
+    "displacement-texture-offset": null,
+    "displacement-texture-repeat": null,
+    "emissive": null,
+    "emissiveIntensity": null,
+    "height": null,
+    "envMap": null,
+    "fog": null,
+    "metalness": null,
+    "normal-map": null,
+    "normal-scale": null,
+    "normal-texture-offset": null,
+    "normal-texture-repeat": null,
+    "roughness": null,
+    "sphericalEnvMap": null,
+    "width": null,
+    "wireframe": null,
+    "wireframe-linewidth": null,
+    "src": null
+  },
+  "methods": {
+    "refreshSrc": {},
+    "updateSrc": {
+      "parameters": [
+        "srcID"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "aMaterialComponent.js"
+  }
+}

+ 11 - 0
public/defaults/proxy/aframe/aSceneFogComponent.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "fogType": null,
+    "fogColor": null,
+    "density": null,
+    "near": null,
+    "far": null
+  }
+}

+ 11 - 0
public/defaults/proxy/aframe/aabb-collider-component.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "collideNonVisible": null,
+    "debug": null,
+    "enabled": null,
+    "objects": null,
+    "interval": null
+  }
+}

+ 12 - 0
public/defaults/proxy/aframe/aanimation.vwf.json

@@ -0,0 +1,12 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "a-animation",
+  "properties": {
+    "attribute": null,
+    "dur": null,
+    "from": null,
+    "to": null,
+    "repeat": null,
+    "begin": null
+  }
+}

+ 12 - 0
public/defaults/proxy/aframe/abox.vwf.json

@@ -0,0 +1,12 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-box",
+  "properties": {
+    "depth": null,
+    "height": null,
+    "segments-depth": null,
+    "segments-height": null,
+    "segments-width": null,
+    "width": null
+  }
+}

+ 3 - 0
public/defaults/proxy/aframe/acamera.js

@@ -0,0 +1,3 @@
+this.setCameraToActive = function(moniker){
+    console.log("set to active call from - ", moniker);
+}

+ 22 - 0
public/defaults/proxy/aframe/acamera.vwf.json

@@ -0,0 +1,22 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-camera",
+  "properties": {
+    "user-height": null,
+    "far": null,
+    "fov": null,
+    "look-controls-enabled": null,
+    "near": null,
+    "wasd-controls-enabled": null
+  },
+  "methods": {
+    "setCameraToActive": {
+      "parameters": [
+        "moniker"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "acamera.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/vwf.example.com/aframe/acolladamodel.js → public/defaults/proxy/aframe/acolladamodel.js


+ 17 - 0
public/defaults/proxy/aframe/acolladamodel.vwf.json

@@ -0,0 +1,17 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-collada-model",
+  "properties": {
+    "src": null
+  },
+  "methods": {
+    "updateModel": {
+      "parameters": [
+        "obj"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "acolladamodel.js"
+  }
+}

+ 14 - 0
public/defaults/proxy/aframe/acone.vwf.json

@@ -0,0 +1,14 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-cone",
+  "properties": {
+    "height": null,
+    "open-ended": null,
+    "radius-bottom": null,
+    "radius-top": null,
+    "segments-height": null,
+    "segments-radial": null,
+    "theta-length": null,
+    "theta-start": null
+  }
+}

+ 9 - 0
public/defaults/proxy/aframe/acursor.vwf.json

@@ -0,0 +1,9 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-cursor",
+  "properties": {
+    "fuse": null,
+    "fuse-timeout": null,
+    "max-distance": null
+  }
+}

+ 15 - 0
public/defaults/proxy/aframe/acylinder.vwf.json

@@ -0,0 +1,15 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-cylinder",
+  "properties": {
+    "height": null,
+    "radius": null,
+    "open-ended": null,
+    "radius-bottom": null,
+    "radius-top": null,
+    "segments-height": null,
+    "segments-radial": null,
+    "theta-length": null,
+    "theta-start": null
+  }
+}

+ 73 - 34
public/defaults/proxy/vwf.example.com/aframe/aentity.js → public/defaults/proxy/aframe/aentity.js

@@ -6,14 +6,14 @@ this.getChildByName = function (name) {
 this.nodeDef = function () {
 this.nodeDef = function () {
     let def = _app.helpers.getNodeDef(this.id);
     let def = _app.helpers.getNodeDef(this.id);
     return def
     return def
- }
+}
 
 
 this.clone = function () {
 this.clone = function () {
-   let nodeDef = _app.helpers.getNodeDef(this.id);
-   return nodeDef
+    let nodeDef = _app.helpers.getNodeDef(this.id);
+    return nodeDef
 }
 }
 
 
-this.getScene =  function () {
+this.getScene = function () {
     let scene = this.find("/")[0];
     let scene = this.find("/")[0];
     return scene
     return scene
 }
 }
@@ -27,7 +27,7 @@ this.setGizmoMode = function (mode) {
 this.showCloseGizmo = function () {
 this.showCloseGizmo = function () {
     let gizmoNode =
     let gizmoNode =
     {
     {
-        "extends": "http://vwf.example.com/aframe/gizmoComponent.vwf",
+        "extends": "proxy/aframe/gizmoComponent.vwf",
         "type": "component",
         "type": "component",
         "properties":
         "properties":
         {
         {
@@ -58,7 +58,7 @@ this.translationFromValue = function (propertyValue) {
 
 
         let val = propertyValue.includes(',') ? AFRAME.utils.coordinates.parse(propertyValue.split(',').join(' ')) : AFRAME.utils.coordinates.parse(propertyValue);
         let val = propertyValue.includes(',') ? AFRAME.utils.coordinates.parse(propertyValue.split(',').join(' ')) : AFRAME.utils.coordinates.parse(propertyValue);
         value = goog.vec.Vec3.createFromValues(val.x, val.y, val.z)
         value = goog.vec.Vec3.createFromValues(val.x, val.y, val.z)
-        
+
     } else if (propertyValue.hasOwnProperty('0')) {
     } else if (propertyValue.hasOwnProperty('0')) {
         value = goog.vec.Vec3.createFromValues(propertyValue[0], propertyValue[1], propertyValue[2])
         value = goog.vec.Vec3.createFromValues(propertyValue[0], propertyValue[1], propertyValue[2])
     }
     }
@@ -121,7 +121,7 @@ this.clickEventMethod = function () {
 
 
 this.setOwner = function (param) {
 this.setOwner = function (param) {
 
 
-    var clients = this.find("doc('http://vwf.example.com/clients.vwf')")[0];
+    var clients = this.find("doc('proxy/clients.vwf')")[0];
 
 
     if (clients !== undefined) {
     if (clients !== undefined) {
         //console.log(clients.children);
         //console.log(clients.children);
@@ -154,59 +154,59 @@ this.setOwner = function (param) {
 }
 }
 
 
 this.updateMethod = function (methodName, methodBody, params) {
 this.updateMethod = function (methodName, methodBody, params) {
-    vwf.setMethod(this.id, methodName, { body: methodBody, type: "application/javascript", parameters: params});
+    vwf.setMethod(this.id, methodName, { body: methodBody, type: "application/javascript", parameters: params });
 }
 }
 
 
-this.callMethod = function(methodName, params){
+this.callMethod = function (methodName, params) {
     vwf.callMethod(this.id, methodName, params)
     vwf.callMethod(this.id, methodName, params)
 }
 }
 
 
-this.do = function() {
+this.do = function () {
     //do in step
     //do in step
 }
 }
 
 
-this.step = function(){
+this.step = function () {
 
 
-    if (this.stepping){
+    if (this.stepping) {
         this.do();
         this.do();
     }
     }
-    
-    let t = this.stepTime ? this.stepTime: 0.05;
+
+    let t = this.stepTime ? this.stepTime : 0.05;
 
 
     this.future(t).step();
     this.future(t).step();
 }
 }
 
 
-this.onGlobalBeat = function(obj) {
+this.onGlobalBeat = function (obj) {
     //dispatch the beat example send OSC
     //dispatch the beat example send OSC
     let transportNode = this.find('//' + obj.name)[0];
     let transportNode = this.find('//' + obj.name)[0];
     let rate = transportNode.animationRate; // 1 by default
     let rate = transportNode.animationRate; // 1 by default
     let drumSeq = [
     let drumSeq = [
-    {beat:0, msg: 0},
-    {beat:30, msg: 0}];
-    drumSeq.forEach(el=>{
-      if(el.beat/rate == obj.beat){
-        let msg = {
-            address: "/trigger/sample01",
-            args: [this.time, 'bd_808', 3]
-        };
-        //for synth {beat:0, msg: "A"}
-        //let msg = {
-        // address: "/trigger/synth01",
-        // args: [this.time, 'piano', el.msg, 0.1, 1]};
-
-        // this.sendOSC(msg); 
-        // this.changeVisual();
-      }
+        { beat: 0, msg: 0 },
+        { beat: 30, msg: 0 }];
+    drumSeq.forEach(el => {
+        if (el.beat / rate == obj.beat) {
+            let msg = {
+                address: "/trigger/sample01",
+                args: [this.time, 'bd_808', 3]
+            };
+            //for synth {beat:0, msg: "A"}
+            //let msg = {
+            // address: "/trigger/synth01",
+            // args: [this.time, 'piano', el.msg, 0.1, 1]};
+
+            // this.sendOSC(msg); 
+            // this.changeVisual();
+        }
     })
     })
 
 
 }
 }
 
 
-this.changeVisual = function() {
+this.changeVisual = function () {
     //code for changing me
     //code for changing me
     this.future(0.1).resetVisual();
     this.future(0.1).resetVisual();
 }
 }
 
 
-this.resetVisual = function() {
+this.resetVisual = function () {
 
 
 }
 }
 
 
@@ -220,5 +220,44 @@ this.getRandomColor = function () {
 }
 }
 
 
 this.randomize = function () {
 this.randomize = function () {
-    
+
+}
+
+this.position_set = function (value) {
+    var position = this.translationFromValue(value); // parse incoming value
+    if (!position || !this.position) {
+        this.position = goog.vec.Vec3.create();
+    } else if (!goog.vec.Vec3.equals(this.position || goog.vec.Vec3.create(), position)) {
+        this.position = position;
+        this.positionChanged(position);
+    }
+}
+this.position_get = function () {
+    return this.position || goog.vec.Vec3.create();
+}
+
+this.rotation_set = function (value) {
+    var rotation = this.translationFromValue(value); // parse incoming value
+    if (!rotation || !this.rotation) {
+        this.rotation = goog.vec.Vec3.create();
+    } else if (!goog.vec.Vec3.equals(this.rotation || goog.vec.Vec3.create(), rotation)) {
+        this.rotation = rotation;
+        this.rotationChanged(rotation);
+    }
+}
+this.rotation_get = function () {
+    return this.rotation || goog.vec.Vec3.create();
+}
+
+this.scale_set = function (value) {
+  var scale = this.translationFromValue( value ); // parse incoming value
+  if(!scale || !this.scale){
+    this.scale = goog.vec.Vec3.create();
+  } else if ( ! goog.vec.Vec3.equals( this.scale || goog.vec.Vec3.create(), scale ) ) {
+    this.scale = scale;
+    this.scaleChanged( scale);
+  }  
+}
+this.scale_get = function () {
+  return this.scale || goog.vec.Vec3.create();
 }
 }

+ 130 - 0
public/defaults/proxy/aframe/aentity.vwf.json

@@ -0,0 +1,130 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "a-entity",
+  "implements": [
+    "proxy/animation/animation.vwf",
+    "proxy/animation/animationNode.vwf"
+  ],
+  "properties": {
+    "position": {
+      "set": "this.position_set(value)",
+      "get": "return this.position_get()"
+    },
+    "rotation": {
+      "set": "this.rotation_set(value)",
+      "get": "return this.rotation_get()"
+    },
+    "scale": {
+      "set": "this.scale_set(value)",
+      "get": "return this.scale_get()"
+    },
+    "clickable": null,
+    "displayName": null,
+    "visible": null,
+    "edit": null,
+    "osc": null,
+    "ownedBy": null,
+    "class": null,
+    "stepping": null,
+    "stepTime": null,
+    "globalBeat": null,
+    "meta": null
+  },
+  "events": {
+    "positionChanged": {},
+    "rotationChanged": {},
+    "scaleChanged": {},
+    "sendOSC": {},
+    "intersectEvent": {},
+    "clearIntersectEvent": {},
+    "hitstartEvent": {},
+    "hitendEvent": {},
+    "clickEvent": {}
+  },
+  "methods": {
+    "position_get":{},
+    "position_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+      "rotation_get":{},
+      "rotation_set": {
+        "parameters": [
+          "value"
+        ]
+      },
+      "scale_get":{},
+      "scale_set": {
+        "parameters": [
+          "value"
+        ]
+      },
+    "getRandomColor": {},
+    "intersectEventMethod": {},
+    "clearIntersectEventMethod": {},
+    "hitstartEventMethod": {},
+    "hitendEventMethod": {},
+    "clickEventMethod": {},
+    "sendOSC": {
+      "parameters": [
+        "msg"
+      ]
+    },
+    "setGizmoMode": {
+      "parameters": [
+        "mode"
+      ]
+    },
+    "showCloseGizmo": {},
+    "lookAt": {
+      "parameters": [
+        "nodeID"
+      ]
+    },
+    "worldRotation": {},
+    "worldPosition": {},
+    "translationFromValue": {
+      "parameters": [
+        "propertyValue"
+      ]
+    },
+    "getChildByName": {
+      "parameters": [
+        "name"
+      ]
+    },
+    "setOwner": {
+      "parameters": [
+        "propertyValue"
+      ]
+    },
+    "updateMethod": {
+      "parameters": [
+        "methodName",
+        "methodBody",
+        "params"
+      ]
+    },
+    "callMethod": {
+      "parameters": [
+        "methodName",
+        "params"
+      ]
+    },
+    "onGlobalBeat": {
+      "parameters": [
+        "obj"
+      ]
+    },
+    "changeVisual": {},
+    "resetVisual": {},
+    "step": {},
+    "do": {},
+    "randomize": {},
+    "nodeDef": {}
+  },
+  "scripts": {
+    "source": "aentity.js"
+  }
+}

+ 5 - 0
public/defaults/proxy/aframe/aentityComponent.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/componentNode.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 0 - 0
public/defaults/proxy/vwf.example.com/aframe/agltfmodel.js → public/defaults/proxy/aframe/agltfmodel.js


+ 17 - 0
public/defaults/proxy/aframe/agltfmodel.vwf.json

@@ -0,0 +1,17 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-gltf-model",
+  "properties": {
+    "src": null
+  },
+  "methods": {
+    "updateModel": {
+      "parameters": [
+        "obj"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "agltfmodel.js"
+  }
+}

+ 17 - 0
public/defaults/proxy/aframe/alight.vwf.json

@@ -0,0 +1,17 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-light",
+  "properties": {
+    "angle": null,
+    "color": null,
+    "decay": null,
+    "distance": null,
+    "ground-color": null,
+    "intensity": null,
+    "penumbra": null,
+    "type": null,
+    "target": null,
+    "castShadow": null,
+    "shadowCameraVisible": null
+  }
+}

+ 11 - 0
public/defaults/proxy/aframe/anim-mixer-component.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "clip": null,
+    "duration": null,
+    "crossFadeDuration": null,
+    "loop": null,
+    "repetitions": null
+  }
+}

+ 0 - 0
public/defaults/proxy/vwf.example.com/aframe/aobjmodel.js → public/defaults/proxy/aframe/aobjmodel.js


+ 23 - 0
public/defaults/proxy/aframe/aobjmodel.vwf.json

@@ -0,0 +1,23 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-obj-model",
+  "properties": {
+    "src": null,
+    "mtl": null
+  },
+  "methods": {
+    "updateModel": {
+      "parameters": [
+        "obj"
+      ]
+    },
+    "updateModelMtl": {
+      "parameters": [
+        "mtl"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "aobjmodel.js"
+  }
+}

+ 10 - 0
public/defaults/proxy/aframe/aplane.vwf.json

@@ -0,0 +1,10 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-plane",
+  "properties": {
+    "height": null,
+    "segments-height": null,
+    "segments-width": null,
+    "width": null
+  }
+}

+ 5 - 0
public/defaults/proxy/aframe/app-aabb-collider-listener-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 5 - 0
public/defaults/proxy/aframe/app-avatarbvh-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 5 - 0
public/defaults/proxy/aframe/app-cursor-listener-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 5 - 0
public/defaults/proxy/aframe/app-envmap-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 5 - 0
public/defaults/proxy/aframe/app-raycaster-listener-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 5 - 0
public/defaults/proxy/aframe/app-skyshader-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 5 - 0
public/defaults/proxy/aframe/app-sun-component.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 56 - 56
public/defaults/proxy/vwf.example.com/aframe/ascene.js → public/defaults/proxy/aframe/ascene.js

@@ -8,7 +8,7 @@ this.clientWatch = function () {
 
 
     if (this.children.length !== 0) {
     if (this.children.length !== 0) {
 
 
-        var clients = this.find("doc('http://vwf.example.com/clients.vwf')")[0];
+        var clients = this.find("doc('proxy/clients.vwf')")[0];
 
 
         if (clients !== undefined) {
         if (clients !== undefined) {
             //console.log(clients.children);
             //console.log(clients.children);
@@ -66,7 +66,7 @@ this.clientWatch = function () {
 this.sphereProto = function () {
 this.sphereProto = function () {
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/asphere.vwf",
+        "extends": "proxy/aframe/asphere.vwf",
         "properties": {
         "properties": {
             "displayName": "sphere",
             "displayName": "sphere",
             "radius": 1,
             "radius": 1,
@@ -74,7 +74,7 @@ this.sphereProto = function () {
         },
         },
         children: {
         children: {
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties":{
                 "properties":{
                     "color": "white"
                     "color": "white"
@@ -82,14 +82,14 @@ this.sphereProto = function () {
             },
             },
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             }
             }
         },
         },
@@ -106,7 +106,7 @@ this.sphereProto = function () {
 this.cylinderProto = function () {
 this.cylinderProto = function () {
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/acylinder.vwf",
+        "extends": "proxy/aframe/acylinder.vwf",
         "properties": {
         "properties": {
             "displayName": "cylinder",
             "displayName": "cylinder",
             "radius": 1,
             "radius": 1,
@@ -115,7 +115,7 @@ this.cylinderProto = function () {
         },
         },
         children: {
         children: {
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties":{
                 "properties":{
                     "color": "white"
                     "color": "white"
@@ -123,14 +123,14 @@ this.cylinderProto = function () {
             },
             },
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             }
             }
         },
         },
@@ -147,7 +147,7 @@ this.cylinderProto = function () {
 this.coneProto = function () {
 this.coneProto = function () {
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/acone.vwf",
+        "extends": "proxy/aframe/acone.vwf",
         "properties": {
         "properties": {
             "displayName": "cone",
             "displayName": "cone",
             "radius-bottom": 1,
             "radius-bottom": 1,
@@ -157,7 +157,7 @@ this.coneProto = function () {
         },
         },
         children: {
         children: {
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties":{
                 "properties":{
                     "color": "white"
                     "color": "white"
@@ -165,14 +165,14 @@ this.coneProto = function () {
             },
             },
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             }
             }
         },
         },
@@ -191,7 +191,7 @@ this.textProto = function (textValue) {
     let value = textValue ? textValue: "Text";
     let value = textValue ? textValue: "Text";
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/atext.vwf",
+        "extends": "proxy/aframe/atext.vwf",
         "properties": {
         "properties": {
             "displayName": "text",
             "displayName": "text",
             "color": "white",
             "color": "white",
@@ -204,14 +204,14 @@ this.textProto = function (textValue) {
         children: {
         children: {
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             }
             }
         },
         },
@@ -228,7 +228,7 @@ this.textProto = function (textValue) {
 this.cubeProto = function () {
 this.cubeProto = function () {
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/abox.vwf",
+        "extends": "proxy/aframe/abox.vwf",
         "properties": {
         "properties": {
             "displayName": "cube",
             "displayName": "cube",
             "height": 1,
             "height": 1,
@@ -239,18 +239,18 @@ this.cubeProto = function () {
         children: {
         children: {
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             },
             },
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties":{
                 "properties":{
                     "color": "white"
                     "color": "white"
@@ -276,7 +276,7 @@ this.lightProto = function (lightType) {
     }
     }
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/alight.vwf",
+        "extends": "proxy/aframe/alight.vwf",
         "properties": {
         "properties": {
             "displayName": newLightType,
             "displayName": newLightType,
             "type": newLightType,
             "type": newLightType,
@@ -285,14 +285,14 @@ this.lightProto = function (lightType) {
         children: {
         children: {
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             }
             }
         },
         },
@@ -315,7 +315,7 @@ this.mirrorProto = function () {
     newNode.children.material.properties.color = "white";
     newNode.children.material.properties.color = "white";
 
 
     newNode.children.mirrorComponent = {
     newNode.children.mirrorComponent = {
-        "extends": "http://vwf.example.com/aframe/a-mirror-component.vwf",
+        "extends": "proxy/aframe/a-mirror-component.vwf",
         "type": "component",
         "type": "component",
         "properties": {
         "properties": {
             "camera": "avatarControl"
             "camera": "avatarControl"
@@ -335,7 +335,7 @@ this.cameraProto = function () {
     newNode.children.material.properties.color = "red";
     newNode.children.material.properties.color = "red";
 
 
     newNode.children.camera = {
     newNode.children.camera = {
-        "extends": "http://vwf.example.com/aframe/acamera.vwf",
+        "extends": "proxy/aframe/acamera.vwf",
         "properties": {
         "properties": {
             "look-controls-enabled": false,
             "look-controls-enabled": false,
             "wasd-controls-enabled": false,
             "wasd-controls-enabled": false,
@@ -356,7 +356,7 @@ this.cameraProtoWithOffset = function () {
     newNode.children.material.properties.color = "red";
     newNode.children.material.properties.color = "red";
 
 
     newNode.children.camera = {
     newNode.children.camera = {
-        "extends": "http://vwf.example.com/aframe/acamera.vwf",
+        "extends": "proxy/aframe/acamera.vwf",
         "properties": {
         "properties": {
             "look-controls-enabled": false,
             "look-controls-enabled": false,
             "wasd-controls-enabled": false,
             "wasd-controls-enabled": false,
@@ -364,7 +364,7 @@ this.cameraProtoWithOffset = function () {
         },
         },
         children: {
         children: {
             viewoffset: {
             viewoffset: {
-                extends: "http://vwf.example.com/aframe/viewOffsetCamera-component.vwf",
+                extends: "proxy/aframe/viewOffsetCamera-component.vwf",
                 properties: {
                 properties: {
                 }
                 }
             }
             }
@@ -378,7 +378,7 @@ this.cameraProtoWithOffset = function () {
 this.planeProto = function () {
 this.planeProto = function () {
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/aplane.vwf",
+        "extends": "proxy/aframe/aplane.vwf",
         "properties": {
         "properties": {
             "displayName": "plane",
             "displayName": "plane",
             "height": 1,
             "height": 1,
@@ -387,7 +387,7 @@ this.planeProto = function () {
         },
         },
         children: {
         children: {
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties": {
                 "properties": {
                     "side": "double",
                     "side": "double",
@@ -396,14 +396,14 @@ this.planeProto = function () {
             },
             },
             "interpolation":
             "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
                     }
                     }
                 },
                 },
             "cursor-listener": {
             "cursor-listener": {
-                "extends": "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                "extends": "proxy/aframe/app-cursor-listener-component.vwf",
                 "type": "component"
                 "type": "component"
             }
             }
         },
         },
@@ -440,7 +440,7 @@ this.createModelObj = function (mtlSrc, objSrc, name, avatar) {
     }
     }
 
 
     let modelNode = {
     let modelNode = {
-        "extends": "http://vwf.example.com/aframe/aobjmodel.vwf",
+        "extends": "proxy/aframe/aobjmodel.vwf",
         "properties": {
         "properties": {
             "src": '#' + objSrc,
             "src": '#' + objSrc,
             "mtl": '#' + mtlSrc,
             "mtl": '#' + mtlSrc,
@@ -449,7 +449,7 @@ this.createModelObj = function (mtlSrc, objSrc, name, avatar) {
         children:{
         children:{
             "interpolation":
             "interpolation":
             {
             {
-                "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                "extends": "proxy/aframe/interpolation-component.vwf",
                 "type": "component",
                 "type": "component",
                 "properties": {
                 "properties": {
                     "enabled": true
                     "enabled": true
@@ -474,7 +474,7 @@ this.createModel = function (modelType, modelSrc, avatar) {
 
 
     let tagName = modelType + '-ASSET-'+ this.GUID();
     let tagName = modelType + '-ASSET-'+ this.GUID();
     let tagNode = {
     let tagNode = {
-        "extends": "http://vwf.example.com/aframe/a-asset-item.vwf",
+        "extends": "proxy/aframe/a-asset-item.vwf",
         "properties": {
         "properties": {
             "itemID": tagName,
             "itemID": tagName,
             "itemSrc": modelSrc
             "itemSrc": modelSrc
@@ -498,9 +498,9 @@ this.createModel = function (modelType, modelSrc, avatar) {
         }
         }
        
        
         const protos = {
         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"
+            DAE: "proxy/aframe/acolladamodel.vwf",
+            OBJ: "proxy/aframe/aobjmodel.vwf",
+            GLTF: "proxy/aframe/agltfmodel.vwf"
         }
         }
 
 
 
 
@@ -515,7 +515,7 @@ this.createModel = function (modelType, modelSrc, avatar) {
             children:{
             children:{
                 "interpolation":
                 "interpolation":
                 {
                 {
-                    "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                    "extends": "proxy/aframe/interpolation-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         "enabled": true
                         "enabled": true
@@ -537,10 +537,10 @@ this.createAssetResource = function(resType, resSrc){
     var self = this;
     var self = this;
 
 
     const protos = {
     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" 
+        IMG: "proxy/aframe/a-asset-image-item.vwf",
+        AUDIO: "proxy/aframe/a-asset-audio-item.vwf",
+        VIDEO:  "proxy/aframe/a-asset-video-item.vwf",
+        ITEM:  "proxy/aframe/a-asset-item.vwf" 
     };
     };
 
 
     let extendsName = Object.entries(protos).filter(el => el[0] == resType)[0];
     let extendsName = Object.entries(protos).filter(el => el[0] == resType)[0];
@@ -560,13 +560,13 @@ this.createAssetResource = function(resType, resSrc){
 
 
 this.createDrawNode = function(node, name, color, width, pos) {
 this.createDrawNode = function(node, name, color, width, pos) {
     let newNode = {
     let newNode = {
-        extends: "http://vwf.example.com/aframe/aentity.vwf",
+        extends: "proxy/aframe/aentity.vwf",
         properties: {
         properties: {
             position: pos
             position: pos
         },
         },
         children: {
         children: {
             linepath: {
             linepath: {
-                extends: "http://vwf.example.com/aframe/linepath.vwf",
+                extends: "proxy/aframe/linepath.vwf",
                 properties: {
                 properties: {
                     color: color,
                     color: color,
                     path: [],
                     path: [],
@@ -788,7 +788,7 @@ this.createImage = function (imgSrc, name, node, avatar) {
 
 
     let tagName = 'IMG-ASSET-'+ this.GUID();
     let tagName = 'IMG-ASSET-'+ this.GUID();
     let tagNode = {
     let tagNode = {
-        "extends": "http://vwf.example.com/aframe/a-asset-image-item.vwf",
+        "extends": "proxy/aframe/a-asset-image-item.vwf",
         "properties": {
         "properties": {
             "itemID": tagName,
             "itemID": tagName,
             "itemSrc": imgSrc
             "itemSrc": imgSrc
@@ -881,7 +881,7 @@ this.createVideo = function (vidSrc, name, node, avatar) {
 
 
     let tagName = 'VIDEO-ASSET-'+ this.GUID();
     let tagName = 'VIDEO-ASSET-'+ this.GUID();
     let tagNode = {
     let tagNode = {
-        "extends": "http://vwf.example.com/aframe/a-asset-video-item.vwf",
+        "extends": "proxy/aframe/a-asset-video-item.vwf",
         "properties": {
         "properties": {
             "itemID": tagName,
             "itemID": tagName,
             "itemSrc": vidSrc
             "itemSrc": vidSrc
@@ -970,7 +970,7 @@ this.createAudio = function (itemSrc, name, node, avatar) {
 
 
     let tagName = 'AUDIO-ASSET-'+ this.GUID();
     let tagName = 'AUDIO-ASSET-'+ this.GUID();
     let tagNode = {
     let tagNode = {
-        "extends": "http://vwf.example.com/aframe/a-asset-audio-item.vwf",
+        "extends": "proxy/aframe/a-asset-audio-item.vwf",
         "properties": {
         "properties": {
             "itemID": tagName,
             "itemID": tagName,
             "itemSrc": itemSrc
             "itemSrc": itemSrc
@@ -1012,7 +1012,7 @@ this.createAudio = function (itemSrc, name, node, avatar) {
 
 
         newNode.children.sound = {
         newNode.children.sound = {
             
             
-                "extends": "http://vwf.example.com/aframe/a-sound-component.vwf",
+                "extends": "proxy/aframe/a-sound-component.vwf",
                 "type": "component",
                 "type": "component",
                 "properties": {
                 "properties": {
                     "autoplay": false,
                     "autoplay": false,
@@ -1075,7 +1075,7 @@ this.loadGooglePolyAsset = function( params ) {
 
 
             let mtlName = 'MTL-ASSET-'+ self.GUID();
             let mtlName = 'MTL-ASSET-'+ self.GUID();
             let mtlNode = {
             let mtlNode = {
-                "extends": "http://vwf.example.com/aframe/a-asset-item.vwf",
+                "extends": "proxy/aframe/a-asset-item.vwf",
                 "properties": {
                 "properties": {
                     "itemID": mtlName,
                     "itemID": mtlName,
                     "itemSrc": mtl.url
                     "itemSrc": mtl.url
@@ -1086,7 +1086,7 @@ this.loadGooglePolyAsset = function( params ) {
 
 
                 let objName = 'OBJ-ASSET-'+ self.GUID();
                 let objName = 'OBJ-ASSET-'+ self.GUID();
                 let objNode = {
                 let objNode = {
-                    "extends": "http://vwf.example.com/aframe/a-asset-item.vwf",
+                    "extends": "proxy/aframe/a-asset-item.vwf",
                     "properties": {
                     "properties": {
                         "itemID": objName,
                         "itemID": objName,
                         "itemSrc": obj.url
                         "itemSrc": obj.url
@@ -1131,7 +1131,7 @@ this.smallRandomId = function()  {
 this.assetImgProto = function () {
 this.assetImgProto = function () {
 
 
     let node = {
     let node = {
-        "extends": "http://vwf.example.com/aframe/a-asset-image-item.vwf",
+        "extends": "proxy/aframe/a-asset-image-item.vwf",
         "properties": {
         "properties": {
         },
         },
     }
     }
@@ -1146,7 +1146,7 @@ this.createAssetItemImg = function(){
 
 
     let nodeName = "asset-item-img-" + this.smallRandomId();
     let nodeName = "asset-item-img-" + this.smallRandomId();
     let newNode = {
     let newNode = {
-        "extends": "http://vwf.example.com/aframe/a-asset-image-item.vwf",
+        "extends": "proxy/aframe/a-asset-image-item.vwf",
         "properties": {
         "properties": {
             itemID:  nodeName,
             itemID:  nodeName,
             itemSrc: ""
             itemSrc: ""
@@ -1185,7 +1185,7 @@ this.getAllChildsByName = function (name) {
 this.getDefaultXRCostume = function(){
 this.getDefaultXRCostume = function(){
     
     
     let defaultXRCostume = {
     let defaultXRCostume = {
-        "extends": "http://vwf.example.com/aframe/abox.vwf",
+        "extends": "proxy/aframe/abox.vwf",
         "properties": {
         "properties": {
             displayName: "defaultXRCostume",
             displayName: "defaultXRCostume",
             "position": "0 0 0",
             "position": "0 0 0",
@@ -1209,14 +1209,14 @@ this.getDefaultXRCostume = function(){
         },
         },
         children: {
         children: {
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties":{
                 "properties":{
                     "color": "white"
                     "color": "white"
                 }
                 }
             },
             },
             "pointer": {
             "pointer": {
-                "extends": "http://vwf.example.com/aframe/abox.vwf",
+                "extends": "proxy/aframe/abox.vwf",
                 "properties": {
                 "properties": {
                     "position": "0 0 -0.7",
                     "position": "0 0 -0.7",
                     "height": 0.1,
                     "height": 0.1,
@@ -1225,7 +1225,7 @@ this.getDefaultXRCostume = function(){
                 },
                 },
                 children: {
                 children: {
                     "material": {
                     "material": {
-                        "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                        "extends": "proxy/aframe/aMaterialComponent.vwf",
                         "type": "component",
                         "type": "component",
                         "properties":{
                         "properties":{
                             "color": "green"
                             "color": "green"

+ 146 - 0
public/defaults/proxy/aframe/ascene.vwf.json

@@ -0,0 +1,146 @@
+{
+  "extends": "proxy/aframe/node.vwf",
+  "type": "a-scene",
+  "implements": [
+    "proxy/aframe/aentity.vwf"
+  ],
+  "properties": {
+    "assets": null,
+    "color": null,
+    "transparent": null
+  },
+  "methods": {
+    "clientWatch": {},
+    "GUID": {},
+    "createPrimitive": {
+      "parameters": [
+        "type",
+        "params",
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createAssetItemImg": {},
+    "planeProto": {},
+    "cubeProto": {},
+    "sphereProto": {},
+    "cylinderProto": {},
+    "coneProto": {},
+    "textProto": {
+      "parameters": [
+        "textValue"
+      ]
+    },
+    "mirrorProto": {},
+    "lightProto": {
+      "parameters": [
+        "lightType"
+      ]
+    },
+    "createImage": {
+      "parameters": [
+        "imgSrc",
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createAudio": {
+      "parameters": [
+        "itemSrc",
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createVideo": {
+      "parameters": [
+        "vidSrc",
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createAssetResource": {
+      "parameters": [
+        "resType",
+        "resSrc"
+      ]
+    },
+    "createModel": {
+      "parameters": [
+        "modelType",
+        "modelSrc",
+        "avatar"
+      ]
+    },
+    "createModelObj": {
+      "parameters": [
+        "mtlSrc",
+        "objSrc",
+        "name",
+        "avatar"
+      ]
+    },
+    "createGooglePoly": {
+      "parameters": [
+        "polyID",
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createMirror": {
+      "parameters": [
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createCamera": {
+      "parameters": [
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "createCameraWithOffset": {
+      "parameters": [
+        "name",
+        "node",
+        "avatar"
+      ]
+    },
+    "deleteNode": {
+      "parameters": [
+        "nodeName"
+      ]
+    },
+    "getChildByName": {
+      "parameters": [
+        "name"
+      ]
+    },
+    "getAllChildsByName": {
+      "parameters": [
+        "name"
+      ]
+    },
+    "getDefaultXRCostume": {},
+    "enterVR": {},
+    "exitVR": {},
+    "createDrawNode": {
+      "parameters": [
+        "node",
+        "name",
+        "color",
+        "width",
+        "pos"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "ascene.js"
+  }
+}

+ 13 - 0
public/defaults/proxy/aframe/asky.vwf.json

@@ -0,0 +1,13 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-sky",
+  "properties": {
+    "phi-length": null,
+    "phi-start": null,
+    "radius": null,
+    "segments-height": null,
+    "segments-width": null,
+    "theta-length": null,
+    "theta-start": null
+  }
+}

+ 14 - 0
public/defaults/proxy/aframe/asphere.vwf.json

@@ -0,0 +1,14 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-sphere",
+  "properties": {
+    "phi-length": null,
+    "phi-start": null,
+    "radius": null,
+    "segments-depth": null,
+    "segments-height": null,
+    "segments-width": null,
+    "theta-length": null,
+    "theta-start": null
+  }
+}

+ 28 - 0
public/defaults/proxy/aframe/atext.vwf.json

@@ -0,0 +1,28 @@
+{
+  "extends": "proxy/aframe/aentity.vwf",
+  "type": "a-text",
+  "properties": {
+    "align": null,
+    "alpha-test": null,
+    "anchor": null,
+    "baseline": null,
+    "color": null,
+    "font": null,
+    "font-image": null,
+    "height": null,
+    "letter-spacing": null,
+    "line-height": null,
+    "opacity": null,
+    "shader": null,
+    "side": null,
+    "tab-size": null,
+    "transparent": null,
+    "value": null,
+    "white-space": null,
+    "width": null,
+    "wrap-count": null,
+    "wrap-pixels": null,
+    "z-offset": null,
+    "negate": null
+  }
+}

+ 26 - 54
public/defaults/proxy/vwf.example.com/aframe/avatar.js → public/defaults/proxy/aframe/avatar.js

@@ -1,5 +1,5 @@
 this.simpleBodyDef = {
 this.simpleBodyDef = {
-    "extends": "http://vwf.example.com/aframe/abox.vwf",
+    "extends": "proxy/aframe/abox.vwf",
     "properties": {
     "properties": {
         "position": [0, 0.66, 0.7],
         "position": [0, 0.66, 0.7],
         "height": 1.3,
         "height": 1.3,
@@ -8,7 +8,7 @@ this.simpleBodyDef = {
     },
     },
     "children": {
     "children": {
         "material": {
         "material": {
-            "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+            "extends": "proxy/aframe/aMaterialComponent.vwf",
             "type": "component",
             "type": "component",
             "properties":{
             "properties":{
                 "color": "white"
                 "color": "white"
@@ -18,7 +18,7 @@ this.simpleBodyDef = {
 }
 }
 
 
 this.modelBodyDef = {
 this.modelBodyDef = {
-    "extends": "http://vwf.example.com/aframe/agltfmodel.vwf",
+    "extends": "proxy/aframe/agltfmodel.vwf",
     "properties": {
     "properties": {
         "src": "#avatar",
         "src": "#avatar",
         "position": [0, 0, 0.8],
         "position": [0, 0, 0.8],
@@ -26,7 +26,7 @@ this.modelBodyDef = {
     },
     },
     "children": {
     "children": {
         "animation-mixer": {
         "animation-mixer": {
-            "extends": "http://vwf.example.com/aframe/anim-mixer-component.vwf",
+            "extends": "proxy/aframe/anim-mixer-component.vwf",
             "properties": {
             "properties": {
                 "clip": "*",
                 "clip": "*",
                 "duration": 1
                 "duration": 1
@@ -41,7 +41,7 @@ this.findWorldAvatarCostume = function () {
     let scene = this.getScene();
     let scene = this.getScene();
     let def = scene.defaultAvatarCostume;
     let def = scene.defaultAvatarCostume;
 
 
-    let allChilds = this.find("//element(*,'http://vwf.example.com/aframe/aentity.vwf')"); //this.children
+    let allChilds = this.find("//element(*,'proxy/aframe/aentity.vwf')"); //this.children
     let costumes = allChilds.filter(el => (el.meta == 'avatarCostume'));
     let costumes = allChilds.filter(el => (el.meta == 'avatarCostume'));
     let avatarCostume = costumes ? costumes[0]: null;
     let avatarCostume = costumes ? costumes[0]: null;
 
 
@@ -85,7 +85,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
     myBodyDef.children.material.properties.color = myColor;
     myBodyDef.children.material.properties.color = myColor;
 
 
     var defaultNode = {
     var defaultNode = {
-        "extends": "http://vwf.example.com/aframe/aentity.vwf",
+        "extends": "proxy/aframe/aentity.vwf",
         "properties": {
         "properties": {
             "position": [0, userHeight, 0], //-userHeight
             "position": [0, userHeight, 0], //-userHeight
             "meta": "avatarCostume"
             "meta": "avatarCostume"
@@ -100,7 +100,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
             "myBody": myBodyDef,
             "myBody": myBodyDef,
             //"myHand": myHandDef,
             //"myHand": myHandDef,
             "myHead": {
             "myHead": {
-                "extends": "http://vwf.example.com/aframe/aentity.vwf",
+                "extends": "proxy/aframe/aentity.vwf",
                 "properties": {
                 "properties": {
                     "position": [0, 1.6, 0.7],
                     "position": [0, 1.6, 0.7],
                     "visible": true
                     "visible": true
@@ -108,14 +108,14 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                 children: {
                 children: {
                     "interpolation":
                     "interpolation":
                     {
                     {
-                        "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+                        "extends": "proxy/aframe/interpolation-component.vwf",
                         "type": "component",
                         "type": "component",
                         "properties": {
                         "properties": {
                             "enabled": true
                             "enabled": true
                         }
                         }
                     },
                     },
                     "visual": {
                     "visual": {
-                        "extends": "http://vwf.example.com/aframe/abox.vwf",
+                        "extends": "proxy/aframe/abox.vwf",
                         "properties": {
                         "properties": {
                             "height": 0.5,
                             "height": 0.5,
                             "width": 0.5,
                             "width": 0.5,
@@ -124,7 +124,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                         },
                         },
                         "children": {
                         "children": {
                             "material": {
                             "material": {
-                                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                                "extends": "proxy/aframe/aMaterialComponent.vwf",
                                 "type": "component",
                                 "type": "component",
                                 "properties":{
                                 "properties":{
                                     "color": myColor
                                     "color": myColor
@@ -136,7 +136,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                     "myCamera":
                     "myCamera":
                     {
                     {
                         //"id": 'camera-' + this.id,
                         //"id": 'camera-' + this.id,
-                        "extends": "http://vwf.example.com/aframe/acamera.vwf",
+                        "extends": "proxy/aframe/acamera.vwf",
                         "properties": {
                         "properties": {
                             "position": [0, 0, -0.7],
                             "position": [0, 0, -0.7],
                             "look-controls-enabled": false,
                             "look-controls-enabled": false,
@@ -147,11 +147,11 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                     "myCursor":
                     "myCursor":
                     {
                     {
                         //"id": 'myCursor-' + this.id,
                         //"id": 'myCursor-' + this.id,
-                        "extends": "http://vwf.example.com/aframe/aentity.vwf",
+                        "extends": "proxy/aframe/aentity.vwf",
                         "properties": {},
                         "properties": {},
                         "children": {
                         "children": {
                             "vis": {
                             "vis": {
-                                "extends": "http://vwf.example.com/aframe/abox.vwf",
+                                "extends": "proxy/aframe/abox.vwf",
                                 "properties": {
                                 "properties": {
                                     "position": [0, 0, -3],
                                     "position": [0, 0, -3],
                                     "height": 0.05,
                                     "height": 0.05,
@@ -161,14 +161,14 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                                 },
                                 },
                                 "children": {
                                 "children": {
                                     "material": {
                                     "material": {
-                                        "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                                        "extends": "proxy/aframe/aMaterialComponent.vwf",
                                         "type": "component",
                                         "type": "component",
                                         "properties":{
                                         "properties":{
                                             "color": myColor
                                             "color": myColor
                                         }
                                         }
                                     },
                                     },
                                     "aabb-collider": {
                                     "aabb-collider": {
-                                        "extends": "http://vwf.example.com/aframe/aabb-collider-component.vwf",
+                                        "extends": "proxy/aframe/aabb-collider-component.vwf",
                                         "type": "component",
                                         "type": "component",
                                         "properties": {
                                         "properties": {
                                             debug: false,
                                             debug: false,
@@ -180,7 +180,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                                 
                                 
                             },
                             },
                             "line": {
                             "line": {
-                                "extends": "http://vwf.example.com/aframe/lineComponent.vwf",
+                                "extends": "proxy/aframe/lineComponent.vwf",
                                 "type": "component",
                                 "type": "component",
                                 "properties": {
                                 "properties": {
                                     "start": "0 0 -1",
                                     "start": "0 0 -1",
@@ -189,13 +189,13 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                                 }
                                 }
                             },
                             },
                             // "realCursor":{
                             // "realCursor":{
-                            //     "extends": "http://vwf.example.com/aframe/acursor.vwf",
+                            //     "extends": "proxy/aframe/acursor.vwf",
                             //     "properties": {
                             //     "properties": {
                             //         visible: false
                             //         visible: false
                             //     },
                             //     },
                             //     "children": {
                             //     "children": {
                             //         "raycaster": {
                             //         "raycaster": {
-                            //             "extends": "http://vwf.example.com/aframe/raycasterComponent.vwf",
+                            //             "extends": "proxy/aframe/raycasterComponent.vwf",
                             //             "type": "component",
                             //             "type": "component",
                             //             "properties": {
                             //             "properties": {
                             //                 //recursive: false,
                             //                 //recursive: false,
@@ -207,11 +207,11 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                             //     }
                             //     }
                             // },
                             // },
                            "myRayCaster": {
                            "myRayCaster": {
-                            "extends": "http://vwf.example.com/aframe/aentity.vwf",
+                            "extends": "proxy/aframe/aentity.vwf",
                             "properties": {},
                             "properties": {},
                             "children": {
                             "children": {
                                 "raycaster": {
                                 "raycaster": {
-                                    "extends": "http://vwf.example.com/aframe/raycasterComponent.vwf",
+                                    "extends": "proxy/aframe/raycasterComponent.vwf",
                                     "type": "component",
                                     "type": "component",
                                     "properties": {
                                     "properties": {
                                         recursive: false,
                                         recursive: false,
@@ -223,7 +223,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                             }
                             }
                         },
                         },
                         //     "raycaster-listener": {
                         //     "raycaster-listener": {
-                        //         "extends": "http://vwf.example.com/aframe/app-raycaster-listener-component.vwf",
+                        //         "extends": "proxy/aframe/app-raycaster-listener-component.vwf",
                         //         "type": "component"
                         //         "type": "component"
                         //     }
                         //     }
                            
                            
@@ -232,7 +232,7 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
                 }
                 }
             },
             },
             "myName": {
             "myName": {
-                "extends": "http://vwf.example.com/aframe/atext.vwf",
+                "extends": "proxy/aframe/atext.vwf",
                 "properties": {
                 "properties": {
                     "color": myColor,
                     "color": myColor,
                     "value": this.displayName,
                     "value": this.displayName,
@@ -285,12 +285,12 @@ this.createAvatarBody = function (nodeDef, modelSrc) {
     //let cursor = 
     //let cursor = 
     //{
     //{
     //       "id": 'cursor-' + this.id,
     //       "id": 'cursor-' + this.id,
-    //       "extends": "http://vwf.example.com/aframe/acursor.vwf",
+    //       "extends": "proxy/aframe/acursor.vwf",
     //}
     //}
 
 
 
 
     let interpolation =  {
     let interpolation =  {
-        "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+        "extends": "proxy/aframe/interpolation-component.vwf",
         "type": "component",
         "type": "component",
         "properties": {
         "properties": {
             "enabled": true
             "enabled": true
@@ -335,39 +335,11 @@ this.updateAvatarRotation = function (rotation) {
 
 
 this.followAvatarControl = function (position, rotation) {
 this.followAvatarControl = function (position, rotation) {
 
 
-
-    //this.position = goog.vec.Vec3.createFromValues(position.x, position.y, position.z);
-
     let myRot = goog.vec.Vec3.clone(this.rotation);
     let myRot = goog.vec.Vec3.clone(this.rotation);
     let myHeadRot = goog.vec.Vec3.clone(this.avatarNode.myHead.rotation);
     let myHeadRot = goog.vec.Vec3.clone(this.avatarNode.myHead.rotation);
-    //let myBodyRot = goog.vec.Vec3.clone(this.avatarNode.myBody.rotation);
-
-    //let myRot = AFRAME.utils.coordinates.parse(this.rotation);
-    //let myHeadRot = AFRAME.utils.coordinates.parse(this.avatarNode.myHead.rotation);
-    //let myBodyRot = AFRAME.utils.coordinates.parse(this.avatarNode.myBody.rotation);
-
-    //   if(myRot[0] == null || myRot[2] == null) {
-    //     debugger
-    // }
-
     this.rotation = [myRot[0], rotation.y, myRot[2]];
     this.rotation = [myRot[0], rotation.y, myRot[2]];
-    //this.rotation = [myRot.x, rotation.y, myRot.z];
-
-
-
-    // let myRot = this.avatarBodyModel.rotation;
-    // this.avatarBodyModel.rotation = [myRot.x, -rotation.y, myRot.z];
-
-    //this.avatarBody.rotation = [rotation.x, myRot.y, rotation.z];
-
-    //this.avatarNameNode.rotation = [myRot.x, myRot.y, rotation.z]; 
-
     this.avatarNode.myHead.rotation = [rotation.x, myHeadRot[1], rotation.z];
     this.avatarNode.myHead.rotation = [rotation.x, myHeadRot[1], rotation.z];
-    //this.avatarNode.myHead.rotation = [rotation.x, myHeadRot.y, rotation.z];
-    
-    // this.avatarNode.myCursor.rotation = [rotation.x, myHeadRot.y, rotation.z];
 
 
-    // this.avatarCamera.rotation = [rotation.x, myHeadRot.y, rotation.z];  
 }
 }
 
 
 this.setUserAvatar = function(aName){
 this.setUserAvatar = function(aName){
@@ -494,12 +466,12 @@ this.setSoundWebRTC = function(val){
     if (this.avatarNode.audio) this.removeSoundWebRTC();
     if (this.avatarNode.audio) this.removeSoundWebRTC();
 
 
     var soundNode = {
     var soundNode = {
-        "extends": "http://vwf.example.com/aframe/aentity.vwf",
+        "extends": "proxy/aframe/aentity.vwf",
         "properties": {
         "properties": {
         },
         },
         "children":{
         "children":{
             "streamsound":{
             "streamsound":{
-                "extends": "http://vwf.example.com/aframe/streamSoundComponent.vwf",
+                "extends": "proxy/aframe/streamSoundComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties": {
                 "properties": {
                 }
                 }

+ 107 - 0
public/defaults/proxy/aframe/avatar.vwf.json

@@ -0,0 +1,107 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "avatar",
+    "properties": {
+        "localUrl": null,
+        "remoteUrl": null,
+        "displayName": null,
+        "sharing": {
+            "audio": true,
+            "video": true
+        }
+    },
+    "methods": {
+        "initialize": {},
+        "selectMode": {},
+        "updateAvatar": {},
+        "showHideAvatar": {
+            "parameters": [
+                "bool"
+            ]
+        },
+        "showHideCursor": {
+            "parameters": [
+                "bool"
+            ]
+        },
+        "createSimpleAvatar": {},
+        "resetAvatar": {},
+        "createAvatarFromGLTF": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "createAvatarBody": {
+            "parameters": [
+                "nodeDef",
+                "modelSrc"
+            ]
+        },
+        "updateYPositionForXR": {
+            "parameters": [
+                "height"
+            ]
+        },
+        "followAvatarControl": {
+            "parameters": [
+                "position",
+                "rotation"
+            ]
+        },
+        "updateAvatarRotation": {
+            "parameters": [
+                "rotation"
+            ]
+        },
+        "setSmallVideoHead": {},
+        "setBigVideoHead": {},
+        "setVideoTexture": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "webrtcTurnOnOff": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "webrtcMuteAudio": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "webrtcMuteVideo": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "setSoundWebRTC": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "removeSoundWebRTC": {},
+        "removeVideoTexture": {},
+        "setUserAvatar": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "findWorldAvatarCostume": {},
+        "setMyName": {
+            "parameters": [
+                "val"
+            ]
+        },
+        "randomizeAvatar": {},
+        "changeCostume": {
+            "parameters": [
+                "val",
+                "restore"
+            ]
+        }
+    },
+    "scripts": {
+        "source": "avatar.js"
+    }
+}

+ 4 - 0
public/defaults/proxy/aframe/componentNode.vwf.json

@@ -0,0 +1,4 @@
+{
+    "extends": "proxy/node.vwf",
+    "properties": {}
+}

+ 12 - 12
public/defaults/proxy/vwf.example.com/aframe/gearvrcontroller.js → public/defaults/proxy/aframe/gearvrcontroller.js

@@ -1,8 +1,8 @@
 this.simpleDef = {
 this.simpleDef = {
-    "extends": "http://vwf.example.com/aframe/abox.vwf",
+    "extends": "proxy/aframe/abox.vwf",
     children: {
     children: {
         "material": {
         "material": {
-            "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+            "extends": "proxy/aframe/aMaterialComponent.vwf",
             "type": "component",
             "type": "component",
             "properties":{
             "properties":{
                 "color": "white"
                 "color": "white"
@@ -17,7 +17,7 @@ this.simpleDef = {
     },
     },
     children: {
     children: {
         "pointer": {
         "pointer": {
-            "extends": "http://vwf.example.com/aframe/abox.vwf",
+            "extends": "proxy/aframe/abox.vwf",
             "properties": {
             "properties": {
                 "position": "0 0 -0.7",
                 "position": "0 0 -0.7",
                 "height": 0.1,
                 "height": 0.1,
@@ -26,14 +26,14 @@ this.simpleDef = {
             },
             },
             children: {
             children: {
                 "material": {
                 "material": {
-                    "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                    "extends": "proxy/aframe/aMaterialComponent.vwf",
                     "type": "component",
                     "type": "component",
                     "properties":{
                     "properties":{
                         "color": "green"
                         "color": "green"
                     }
                     }
                 },
                 },
                 "aabb-collider": {
                 "aabb-collider": {
-                    "extends": "http://vwf.example.com/aframe/aabb-collider-component.vwf",
+                    "extends": "proxy/aframe/aabb-collider-component.vwf",
                     "type": "component",
                     "type": "component",
                     "properties": {
                     "properties": {
                         debug: false,
                         debug: false,
@@ -42,11 +42,11 @@ this.simpleDef = {
                     }
                     }
                 },
                 },
                 "myRayCaster": {
                 "myRayCaster": {
-                    "extends": "http://vwf.example.com/aframe/aentity.vwf",
+                    "extends": "proxy/aframe/aentity.vwf",
                     "properties": {},
                     "properties": {},
                     "children": {
                     "children": {
                         "raycaster": {
                         "raycaster": {
-                            "extends": "http://vwf.example.com/aframe/raycasterComponent.vwf",
+                            "extends": "proxy/aframe/raycasterComponent.vwf",
                             "type": "component",
                             "type": "component",
                             "properties": {
                             "properties": {
                                 recursive: false,
                                 recursive: false,
@@ -58,7 +58,7 @@ this.simpleDef = {
                     }
                     }
                 }
                 }
                 // "rotationText": {
                 // "rotationText": {
-                //     "extends": "http://vwf.example.com/aframe/atext.vwf",
+                //     "extends": "proxy/aframe/atext.vwf",
                 //     "properties":{
                 //     "properties":{
                 //         "value": "rot",
                 //         "value": "rot",
                 //             "side": "double",
                 //             "side": "double",
@@ -71,7 +71,7 @@ this.simpleDef = {
 }
 }
 
 
 this.modelDef = {
 this.modelDef = {
-    "extends": "http://vwf.example.com/aframe/agltfmodel.vwf",
+    "extends": "proxy/aframe/agltfmodel.vwf",
     "properties": {
     "properties": {
         "src": "#gearvr",
         "src": "#gearvr",
         "position": "0 0 0",
         "position": "0 0 0",
@@ -79,7 +79,7 @@ this.modelDef = {
     },
     },
     "children": {
     "children": {
         "animation-mixer": {
         "animation-mixer": {
-            "extends": "http://vwf.example.com/aframe/anim-mixer-component.vwf",
+            "extends": "proxy/aframe/anim-mixer-component.vwf",
             "properties": {
             "properties": {
                 "clip": "*",
                 "clip": "*",
                 "duration": 1
                 "duration": 1
@@ -94,7 +94,7 @@ this.createController = function (modelSrc) {
     let controllerDef = this.simpleDef;
     let controllerDef = this.simpleDef;
 
 
     var newNode = {
     var newNode = {
-        "extends": "http://vwf.example.com/aframe/aentity.vwf",
+        "extends": "proxy/aframe/aentity.vwf",
         "properties": {
         "properties": {
             "position": [0, 0, -0.4]
             "position": [0, 0, -0.4]
         },
         },
@@ -112,7 +112,7 @@ this.createController = function (modelSrc) {
 
 
 
 
     let interpolation =  {
     let interpolation =  {
-        "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+        "extends": "proxy/aframe/interpolation-component.vwf",
         "type": "component",
         "type": "component",
         "properties": {
         "properties": {
             "enabled": true
             "enabled": true

+ 31 - 0
public/defaults/proxy/aframe/gearvrcontroller.vwf.json

@@ -0,0 +1,31 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "gearvr",
+    "properties": {},
+    "methods": {
+        "initialize": {},
+        "updateController": {},
+        "createSimpleController": {},
+        "createControllerFromGLTF": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "createController": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "updateVRControl": {
+            "parameters": [
+                "position",
+                "rotation"
+            ]
+        },
+        "triggerdown": {},
+        "triggerup": {}
+    },
+    "scripts": {
+        "source": "gearvrcontroller.js"
+    }
+}

+ 7 - 0
public/defaults/proxy/aframe/gizmoComponent.vwf.json

@@ -0,0 +1,7 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "mode": null
+  }
+}

+ 31 - 0
public/defaults/proxy/aframe/hand-controls.vwf.json

@@ -0,0 +1,31 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "handcontrols",
+    "properties": {},
+    "methods": {
+        "initialize": {},
+        "updateController": {},
+        "createSimpleController": {},
+        "createControllerFromGLTF": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "createController": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "updateVRControl": {
+            "parameters": [
+                "position",
+                "rotation"
+            ]
+        },
+        "triggerdown": {},
+        "triggerup": {}
+    },
+    "scripts": {
+        "source": "handcontrols.js"
+    }
+}

+ 10 - 0
public/defaults/proxy/aframe/interpolation-component.vwf.json

@@ -0,0 +1,10 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "enabled": null,
+    "deltaPos": null,
+    "deltaRot": null,
+    "deltaScale": null
+  }
+}

+ 11 - 0
public/defaults/proxy/aframe/lineComponent.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "start": null,
+    "end": null,
+    "color": null,
+    "opacity": null,
+    "visible": null
+  }
+}

+ 9 - 0
public/defaults/proxy/aframe/linepath.vwf.json

@@ -0,0 +1,9 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "color": null,
+    "path": null,
+    "width": null
+  }
+}

+ 4 - 0
public/defaults/proxy/aframe/node.vwf.json

@@ -0,0 +1,4 @@
+{
+    "extends": "proxy/node.vwf",
+    "properties": {}
+}

+ 2 - 2
public/defaults/proxy/vwf.example.com/aframe/offsetcamera.js → public/defaults/proxy/aframe/offsetcamera.js

@@ -4,7 +4,7 @@ this.initialize = function () {
 this.createCamera = function (fw, fh, xoffset, yoffset, subcamWidth, subcamHeight) {
 this.createCamera = function (fw, fh, xoffset, yoffset, subcamWidth, subcamHeight) {
 
 
     let cameraNode = {
     let cameraNode = {
-        "extends": "http://vwf.example.com/aframe/acamera.vwf",
+        "extends": "proxy/aframe/acamera.vwf",
         "properties": {
         "properties": {
             "look-controls-enabled": false,
             "look-controls-enabled": false,
             "wasd-controls-enabled": false,
             "wasd-controls-enabled": false,
@@ -12,7 +12,7 @@ this.createCamera = function (fw, fh, xoffset, yoffset, subcamWidth, subcamHeigh
         },
         },
         children: {
         children: {
             viewoffset: {
             viewoffset: {
-                extends: "http://vwf.example.com/aframe/viewOffsetCamera-component.vwf",
+                extends: "proxy/aframe/viewOffsetCamera-component.vwf",
                 properties: {
                 properties: {
                     fullWidth: fw,
                     fullWidth: fw,
                     fullHeight: fh,
                     fullHeight: fh,

+ 21 - 0
public/defaults/proxy/aframe/offsetcamera.vwf.json

@@ -0,0 +1,21 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "offsetcamera",
+    "properties": {},
+    "methods": {
+        "initialize": {},
+        "createCamera": {
+            "parameters": [
+                "fw",
+                "fh",
+                "xoffset",
+                "yoffset",
+                "subcamWidth",
+                "subcamHeight"
+            ]
+        }
+    },
+    "scripts": {
+        "source": "offsetcamera.js"
+    }
+}

+ 15 - 0
public/defaults/proxy/aframe/raycasterComponent.vwf.json

@@ -0,0 +1,15 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "direction": null,
+    "far": null,
+    "interval": null,
+    "near": null,
+    "objects": null,
+    "origin": null,
+    "recursive": null,
+    "showLine": null,
+    "useWorldCoordinates": null
+  }
+}

+ 8 - 0
public/defaults/proxy/aframe/shadowComponent.vwf.json

@@ -0,0 +1,8 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "cast": null,
+    "receive": null
+  }
+}

+ 5 - 0
public/defaults/proxy/aframe/streamSoundComponent.vwf.json

@@ -0,0 +1,5 @@
+{
+    "extends": "proxy/aframe/aentityComponent.vwf",
+    "type": "component",
+    "properties": {}
+}

+ 4 - 4
public/defaults/proxy/vwf.example.com/aframe/transport.js → public/defaults/proxy/aframe/transport.js

@@ -5,7 +5,7 @@ this.initialize = function () {
 
 
 this.simpleVis = function () {
 this.simpleVis = function () {
     return {
     return {
-        "extends": "http://vwf.example.com/aframe/abox.vwf",
+        "extends": "proxy/aframe/abox.vwf",
         "properties": {
         "properties": {
             "height": 0.3,
             "height": 0.3,
             "width": 0.3,
             "width": 0.3,
@@ -14,14 +14,14 @@ this.simpleVis = function () {
         },
         },
         "children": {
         "children": {
             "material": {
             "material": {
-                "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                "extends": "proxy/aframe/aMaterialComponent.vwf",
                 "type": "component",
                 "type": "component",
                 "properties": {
                 "properties": {
                     "color": "red"
                     "color": "red"
                 }
                 }
             },
             },
             "cursor-listener": {
             "cursor-listener": {
-                extends: "http://vwf.example.com/aframe/app-cursor-listener-component.vwf",
+                extends: "proxy/aframe/app-cursor-listener-component.vwf",
                 type: "component"
                 type: "component"
             }
             }
 
 
@@ -73,7 +73,7 @@ this.animationUpdate = function (time, duration) {
 
 
 this.doGlobalBeat = function (time, duration, beat) {
 this.doGlobalBeat = function (time, duration, beat) {
 
 
-   let allChilds = this.find("//element(*,'http://vwf.example.com/aframe/aentity.vwf')"); //this.children
+   let allChilds = this.find("//element(*,'proxy/aframe/aentity.vwf')"); //this.children
    allChilds.forEach(el => {
    allChilds.forEach(el => {
         if (el.globalBeat) {
         if (el.globalBeat) {
             let obj = {
             let obj = {

+ 31 - 0
public/defaults/proxy/aframe/transport.vwf.json

@@ -0,0 +1,31 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "transport",
+    "properties": {
+        "beat": null,
+        "playing": null
+    },
+    "methods": {
+        "init": {},
+        "simpleVis": {},
+        "animationUpdate": {
+            "parameters": [
+                "time",
+                "duration"
+            ]
+        },
+        "play": {},
+        "stop": {},
+        "setupTransport": {},
+        "doGlobalBeat": {
+            "parameters": [
+                "time",
+                "duration",
+                "beat"
+            ]
+        }
+    },
+    "scripts": {
+        "source": "transport.js"
+    }
+}

+ 0 - 0
public/defaults/proxy/vwf.example.com/aframe/viewOffsetCamera-component.js → public/defaults/proxy/aframe/viewOffsetCamera-component.js


+ 18 - 0
public/defaults/proxy/aframe/viewOffsetCamera-component.vwf.json

@@ -0,0 +1,18 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "fullWidth": null,
+    "fullHeight": null,
+    "xoffset": null,
+    "yoffset": null,
+    "subcamWidth": null,
+    "subcamHeight": null
+  },
+  "methods": {
+    "setParams": {}
+  },
+  "scripts": {
+    "source": "viewOffsetCamera-component.js"
+  }
+}

+ 8 - 0
public/defaults/proxy/aframe/wasd-controls.vwf.json

@@ -0,0 +1,8 @@
+{
+  "extends": "proxy/aframe/aentityComponent.vwf",
+  "type": "component",
+  "properties": {
+    "acceleration": null,
+    "enabled": null
+  }
+}

+ 9 - 9
public/defaults/proxy/vwf.example.com/aframe/wmrvrcontroller.js → public/defaults/proxy/aframe/wmrvrcontroller.js

@@ -1,8 +1,8 @@
 this.simpleDef = {
 this.simpleDef = {
-    "extends": "http://vwf.example.com/aframe/abox.vwf",
+    "extends": "proxy/aframe/abox.vwf",
     children: {
     children: {
         "material": {
         "material": {
-            "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+            "extends": "proxy/aframe/aMaterialComponent.vwf",
             "type": "component",
             "type": "component",
             "properties":{
             "properties":{
                 "color": "white"
                 "color": "white"
@@ -17,7 +17,7 @@ this.simpleDef = {
     },
     },
     children: {
     children: {
         "pointer": {
         "pointer": {
-            "extends": "http://vwf.example.com/aframe/abox.vwf",
+            "extends": "proxy/aframe/abox.vwf",
             "properties": {
             "properties": {
                 "position": "0 0 -0.7",
                 "position": "0 0 -0.7",
                 "height": 0.1,
                 "height": 0.1,
@@ -26,7 +26,7 @@ this.simpleDef = {
             },
             },
             children: {
             children: {
                 "material": {
                 "material": {
-                    "extends": "http://vwf.example.com/aframe/aMaterialComponent.vwf",
+                    "extends": "proxy/aframe/aMaterialComponent.vwf",
                     "type": "component",
                     "type": "component",
                     "properties":{
                     "properties":{
                         "color": "green"
                         "color": "green"
@@ -36,7 +36,7 @@ this.simpleDef = {
         }
         }
         // "interpolation":
         // "interpolation":
         //     {
         //     {
-        //         "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+        //         "extends": "proxy/aframe/interpolation-component.vwf",
         //         "type": "component",
         //         "type": "component",
         //         "properties": {
         //         "properties": {
         //             "enabled": true
         //             "enabled": true
@@ -46,7 +46,7 @@ this.simpleDef = {
 }
 }
 
 
 this.modelDef = {
 this.modelDef = {
-    "extends": "http://vwf.example.com/aframe/agltfmodel.vwf",
+    "extends": "proxy/aframe/agltfmodel.vwf",
     "properties": {
     "properties": {
         "src": "#wmrvr",
         "src": "#wmrvr",
         "position": "0 0 0",
         "position": "0 0 0",
@@ -54,7 +54,7 @@ this.modelDef = {
     },
     },
     "children": {
     "children": {
         "animation-mixer": {
         "animation-mixer": {
-            "extends": "http://vwf.example.com/aframe/anim-mixer-component.vwf",
+            "extends": "proxy/aframe/anim-mixer-component.vwf",
             "properties": {
             "properties": {
                 "clip": "*",
                 "clip": "*",
                 "duration": 1
                 "duration": 1
@@ -69,7 +69,7 @@ this.createController = function (modelSrc) {
     let controllerDef = this.simpleDef;
     let controllerDef = this.simpleDef;
 
 
     var newNode = {
     var newNode = {
-        "extends": "http://vwf.example.com/aframe/aentity.vwf",
+        "extends": "proxy/aframe/aentity.vwf",
         "properties": {
         "properties": {
             "position": [0, 0, -0.4]
             "position": [0, 0, -0.4]
         },
         },
@@ -87,7 +87,7 @@ this.createController = function (modelSrc) {
 
 
 
 
     let interpolation =  {
     let interpolation =  {
-        "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+        "extends": "proxy/aframe/interpolation-component.vwf",
         "type": "component",
         "type": "component",
         "properties": {
         "properties": {
             "enabled": true
             "enabled": true

+ 31 - 0
public/defaults/proxy/aframe/wmrvrcontroller.vwf.json

@@ -0,0 +1,31 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "wmrvr",
+    "properties": {},
+    "methods": {
+        "initialize": {},
+        "updateController": {},
+        "createSimpleController": {},
+        "createControllerFromGLTF": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "createController": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "updateVRControl": {
+            "parameters": [
+                "position",
+                "rotation"
+            ]
+        },
+        "triggerdown": {},
+        "triggerup": {}
+    },
+    "scripts": {
+        "source": "wmrvrcontroller.js"
+    }
+}

+ 4 - 4
public/defaults/proxy/vwf.example.com/aframe/xrcontroller.js → public/defaults/proxy/aframe/xrcontroller.js

@@ -1,5 +1,5 @@
 this.modelDef = {
 this.modelDef = {
-    "extends": "http://vwf.example.com/aframe/agltfmodel.vwf",
+    "extends": "proxy/aframe/agltfmodel.vwf",
     "properties": {
     "properties": {
         "src": "#xrcontroller",
         "src": "#xrcontroller",
         "position": "0 0 0",
         "position": "0 0 0",
@@ -7,7 +7,7 @@ this.modelDef = {
     },
     },
     "children": {
     "children": {
         "animation-mixer": {
         "animation-mixer": {
-            "extends": "http://vwf.example.com/aframe/anim-mixer-component.vwf",
+            "extends": "proxy/aframe/anim-mixer-component.vwf",
             "properties": {
             "properties": {
                 "clip": "*",
                 "clip": "*",
                 "duration": 1
                 "duration": 1
@@ -22,7 +22,7 @@ this.createController = function (modelSrc) {
     let self = this;
     let self = this;
 
 
     var newNode = {
     var newNode = {
-        "extends": "http://vwf.example.com/aframe/aentity.vwf",
+        "extends": "proxy/aframe/aentity.vwf",
         "properties": {
         "properties": {
             "position": [0, 0, -0.1]
             "position": [0, 0, -0.1]
         },
         },
@@ -30,7 +30,7 @@ this.createController = function (modelSrc) {
     }
     }
 
 
     let interpolation =  {
     let interpolation =  {
-        "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
+        "extends": "proxy/aframe/interpolation-component.vwf",
         "type": "component",
         "type": "component",
         "properties": {
         "properties": {
             "enabled": true
             "enabled": true

+ 40 - 0
public/defaults/proxy/aframe/xrcontroller.vwf.json

@@ -0,0 +1,40 @@
+{
+    "extends": "proxy/aframe/aentity.vwf",
+    "type": "xrcontroller",
+    "properties": {},
+    "methods": {
+        "initialize": {},
+        "updateController": {},
+        "createSimpleController": {},
+        "createControllerFromGLTF": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "createController": {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "updateVRControl": {
+            "parameters": [
+                "position",
+                "rotation"
+            ]
+        },
+        "triggerdown": {},
+        "triggerup": {},
+        "checkDefaultXRCostume":{},
+        "setControllerNode":
+        {
+            "parameters": [
+                "modelSrc"
+            ]
+        },
+        "saveToScene":{},
+        "moveVRController":{}
+    },
+    "scripts": {
+        "source": "xrcontroller.js"
+    }
+}

+ 295 - 0
public/defaults/proxy/animation/animation.js

@@ -0,0 +1,295 @@
+this.animationTime_set = function (value) {
+
+    if (this.animationStartTime == null) {
+        this.animationStartTime = 0;
+    }
+    if (this.animationStopTime == null) {
+        this.animationStopTime = this.animationDuration;
+    }
+    // Save copies to avoid repeated reads.
+    var duration = this.animationStopTime - this.animationStartTime,
+        rate = this.animationRate;
+    // Range limit the incoming value.
+    value = Math.min(Math.max(this.animationStartTime, value), this.animationStopTime);
+    // Keep paused if updating start/pause from null/null. Use t=0 instead of `this.time` so that
+    // setting `node.animationTime` during initialization is consistent across multiple clients.
+    if (this.animationStartSIM == null) {
+        this.animationPauseSIM = 0;
+    }
+    // Calculate the start and stop times that makes the new time work.
+    this.animationStartSIM =
+        (this.animationPauseSIM != null ? this.animationPauseSIM : this.time) -
+        (rate >= 0 ? value - this.animationStartTime : value - duration) / rate;
+    this.animationStopSIM =
+        this.animationStartSIM +
+        (rate >= 0 ? duration : -duration) / rate;
+    // Update the node and fire the changed event.
+    if (value !== this.animationTimeUpdated) {
+        this.animationTimeUpdated = value;
+        this.animationUpdate(value, this.animationDuration);
+        this.animationTimeChanged(value);
+    } //@ sourceURL=animation.animationTime.set.vwf
+
+}
+
+this.animationTime_get = function () {
+
+    // Save copies to avoid repeated reads.
+    var startTime = this.animationStartTime;
+    var stopTime = this.animationStopTime;
+    var rate = this.animationRate;
+    var animationPauseSIM = this.animationPauseSIM;
+    var animationStartSIM = this.animationStartSIM;
+    var time = this.time;
+    // Calculate the time from the start and current/pause times.
+    var value = (
+        (animationPauseSIM != null ? animationPauseSIM : time) -
+        (animationStartSIM != null ? animationStartSIM : time)
+    ) * rate + (rate >= 0 ? startTime : stopTime);
+    // Range limit the value.
+    value = Math.min(Math.max(startTime, value), stopTime);
+    // If changed since last seen, update and fire the changed event.
+    if (value !== this.animationTimeUpdated) {
+        this.animationTimeUpdated = value;
+        this.animationUpdate(value, this.animationDuration);
+        this.animationTimeChanged(value);
+    }
+    return value; //@ sourceURL=animation.animationTime.get.vwf
+}
+
+this.animationDuration_set = function (value) {
+    var duration = value, rate = this.animationRate;
+    this.animationDuration = duration;
+    this.animationDurationSIM = (rate >= 0 ? duration : -duration) / rate;
+}
+
+this.animationRate_set = function (value) {
+    var duration = this.animationDuration, rate = value;
+    this.animationRate = rate;
+    this.animationDurationSIM = (rate >= 0 ? duration : -duration) / rate;
+}
+
+this.animationPlaying_set = function (value) {
+    if (this.animationStartTime == null) {
+        this.animationStartTime = 0;
+    }
+    if (this.animationStopTime == null) {
+        this.animationStopTime = this.animationDuration;
+    }
+    if (this.animationStartSIM != null && this.animationPauseSIM == null) {
+        if (!value) {
+            // Mark as paused at the current time.
+            this.animationPauseSIM = this.time;
+            // Send the `animationStopped` event if stopping at the end.
+            if (this.time == this.animationStopSIM) {
+                this.animationStopped();
+            }
+        }
+    } else {
+        if (value) {
+            // Save copies to avoid repeated reads.
+            var duration = this.animationStopTime - this.animationStartTime,
+                rate = this.animationRate;
+            // Start from the beginning if resuming from the end.
+            if (this.animationPauseSIM == this.animationStopSIM) {
+                this.animationPauseSIM = this.animationStartSIM;
+            }
+            // Recalculate the start and stop times to keep paused time unchanged, then resume.
+            this.animationStartSIM =
+                (this.animationStartSIM != null ? this.animationStartSIM : this.time) -
+                (this.animationPauseSIM != null ? this.animationPauseSIM : this.time) +
+                this.time;
+            this.animationStopSIM =
+                this.animationStartSIM +
+                (rate >= 0 ? duration : -duration) / rate;
+            this.animationPauseSIM = null;
+            // Send the `animationStarted` event if starting from the beginning.
+            if (this.time == this.animationStartSIM) {
+                this.animationStarted();
+            }
+            // Start the animation worker.
+            this.logger.debug("scheduling animationTick");
+            this.animationTick();
+        }
+    } //@ sourceURL=animation.animationPlaying.set.vwf
+
+}
+
+this.animationPlaying_get = function () {
+    return this.animationStartSIM != null && this.animationPauseSIM == null;
+}
+
+this.animationStartTime_set = function (value) {
+    this.animationStartTime = value ? Math.min(Math.max(0, value), this.animationDuration) : value;
+
+}
+
+this.animationStopTime_set = function (value) {
+    this.animationStopTime = value ? Math.min(Math.max(0, value), this.animationDuration) : value;
+}
+
+this.animationStartFrame_set = function (value) {
+
+    this.animationStartTime = value / this.animationFPS
+}
+
+this.animationStartFrame_get = function () {
+    return Math.floor(this.animationStartTime * this.animationFPS)
+}
+
+this.animationStopFrame_set = function (value) {
+    this.animationStopTime = value / this.animationFPS
+}
+this.animationStopFrame_get = function () {
+    return Math.floor(this.animationStopTime * this.animationFPS)
+}
+
+this.animationFrames_set = function (value) {
+    this.animationDuration = value / this.animationFPS
+}
+this.animationFrames_get = function () {
+    return Math.ceil(this.animationFPS * this.animationDuration)
+}
+
+this.animationFrame_set = function (value) {
+    if (this.animationFPS) {
+        this.animationTime = value / this.animationFPS;
+    }
+}
+
+this.animationFrame_get = function () {
+    if (this.animationFPS) {
+        return Math.floor(this.animationTime * this.animationFPS);
+    }
+}
+
+//methods
+this.animationPlay = function (startTime, stopTime) {
+    if (!isNaN(stopTime)) {
+        this.animationStopTime = stopTime;
+    }
+    if (!isNaN(startTime)) {
+        this.animationStartTime = startTime;
+    }
+    this.animationPlaying = true;
+}
+
+this.animationPause = function () {
+    this.animationPlaying = false;
+}
+
+this.animationResume = function () {
+    this.animationPlaying = true;
+}
+
+this.animationStop = function () {
+    this.animationPlaying = false;
+    this.animationTime = 0;
+}
+
+this.animationTick = function () {
+    if (this.animationPlaying) {
+        // Read the time to recognize the current time and update.
+        // TODO: move side effects out of the getter!!! (says Kevin)
+        this.animationTime;
+        // Loop or stop after reaching the end.
+        if (this.time === this.animationStopSIM) {
+            if (this.animationLoop) {
+                this.animationLooped();
+                this.animationTime = this.animationRate >= 0 ?
+                    this.animationStartTime : this.animationStopTime;
+            } else {
+                this.animationPlaying = false;
+            }
+        }
+        // Schedule the next tick if still playing.
+        if (this.animationPlaying) {
+            if (this.animationStopSIM - this.time > 1 / this.animationTPS) {
+                this.in(1 / this.animationTPS).animationTick(); // next interval
+            } else {
+
+                // TODO: When animationStopSIM is 0 (usually when a model does not actually have an 
+                //       animation on it), we schedule a method call for a time in the past (at time 0).
+                //       That immediately calls animationTick again, but this.time does not equal 
+                //       animationStopSIM as we would expect.  So, it doesn't stop the animation and we get
+                //       caught in an infinite loop.
+                //       Ideally we should catch the case where animationStopSIM is 0 before this point.
+                //       But for now, we catch it here.  
+                if (this.animationStopSIM > 0) {
+                    this.at(this.animationStopSIM).animationTick(); // exactly at end
+                } else {
+                    this.animationPlaying = false;
+                }
+            }
+        } else {
+            this.logger.debug("canceling animationTick");
+        }
+    } //@ sourceURL=animation.animationTick.vwf
+}
+
+this.animationUpdate = function (time, duration) {
+    //console.log("Do on animation update")
+
+}
+
+this.initialize = function () {
+
+    // Locate child nodes that extend or implement "http://vwf.example.com/animation/position.vwf"
+    // to identify themselves as animation key positions.
+
+    var positions = this.find("./element(*,'proxy/animation/position.vwf')");
+
+    // Fill in missing `animationTime` properties, distributing evenly between the left and right
+    // positions that define `animationTime`.
+
+    // 1: [ - ] => [ 0 ]
+    // 1: [ 0, - ] => [ 0, 1 ]
+    // 1: [ -, 1 ] => [ 0, 1 ]
+    // 1: [ 0, -, - ] => [ 0, 1/2, 1 ]
+    // 1: [ -, -, 1 ] => [ 0, 1/2, 1 ]
+    // 1: [ 0, - , -, 1 ] => [ 0, 1/3 , 2/3, 1 ]
+
+    var leftTime, leftIndex;
+    var rightTime, rightIndex = -Infinity;
+
+    if (positions.length > 0) {
+
+        positions.sort(function (a, b) {
+            return a.sequence - b.sequence;
+        });
+
+        if (positions[0].animationTime === null) {
+            positions[0].animationTime = 0;
+        }
+
+        if (positions[positions.length - 1].animationTime === null) {
+            positions[positions.length - 1].animationTime = this.animationDuration;
+        }
+
+        positions.forEach(function (position, index) {
+
+            if (position.animationTime !== null) {
+
+                leftTime = position.animationTime;
+                leftIndex = index;
+
+            } else {
+
+                if (index > rightIndex) {
+                    for (rightIndex = index + 1; rightIndex < positions.length; rightIndex++) {
+                        if ((rightTime = /* assignment! */ positions[rightIndex].animationTime) !== null) {
+                            break;
+                        }
+                    }
+                }
+
+                position.animationTime = leftTime + (rightTime - leftTime) *
+                    (index - leftIndex) / (rightIndex - leftIndex);
+
+            }
+
+        }, this);
+
+    }
+
+} //@ sourceURL=http://vwf.example.com/animation.vwf/scripts~initialize

+ 138 - 0
public/defaults/proxy/animation/animation.vwf.json

@@ -0,0 +1,138 @@
+{
+  "properties": {
+    "animationTime": {
+      "set": "this.animationTime_set(value)",
+      "get": "return this.animationTime_get()"
+    },
+    "animationDuration": {
+      "set": "this.animationDuration_set(value)",
+      "value": 1
+    },
+    "animationRate": {
+      "set": "this.animationRate_set(value)",
+      "value": 1
+    },
+    "animationLoop": false,
+    "animationPlaying": {
+      "set": "this.animationPlaying_set(value)",
+      "get": "return this.animationPlaying_get()"
+    },
+    "animationTimeUpdated": null,
+    "animationStartSIM": null,
+    "animationPauseSIM": null,
+    "animationStopSIM": null,
+    "animationDurationSIM": null,
+    "animationStartTime": {
+      "set": "this.animationStartTime_set(value)",
+      "value": null
+    },
+    "animationStopTime": {
+      "set": "this.animationStopTime_set(value)",
+      "value": null
+    },
+    "animationStartFrame": {
+      "set": "this.animationStartFrame_set(value)",
+      "get": "return this.animationStartFrame_get()"
+    },
+    "animationStopFrame": {
+      "set": "this.animationStopFrame_set(value)",
+      "get": "return this.animationStopFrame_get()"
+    },
+    "animationFPS": 30,
+    "animationFrames": {
+      "set": "this.animationFrames_set(value)",
+      "get": "return this.animationFrames_get()"
+    },
+    "animationFrame": {
+      "set": "this.animationFrame_set(value)",
+      "get": "return this.animationFrame_get()"
+    },
+    "animationTPS": 60
+  },
+  "methods": {
+    "animationPlay": {
+      "parameters": [
+        "startTime",
+        "stopTime"
+      ]
+    },
+    "animationPause": {},
+    "animationResume": {},
+    "animationStop": {},
+    "animationTick": {
+      "parameters": [
+        "time",
+        "duration"
+      ]
+    },
+    "animationTime_get":{},
+    "animationTime_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationDuration_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationRate_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationPlaying_get":{},
+    "animationPlaying_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationStartTime_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationStopTime_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationStartFrame_get":{},
+    "animationStartFrame_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationStopFrame_get":{},
+    "animationStopFrame_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationFrames_get":{},
+    "animationFrames_set": {
+      "parameters": [
+        "value"
+      ]
+    },
+    "animationFrame_get":{},
+    "animationFrame_set": {
+      "parameters": [
+        "value"
+      ]
+    }
+  },
+  "events": {
+    "animationStarted": {},
+    "animationStopped": {},
+    "animationLooped": {},
+    "animationTimeChanged": {
+      "parameters": [
+        "time"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "animation.js"
+  }
+}

+ 247 - 0
public/defaults/proxy/animation/animationNode.js

@@ -0,0 +1,247 @@
+this.animationUpdate = function(time, duration){
+
+    //console.log("DO on animation update")
+
+}
+
+this.translateBy = function(translation, duration){
+
+this.startTranslationSIM = this.position || goog.vec.Vec3.create();
+  var deltaTranslation = this.translationFromValue( translation );
+  this.stopTranslationSIM = goog.vec.Vec3.add(
+    this.startTranslationSIM,
+    deltaTranslation,
+    goog.vec.Vec3.create()
+  );
+  if(duration > 0) {
+    this.animationDuration = duration;
+    this.animationUpdate = function(time, duration) {
+      this.position = goog.vec.Vec3.lerp(
+        this.startTranslationSIM, this.stopTranslationSIM,
+        time >= duration ? 1 : time / duration,
+        goog.vec.Vec3.create()
+      );
+    }
+    this.animationPlay(0, duration);
+  }
+  else {
+    this.position = this.stopTranslationSIM;
+  } //@ sourceURL=node3.animation.translateBy.vwf
+
+}
+
+this.translateTo = function(translation, duration){
+    this.startTranslationSIM = this.position || goog.vec.Vec3.create();
+    this.stopTranslationSIM = this.translationFromValue( translation );
+    if(duration > 0) {
+      this.animationDuration = duration;
+      this.animationUpdate = function(time, duration) {
+        this.position = goog.vec.Vec3.lerp(
+          this.startTranslationSIM, this.stopTranslationSIM,
+          duration == 0 ? duration : time / duration,
+          goog.vec.Vec3.create()
+        );
+      }
+      this.animationPlay(0, duration);
+    }
+    else {
+      this.position = this.stopTranslationSIM;
+    } //@ sourceURL=node3.animation.translateTo.vwf
+}
+
+this.rotateBy = function(rotation, duration, frame) {
+    let rotationValue = this.translationFromValue(rotation);
+    let deltaQuaternion = (new THREE.Quaternion()).setFromEuler(new THREE.Euler(
+       (THREE.Math.degToRad(rotationValue[0])),
+       (THREE.Math.degToRad(rotationValue[1])),
+       (THREE.Math.degToRad(rotationValue[2])), 'YXZ'
+     ));
+     this.quaterniateBy( deltaQuaternion, duration, frame ); //@ sourceURL=node3.animation.rotateBy.vwf
+}
+
+this.rotateTo = function(rotation, duration){
+    let rotationValue = this.translationFromValue(rotation);
+    let stopQuaternion = (new THREE.Quaternion()).setFromEuler(new THREE.Euler(
+        (THREE.Math.degToRad(rotationValue[0])),
+        (THREE.Math.degToRad(rotationValue[1])),
+        (THREE.Math.degToRad(rotationValue[2])), 'YXZ'
+      ));
+    this.quaterniateTo( stopQuaternion, duration ); //@ sourceURL=node3.animation.rotateTo.vwf
+}
+
+this.quaterniateBy = function(quaternion, duration, frame) {
+
+      this.startQuaternionSIM = (new THREE.Quaternion()).setFromEuler(new THREE.Euler(
+          (THREE.Math.degToRad(this.rotation[0])),
+          (THREE.Math.degToRad(this.rotation[1])),
+          (THREE.Math.degToRad(this.rotation[2])), 'YXZ'
+        ));
+      var deltaQuaternion = (new THREE.Quaternion).copy(quaternion);
+      if ( ! frame || frame == "rotated" ) {
+        this.stopQuaternionSIM = (new THREE.Quaternion()).multiplyQuaternions(deltaQuaternion,  this.startQuaternionSIM);
+      } else if ( frame == "scaled" ) {
+        this.stopQuaternionSIM = (new THREE.Quaternion()).multiplyQuaternions(this.startQuaternionSIM, deltaQuaternion);
+      }
+      //this.stopQuaternionSIM = (new THREE.Quaternion()).copy(quaternion);
+      if(duration > 0) {
+        this.animationDuration = duration;
+        this.animationUpdate = function(time, duration) {
+
+          let q = new THREE.Quaternion();
+          let e = new THREE.Euler();
+          let step = (time >= duration) ? 1 : time / duration;
+
+          THREE.Quaternion.slerp(this.startQuaternionSIM, this.stopQuaternionSIM, q, step || 0);
+          let interp = e.setFromQuaternion(q, 'YXZ');
+          this.rotation = [THREE.Math.radToDeg(interp.x), THREE.Math.radToDeg(interp.y), THREE.Math.radToDeg(interp.z)];
+        }
+        this.animationPlay(0, duration);
+      }
+      else {
+        let eE = new THREE.Euler();
+        let eQ = (new THREE.Quaternion).copy(this.stopQuaternionSIM);
+        let interpE = eE.setFromQuaternion(eQ, 'YXZ');
+        this.rotation = [THREE.Math.radToDeg(interpE.x),THREE.Math.radToDeg(interpE.y), THREE.Math.radToDeg(interpE.z)];
+        //this.quaternion = this.stopQuaternionSIM;
+      } //@ sourceURL=node3.animation.quaterniateBy.vwf
+
+    }
+  
+    this.scaleBy = function(scale, duration){
+
+      this.startScaleSIM = this.scale || goog.vec.Vec3.createFromValues( 1, 1, 1 );
+      var deltaScale = this.translationFromValue( scale );
+      this.stopScaleSIM = goog.vec.Vec3.createFromValues(
+        this.startScaleSIM[0] * deltaScale[0],
+        this.startScaleSIM[1] * deltaScale[1],
+        this.startScaleSIM[2] * deltaScale[2]
+      );
+      if(duration > 0) {
+        this.animationDuration = duration;
+        this.animationUpdate = function(time, duration) {
+          this.scale = goog.vec.Vec3.lerp(  // TODO: should be geometric interpolation
+            this.startScaleSIM, this.stopScaleSIM,
+            duration == 0 ? duration : time / duration,
+            goog.vec.Vec3.create()
+          );
+        }
+        this.animationPlay(0, duration);
+      }
+      else {
+        this.scale = this.stopScaleSIM;
+      } //@ sourceURL=node3.animation.scaleBy.vwf
+
+    }
+
+    this.scaleTo = function(scale, duration){
+
+      this.startScaleSIM = this.scale || goog.vec.Vec3.createFromValues( 1, 1, 1 );
+      this.stopScaleSIM = this.translationFromValue( scale );
+      if(duration > 0) {
+        this.animationDuration = duration;
+        this.animationUpdate = function(time, duration) {
+          this.scale = goog.vec.Vec3.lerp(  // TODO: should be geometric interpolation
+            this.startScaleSIM, this.stopScaleSIM,
+            duration == 0 ? duration : time / duration,
+            goog.vec.Vec3.create()
+          );
+        }
+        this.animationPlay(0, duration); 
+      }
+      else {
+        this.scale = this.stopScaleSIM;
+      }//@ sourceURL=node3.animation.scaleTo.vwf
+    }
+
+    this.transformBy = function(transform, duration){
+
+      var startTransform = this.transform || goog.vec.Vec3.create();
+      var deltaTransform = this.transformFromValue( transform );
+      // Left multiply by the delta
+      var stopTransform = goog.vec.Mat4.multMat( deltaTransform, startTransform, goog.vec.Mat4.createFloat32() );
+      this.transformTo( stopTransform, duration ); //@ sourceURL=node3.animation.transformBy.vwf
+    }
+
+    this.transformTo = function(transform, duration){
+
+      var stopTransform = this.transformFromValue( transform ) || goog.vec.Mat4.createIdentity();
+
+      if ( duration > 0 ) {
+
+        // Calculate the start and stop translations
+        this.startTranslationSIM = this.translation || goog.vec.Vec3.create();
+        this.stopTranslationSIM = goog.vec.Vec3.create();
+        goog.vec.Mat4.getColumn( stopTransform, 3, this.stopTranslationSIM );
+        // Calculate the start and stop quaternion and scale
+        this.startScaleSIM = this.scale || goog.vec.Vec3.createFromValues( 1, 1, 1 );
+        this.stopScaleSIM = goog.vec.Vec3.create();
+        this.startQuaternionSIM = this.quaternion || goog.vec.Quaternion.createFromValues( 0, 0, 0, 1 );
+        this.stopQuaternionSIM = goog.vec.Quaternion.fromRotationMatrix4(
+          this.unscaledTransform( stopTransform || goog.vec.Mat4.createIdentity(), this.stopScaleSIM, goog.vec.Mat4.create() ),
+          goog.vec.Quaternion.create()
+        );
+
+        this.animationDuration = duration;
+        // Call the appropriate functions to do the translation and quaterniation (that is totally a word)
+        this.animationUpdate = function(time, duration) {
+          this.translation = goog.vec.Vec3.lerp(
+            this.startTranslationSIM, this.stopTranslationSIM,
+            duration == 0 ? duration : time / duration,
+            goog.vec.Vec3.create()
+          );
+          this.quaternion = goog.vec.Quaternion.slerp(
+            this.startQuaternionSIM, this.stopQuaternionSIM,
+            duration == 0 ? duration : time / duration,
+            goog.vec.Quaternion.create()
+          );
+          this.scale = goog.vec.Vec3.lerp(  // TODO: should be geometric interpolation
+            this.startScaleSIM, this.stopScaleSIM,
+            duration == 0 ? duration : time / duration,
+            goog.vec.Vec3.create()
+          );
+        }
+        this.animationPlay(0, duration);
+      }
+      else {
+        this.transform = stopTransform;
+      } //@ sourceURL=node3.animation.transformTo.vwf
+    }
+
+    this.worldTransformBy = function(transform, duration){
+
+      var startWorldTransform = this.worldTransform || goog.vec.Mat4.create();
+      var deltaTransform = this.transformFromValue( transform );
+      // Left multiply by the delta
+      var stopWorldTransform = goog.vec.Mat4.multMat( deltaTransform, startWorldTransform, 
+                                                      goog.vec.Mat4.createFloat32() );
+      this.worldTransformTo( stopWorldTransform, duration ) //@ sourceURL=node3.animation.worldTransformBy.vwf
+    }
+
+    this.worldTransformTo = function(transform, duration){
+
+      var stopWorldTransform = this.transformFromValue( transform );
+      var stopTransform;
+      if ( this.parent && this.parent.worldTransform ) {
+        // We need to find the local transform that will bring about the desired world transform
+        // The math for this looks like -
+        // (new worldTransform) = (parentWorldTransform) * (transform)
+        // So, if we left multiply both sides by the inverse of the parentWorldTransform...
+        // inv(parentWorldTransform) * (new worldTransform) = (transform)
+        // Find the inverse parent worldTransform
+        var inverseParentWorldTransform = goog.vec.Mat4.createFloat32();
+        if ( goog.vec.Mat4.invert( this.parent.worldTransform, inverseParentWorldTransform ) ) {
+          // Left multiply the new worldTransform by the inverse parent worldTransform
+          stopTransform = goog.vec.Mat4.multMat( inverseParentWorldTransform, stopWorldTransform,
+                                                 goog.vec.Mat4.createFloat32() );
+        }
+        else {
+          stopTransform = goog.vec.Mat4.createIdentity();
+          this.logger.error( "Parent '" + this.parent.id + "' transform matrix is not invertible: " + 
+                             this.parent.transform );
+        }
+      }
+      else {
+        stopTransform = stopWorldTransform;
+      }
+      this.transformTo( stopTransform, duration ); //@ sourceURL=node3.animation.worldTransformTo.vwf
+    }

+ 73 - 0
public/defaults/proxy/animation/animationNode.vwf.json

@@ -0,0 +1,73 @@
+{
+"extends": "proxy/animation/animation.vwf",
+"methods":{
+  "animationUpdate":{
+    "parameters": [
+        "time", "duration"
+    ]
+  },
+  "translateBy":{
+    "parameters": [
+        "translation", "duration"
+    ]
+  },
+  "translateTo":{
+    "parameters": [
+        "translation", "duration"
+    ]
+  },
+  "rotateBy":{
+    "parameters": [
+        "rotation", "duration", "frame"
+    ]
+  },
+  "rotateTo":{
+    "parameters": [
+        "rotation", "duration", "frame"
+    ]
+  },
+  "quaterniateBy":{
+    "parameters": [
+        "quaternion", "duration", "frame"
+    ]
+  },
+  "quaterniateTo":{
+    "parameters": [
+        "quaternion", "duration"
+    ]
+  },
+  "scaleBy":{
+    "parameters": [
+        "scale", "duration"
+    ]
+  },
+  "scaleTo":{
+    "parameters": [
+        "scale", "duration"
+    ]
+  },
+  "transformBy":{
+    "parameters": [
+        "transform", "duration"
+    ]
+  },
+  "transformTo":{
+    "parameters": [
+        "transform", "duration"
+    ]
+  },
+  "worldTransformBy":{
+    "parameters": [
+        "transform", "duration"
+    ]
+  },
+  "worldTransformTo":{
+    "parameters": [
+        "transform", "duration"
+    ]
+  }
+},
+  "events":{
+    "changingTransformFromView": {}
+  }
+}

+ 7 - 0
public/defaults/proxy/animation/position.vwf.json

@@ -0,0 +1,7 @@
+{
+  "properties": {
+    "animationTime": null,
+    "animationTransform": null,
+    "sequence": 0
+  }
+}

+ 3 - 0
public/defaults/proxy/client.js

@@ -0,0 +1,3 @@
+this.initialize = function() {
+    //console.info( "=============== client.initialize ===============" );
+  }

+ 18 - 0
public/defaults/proxy/client.vwf.json

@@ -0,0 +1,18 @@
+{
+  "properties": {
+    "localUrl": null,
+    "remoteUrl": null,
+    "displayName": null,
+    "sharing": {
+      "audio": true,
+      "video": true
+    },
+    "color": "rgb(0,0,0)"
+  },
+  "methods": {
+    "initialize": {}
+  },
+  "scripts": {
+    "source": "client.js"
+  }
+}

+ 3 - 0
public/defaults/proxy/clients.vwf.json

@@ -0,0 +1,3 @@
+{
+    "children": []
+}

+ 12 - 0
public/defaults/proxy/node.vwf.json

@@ -0,0 +1,12 @@
+{
+  "extends": "proxy/node.vwf",
+  "properties":{
+    "id": null,
+    "name": null,
+    "parent": null,
+    "children": null
+  },
+  "methods":{},
+  "events": {}
+}
+

+ 8 - 0
public/defaults/proxy/ohm/node.vwf.json

@@ -0,0 +1,8 @@
+{
+  "extends": "proxy/node.vwf",
+  "properties": {
+    "ohmLang": null,
+    "grammar": null,
+    "semantics": null
+  }
+}

+ 0 - 10
public/defaults/proxy/vwf.example.com/aframe/a-arjs-anchor.vwf.yaml

@@ -1,10 +0,0 @@
-# https://aframe.io/docs/0.5.0/primitives/a-cursor.html
----
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-anchor"
-properties:
-  hit-testing-enabled:
-  changeMatrixMode:
-  preset:
-  markerType:
-  markerValue:

+ 0 - 7
public/defaults/proxy/vwf.example.com/aframe/a-asset-audio-item.vwf.yaml

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

+ 0 - 9
public/defaults/proxy/vwf.example.com/aframe/a-asset-image-item.vwf.yaml

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

+ 0 - 7
public/defaults/proxy/vwf.example.com/aframe/a-asset-item.vwf.yaml

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

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

@@ -1,9 +0,0 @@
-# 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:

+ 0 - 7
public/defaults/proxy/vwf.example.com/aframe/a-mirror-component.vwf.yaml

@@ -1,7 +0,0 @@
-# aabb-collider-component
----
-extends: http://vwf.example.com/aframe/aentityComponent.vwf
-type: "component"
-properties:
-  camera:
-  renderothermirror:

+ 0 - 28
public/defaults/proxy/vwf.example.com/aframe/a-sound-component.vwf.yaml

@@ -1,28 +0,0 @@
-# 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:
-  isPlaying:
-methods:
-  stopSound:
-  playSound:
-  pauseSound:
-  refreshSrc:
-    parameters:
-      - srcID
-  updateSrc:
-    parameters:
-      - srcID
-scripts:
-  - source: "http://vwf.example.com/aframe/a-sound-component.js"

+ 0 - 5
public/defaults/proxy/vwf.example.com/aframe/a-sun-sky.vwf.yaml

@@ -1,5 +0,0 @@
-# a-sun-sky
---- 
-extends: http://vwf.example.com/aframe/aentity.vwf
-properties:
-  sunPosition:

+ 0 - 51
public/defaults/proxy/vwf.example.com/aframe/aMaterialComponent.vwf.yaml

@@ -1,51 +0,0 @@
-#https://aframe.io/docs/0.6.0/components/line.html#properties_visible
----
-extends: http://vwf.example.com/aframe/aentityComponent.vwf
-type: "component"
-properties:
-  alphaTest:
-  depthTest:
-  flatShading:
-  npot:
-  offset:
-  opacity:
-  remain:
-  repeat:
-  shader:
-  side:
-  transparent:
-  vertexColors:
-  visible:
-  ambient-occlusion-map:
-  ambient-occlusion-map-intensity:
-  ambient-occlusion-texture-offset:
-  ambient-occlusion-texture-repeat:
-  color:
-  displacement-bias:
-  displacement-map:
-  displacement-scale:
-  displacement-texture-offset:
-  displacement-texture-repeat:
-  emissive:
-  emissiveIntensity:
-  height:
-  envMap:
-  fog:
-  metalness:
-  normal-map:
-  normal-scale:
-  normal-texture-offset:
-  normal-texture-repeat:
-  roughness:
-  sphericalEnvMap:
-  width:
-  wireframe:
-  wireframe-linewidth:
-  src:
-methods:
-  refreshSrc:
-  updateSrc:
-    parameters:
-      - srcID
-scripts:
-  - source: "http://vwf.example.com/aframe/aMaterialComponent.js"

+ 0 - 10
public/defaults/proxy/vwf.example.com/aframe/aSceneFogComponent.vwf.yaml

@@ -1,10 +0,0 @@
-#https://aframe.io/docs/0.6.0/components/line.html#properties_visible
----
-extends: http://vwf.example.com/aframe/aentityComponent.vwf
-type: "component"
-properties:
-  fogType:
-  fogColor:
-  density:
-  near:
-  far:

+ 0 - 10
public/defaults/proxy/vwf.example.com/aframe/aabb-collider-component.vwf.yaml

@@ -1,10 +0,0 @@
-# aabb-collider-component
----
-extends: http://vwf.example.com/aframe/aentityComponent.vwf
-type: "component"
-properties:
-  collideNonVisible:
-  debug:
-  enabled:
-  objects:
-  interval:

+ 0 - 10
public/defaults/proxy/vwf.example.com/aframe/aanimation.vwf.yaml

@@ -1,10 +0,0 @@
---- 
-extends: http://vwf.example.com/aframe/node.vwf
-type: "a-animation"
-properties:
-  attribute:
-  dur:
-  from:
-  to:
-  repeat:
-  begin:

+ 0 - 11
public/defaults/proxy/vwf.example.com/aframe/abox.vwf.yaml

@@ -1,11 +0,0 @@
-# https://aframe.io/docs/0.5.0/primitives/a-box.html
---- 
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-box"
-properties:
-  depth:
-  height:
-  segments-depth:
-  segments-height:
-  segments-width:
-  width:

+ 0 - 17
public/defaults/proxy/vwf.example.com/aframe/acamera.vwf.yaml

@@ -1,17 +0,0 @@
-# https://aframe.io/docs/0.5.0/primitives/a-camera.html
----
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-camera"
-properties:
-  user-height:
-  far:
-  fov:
-  look-controls-enabled:
-  near:
-  wasd-controls-enabled:
-methods:
-  setCameraToActive:
-    parameters:
-      - moniker
-    body: |
-          console.log("set to active call from - ", moniker);

+ 0 - 12
public/defaults/proxy/vwf.example.com/aframe/acolladamodel.vwf.yaml

@@ -1,12 +0,0 @@
-#https://aframe.io/docs/0.5.0/primitives/a-collada-model.html
---- 
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-collada-model"
-properties:
-  src:
-methods:
-  updateModel:
-    parameters:
-      - obj
-scripts:
-  - source: "http://vwf.example.com/aframe/acolladamodel.js"

+ 0 - 13
public/defaults/proxy/vwf.example.com/aframe/acone.vwf.yaml

@@ -1,13 +0,0 @@
-# https://aframe.io/docs/0.5.0/primitives/a-sphere.html
---- 
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-cone"
-properties:
-  height:
-  open-ended:
-  radius-bottom:
-  radius-top:
-  segments-height:
-  segments-radial: 
-  theta-length:
-  theta-start:

+ 0 - 8
public/defaults/proxy/vwf.example.com/aframe/acursor.vwf.yaml

@@ -1,8 +0,0 @@
-# https://aframe.io/docs/0.5.0/primitives/a-cursor.html
----
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-cursor"
-properties:
-  fuse:
-  fuse-timeout:
-  max-distance:

+ 0 - 14
public/defaults/proxy/vwf.example.com/aframe/acylinder.vwf.yaml

@@ -1,14 +0,0 @@
-# https://aframe.io/docs/0.5.0/primitives/a-sphere.html
---- 
-extends: http://vwf.example.com/aframe/aentity.vwf
-type: "a-cylinder"
-properties:
-  height:
-  radius:
-  open-ended:
-  radius-bottom:
-  radius-top:
-  segments-height:
-  segments-radial:
-  theta-length:
-  theta-start:

+ 0 - 110
public/defaults/proxy/vwf.example.com/aframe/aentity.vwf.yaml

@@ -1,110 +0,0 @@
-# https://aframe.io/docs/0.5.0/core/entity.html
---- 
-extends: http://vwf.example.com/aframe/node.vwf
-type: "a-entity"
-implements:
-- http://vwf.example.com/animation/animation.vwf
-- http://vwf.example.com/animation/animationNode.vwf
-properties:
-  position:
-    set: |
-      var position = this.translationFromValue( value ); // parse incoming value
-      if(!position || !this.position){
-        this.position = goog.vec.Vec3.create();
-      } else if ( ! goog.vec.Vec3.equals( this.position || goog.vec.Vec3.create(), position ) ) {
-        this.position = position;
-        this.positionChanged( position);
-      }  
-    get: |
-      return this.position || goog.vec.Vec3.create();
-  rotation:
-    set: |
-      var rotation = this.translationFromValue( value ); // parse incoming value
-      if(!rotation || !this.rotation){
-        this.rotation = goog.vec.Vec3.create();
-      } else if ( ! goog.vec.Vec3.equals( this.rotation || goog.vec.Vec3.create(), rotation ) ) {
-        this.rotation = rotation;
-        this.rotationChanged( rotation);
-      }  
-    get: |
-      return this.rotation || goog.vec.Vec3.create();
-  scale:
-    set: |
-      var scale = this.translationFromValue( value ); // parse incoming value
-      if(!scale || !this.scale){
-        this.scale = goog.vec.Vec3.create();
-      } else if ( ! goog.vec.Vec3.equals( this.scale || goog.vec.Vec3.create(), scale ) ) {
-        this.scale = scale;
-        this.scaleChanged( scale);
-      }  
-    get: |
-      return this.scale || goog.vec.Vec3.create();
-  clickable:
-  displayName:
-  visible:
-  edit:
-  osc:
-  ownedBy:
-  class:
-  stepping:
-  stepTime:
-  globalBeat:
-  meta:
-events:
-  positionChanged:
-  rotationChanged:
-  scaleChanged:
-  sendOSC:
-  intersectEvent:
-  clearIntersectEvent:
-  hitstartEvent:
-  hitendEvent:
-  clickEvent:
-methods:
-  getRandomColor:
-  intersectEventMethod:
-  clearIntersectEventMethod:
-  hitstartEventMethod:
-  hitendEventMethod:
-  clickEventMethod:
-  sendOSC:
-    parameters:
-      - msg
-  setGizmoMode:
-    parameters:
-      - mode
-  showCloseGizmo:
-  lookAt:
-    parameters:
-      - nodeID
-  worldRotation:
-  worldPosition:
-  translationFromValue:
-    parameters:
-      - propertyValue
-  getChildByName:
-    parameters:
-      - name
-  setOwner:
-    parameters:
-      - propertyValue
-  updateMethod:
-    parameters:
-      - methodName
-      - methodBody
-      - params
-  callMethod:
-    parameters:
-      - methodName
-      - params
-  onGlobalBeat:
-    parameters:
-      - obj
-  changeVisual:
-  resetVisual:  
-  step:
-  do:
-  randomize:
-  nodeDef:
-scripts:
-  - source: "http://vwf.example.com/aframe/aentity.js"

Some files were not shown because too many files changed in this diff