Prechádzať zdrojové kódy

proxy objects for two.js, pts.js, tone.js

Nikolay Suslov 2 rokov pred
rodič
commit
c437904cfc
39 zmenil súbory, kde vykonal 862 pridanie a 0 odobranie
  1. 0 0
      public/defaults/proxy/pts/form.js
  2. 9 0
      public/defaults/proxy/pts/form.vwf.json
  3. 4 0
      public/defaults/proxy/pts/node.vwf.json
  4. 0 0
      public/defaults/proxy/pts/player.js
  5. 9 0
      public/defaults/proxy/pts/player.vwf.json
  6. 0 0
      public/defaults/proxy/pts/pt.js
  7. 12 0
      public/defaults/proxy/pts/pt.vwf.json
  8. 57 0
      public/defaults/proxy/pts/scene.js
  9. 11 0
      public/defaults/proxy/pts/scene.vwf.json
  10. 0 0
      public/defaults/proxy/tonejs/node.js
  11. 31 0
      public/defaults/proxy/tonejs/player.js
  12. 46 0
      public/defaults/proxy/tonejs/player.vwf.json
  13. 2 0
      public/defaults/proxy/tonejs/polySynth.vwf.json
  14. 29 0
      public/defaults/proxy/tonejs/transport.js
  15. 40 0
      public/defaults/proxy/tonejs/transport.vwf.json
  16. 0 0
      public/defaults/proxy/two/anchor.js
  17. 18 0
      public/defaults/proxy/two/anchor.vwf.json
  18. 0 0
      public/defaults/proxy/two/curve.js
  19. 13 0
      public/defaults/proxy/two/curve.vwf.json
  20. 0 0
      public/defaults/proxy/two/ellipse.js
  21. 15 0
      public/defaults/proxy/two/ellipse.vwf.json
  22. 7 0
      public/defaults/proxy/two/group.js
  23. 29 0
      public/defaults/proxy/two/group.vwf.json
  24. 79 0
      public/defaults/proxy/two/node.js
  25. 56 0
      public/defaults/proxy/two/node.vwf.json
  26. 107 0
      public/defaults/proxy/two/objects/transport.js
  27. 33 0
      public/defaults/proxy/two/objects/transport.vwf.json
  28. 18 0
      public/defaults/proxy/two/path.js
  29. 39 0
      public/defaults/proxy/two/path.vwf.json
  30. 62 0
      public/defaults/proxy/two/player.js
  31. 21 0
      public/defaults/proxy/two/player.vwf.json
  32. 0 0
      public/defaults/proxy/two/rectangle.js
  33. 15 0
      public/defaults/proxy/two/rectangle.vwf.json
  34. 55 0
      public/defaults/proxy/two/scene.js
  35. 11 0
      public/defaults/proxy/two/scene.vwf.json
  36. 0 0
      public/defaults/proxy/two/text.js
  37. 23 0
      public/defaults/proxy/two/text.vwf.json
  38. 0 0
      public/defaults/proxy/two/texture.js
  39. 11 0
      public/defaults/proxy/two/texture.vwf.json

+ 0 - 0
public/defaults/proxy/pts/form.js


+ 9 - 0
public/defaults/proxy/pts/form.vwf.json

@@ -0,0 +1,9 @@
+{
+  "extends": "proxy/pts/node.vwf",
+  "type": "form",
+  "properties": {},
+  "methods": {},
+  "scripts": {
+    "source": "form.js"
+  }
+}

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

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

+ 0 - 0
public/defaults/proxy/pts/player.js


+ 9 - 0
public/defaults/proxy/pts/player.vwf.json

@@ -0,0 +1,9 @@
+{
+  "extends": "proxy/pts/node.vwf",
+  "type": "player",
+  "properties": {},
+  "methods": {},
+  "scripts": {
+    "source": "player.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/pts/pt.js


+ 12 - 0
public/defaults/proxy/pts/pt.vwf.json

@@ -0,0 +1,12 @@
+{
+  "extends": "proxy/pts/node.vwf",
+  "type": "pt",
+  "properties": {
+    "x": null,
+    "y": null
+  },
+  "methods": {},
+  "scripts": {
+    "source": "pt.js"
+  }
+}

+ 57 - 0
public/defaults/proxy/pts/scene.js

@@ -0,0 +1,57 @@
+this.initialize = function () {
+
+    if(Object.getPrototypeOf(this).id.includes('scene.vwf')){
+        console.log("Initialize of Scene...", this.id);
+        this.future(3).clientWatch();
+    } else {
+        console.log("Initialize proto Scene..", this.id);
+    }
+   
+    //this.createDefaultXRCostume();
+};
+
+this.clientWatch = function () {
+
+    var self = this;
+
+    if (this.children.length !== 0) {
+
+        var clients = this.find("doc('proxy/clients.vwf')")[0];
+
+        if (clients !== undefined) {
+            //console.log(clients.children);
+
+            let clientsArray = [];
+
+            clients.children.forEach(function (element) {
+                clientsArray.push(element.name);
+
+            });
+
+            this.children.forEach(function (node) {
+                if (node.id.indexOf('avatar-') != -1) {
+
+                    if (clientsArray.includes(node.id.slice(7))) {
+                        //console.log(node.id + 'is here!');
+                    } else {
+                        //console.log(node.id + " needed to delete!");
+                        let idToDelete = node.id.slice(7);
+                        let nodes = self.children.filter(el=>
+                            (el.id.includes(idToDelete) && 
+                            (   el.id.includes('avatar-') ||
+                                el.id.includes('xrcontroller-') ||
+                                el.id.includes('mouse-') ||
+                                el.id.includes('gearvr-'))) 
+                               
+                            );
+
+                        nodes.forEach(el => {
+                            self.children.delete(self.children[el.id])
+                        })
+                    }
+                }
+            });
+        }
+    }
+    this.future(5).clientWatch();
+};

+ 11 - 0
public/defaults/proxy/pts/scene.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/pts/node.vwf",
+  "type": "scene",
+  "properties": {},
+  "methods": {
+    "clientWatch": {}
+  },
+  "scripts": {
+    "source": "scene.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/tonejs/node.js


+ 31 - 0
public/defaults/proxy/tonejs/player.js

@@ -0,0 +1,31 @@
+this.start = function(){
+    //on view side
+}
+
+this.syncStart = function(time){
+    //on view side
+}
+
+this.stop = function(){
+    //on view side
+}
+
+this.pause = function(){
+    //on view side
+}
+
+
+this.playBuffer = function(){
+
+}
+this.syncBufferState = function(){
+
+}
+
+this.setBufferState = function(isPlaying, startOffset, pausedTime){
+   
+    this.isPlaying = isPlaying;
+    this.startOffset = startOffset;
+    this.pausedTime = pausedTime;
+
+  }

+ 46 - 0
public/defaults/proxy/tonejs/player.vwf.json

@@ -0,0 +1,46 @@
+{
+    "extends": "proxy/tonejs/node.vwf",
+    "properties": {
+        "url": null,
+        "autostart":null,
+        "fadeIn": null,
+        "fadeOut": null,
+        "mute": null,
+        "loop": null,
+        "loopStart": null,
+        "loopEnd": null,
+        "volume": null,
+        "playbackRate": null,
+        "duration": null,
+        "sampleTime": null,
+        "state":null,
+        "startOffset":null,
+        "pausedTime": null,
+        "isPlaying": null,
+        "startTime": null,
+        "inSync": null
+        },
+    "methods":{
+        "start": {},
+        "syncStart": {
+            "parameters":["time"]
+        },
+        "stop": {},
+        "pause": {},
+        "setLoopPoints":{
+            "parameters":["start", "end"]
+        },
+        "playBuffer":{},
+        "syncBufferState":{},
+        "setBufferState":{
+          "parameters":[
+            "isPlaying",
+            "startOffset",
+            "pausedTime"
+          ]
+        }
+    },
+    "scripts": {
+      "source": "player.js"
+    }
+}

+ 2 - 0
public/defaults/proxy/tonejs/polySynth.vwf.json

@@ -2,6 +2,8 @@
   "extends": "proxy/tonejs/node.vwf",
   "properties": {},
   "methods":{
+    "scheduleRepeat":{},
+    "sync":{},
     "triggerAttackRelease":{
       "parameters": [
         "note", "duration", "time", "velocity"

+ 29 - 0
public/defaults/proxy/tonejs/transport.js

@@ -0,0 +1,29 @@
+this.start = function () {
+    //on view side
+}
+
+this.stop = function () {
+    //on view side
+}
+
+this.pause = function () {
+    //on view side
+}
+
+
+this.toggleTransport = function () {
+
+}
+this.syncTransportState = function () {
+
+}
+
+
+
+this.setTransportState = function (isPlaying, startOffset, pausedTime) {
+
+    this.isPlaying = isPlaying;
+    this.startOffset = startOffset;
+    this.pausedTime = pausedTime;
+
+}

+ 40 - 0
public/defaults/proxy/tonejs/transport.vwf.json

@@ -0,0 +1,40 @@
+{
+    "extends": "proxy/tonejs/node.vwf",
+    "properties": {
+        "bpm":null,
+        "loop": null,
+        "loopStart": null,
+        "loopEnd": null,
+        "position": null,
+        "progress": null,
+        "sampleTime": null,
+        "seconds": null,
+        "ticks": null,
+        "timeSignature": null,
+        "state":null,
+        "startOffset":null,
+        "pausedTime": null,
+        "isPlaying": null,
+        "duration": null
+        },
+    "methods":{
+        "start": {},
+        "stop": {},
+        "pause": {},
+        "setLoopPoints":{
+            "parameters":["start", "end"]
+        },
+        "toggleTransport":{},
+        "syncTransportState":{},
+        "setTransportState":{
+          "parameters":[
+            "isPlaying",
+            "startOffset",
+            "pausedTime"
+          ]
+        }
+    },
+    "scripts": {
+      "source": "transport.js"
+    }
+}

+ 0 - 0
public/defaults/proxy/two/anchor.js


+ 18 - 0
public/defaults/proxy/two/anchor.vwf.json

@@ -0,0 +1,18 @@
+{
+  "extends": "proxy/two/node.vwf",
+  "type": "anchor",
+  "properties": {
+    "x": null,
+    "y": null,
+    "lx": null,
+    "ly": null,
+    "rx": null,
+    "ry": null,
+    "command":null,
+    "controls":null
+  },
+  "methods": {},
+  "scripts": {
+    "source": "anchor.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/two/curve.js


+ 13 - 0
public/defaults/proxy/two/curve.vwf.json

@@ -0,0 +1,13 @@
+{
+  "extends": "proxy/two/path.vwf",
+  "type": "curve",
+  "implements": [
+    "proxy/two/path.vwf"
+  ],
+  "properties": {
+  },
+  "methods": {},
+  "scripts": {
+    "source": "curve.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/two/ellipse.js


+ 15 - 0
public/defaults/proxy/two/ellipse.vwf.json

@@ -0,0 +1,15 @@
+{
+  "extends": "proxy/two/path.vwf",
+  "type": "ellipse",
+  "implements": [
+    "proxy/two/path.vwf"
+  ],
+  "properties": {
+    "width": null,
+    "height": null
+  },
+  "methods": {},
+  "scripts": {
+    "source": "ellipse.js"
+  }
+}

+ 7 - 0
public/defaults/proxy/two/group.js

@@ -0,0 +1,7 @@
+this.setMask = function(nodeID){
+    //set mask
+}
+
+this.setScale = function(x, y){
+    //scale
+}

+ 29 - 0
public/defaults/proxy/two/group.vwf.json

@@ -0,0 +1,29 @@
+{
+  "extends": "proxy/two/node.vwf",
+  "type": "group",
+  "properties": {
+    "x": null,
+    "y": null,
+    "translation": [0,0],
+    "rotation": null,
+    "scale": null,
+    "mask": null,
+    "visible": null,
+    "opacity":null
+  },
+  "methods": {
+    "setMask":{
+      "parameters":[
+        "nodeID"
+      ]
+    },
+    "setScale":{
+      "parameters":[
+        "x","y"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "group.js"
+  }
+}

+ 79 - 0
public/defaults/proxy/two/node.js

@@ -0,0 +1,79 @@
+this.do = function () {
+    //do in step
+}
+
+this.step = function () {
+
+    if (this.stepping) {
+        this.do();
+    }
+
+    let t = this.stepTime ? this.stepTime : 0.05;
+
+    this.future(t).step();
+}
+
+this.clickEvent = function () {
+    //click event
+}
+
+this.mouseupEvent = function () {
+    //click event
+}
+
+this.mousedownEvent = function () {
+    //click event
+}
+
+this.checkForDragStart = function (avatarID) {
+
+    let av = this.getScene().findNodeByID(avatarID);
+    if (this.drag) {
+        //console.log("DRAG START for ", avatarID)
+                av.dragID = this.id;
+                av.delta = [av.x - this.x, av.y - this.y] 
+    }
+
+}
+
+this.checkForDragEnd = function (avatarID) {
+
+    if (this.drag) {
+       // console.log("DRAG END for ", avatarID)
+        let node = this.getScene().findNodeByID(avatarID);
+        node.dragID = null;
+        node.delta = [0, 0]
+    }
+
+}
+
+this.overstartEvent = function (avatarID) {
+
+    //over start
+
+}
+
+this.overendEvent = function (avatarID) {
+
+    //over end
+
+}
+
+
+this.getRandomColor = function () {
+    var letters = '0123456789ABCDEF';
+    var color = '#';
+    for (var i = 0; i < 6; i++) {
+        color += letters[Math.floor(this.random() * 16)];
+    }
+    return color;
+}
+
+this.getScene = function () {
+    let scene = this.find("/")[0];
+    return scene
+}
+
+this.onGlobalBeat = function(obj){
+    //on global beat
+}

+ 56 - 0
public/defaults/proxy/two/node.vwf.json

@@ -0,0 +1,56 @@
+{
+    "extends": "proxy/node.vwf",
+    "implements": [
+        "proxy/animation/animation.vwf"
+      ],
+    "properties": {
+        "displayName": null,
+        "stepping": null,
+        "stepTime": null,
+        "globalBeat": null,
+        "mouseevent": null,
+        "drag": null,
+        "twoWidth": null,
+        "twoHeight": null,
+        "matrixManual": null
+    },
+    "methods":{
+        "step": {},
+        "do": {},
+        "clickEvent":{},
+        "mouseupEvent":{},
+        "mousedownEvent":{},
+        "getRandomColor":{},
+        "checkForDragStart":{
+            "parameters":["avatarID"]
+        },
+        "checkForDragEnd":{
+            "parameters":["avatarID"]
+        },
+        "overstartEvent":{
+            "parameters":["avatarID"]
+        },
+        "overendEvent":{
+            "parameters":["avatarID"]
+        },
+        "getScene": {},
+        "onGlobalBeat": {
+            "parameters": [
+              "obj"
+            ]
+          },
+          "viewTroughFilter":{
+            "parameters": [
+                "nodeID", "param"
+              ]
+          },
+          "checkOver":{
+            "parameters": [
+                "x", "y"
+              ]
+          }
+    },
+    "scripts": {
+        "source": "node.js"
+      }
+}

+ 107 - 0
public/defaults/proxy/two/objects/transport.js

@@ -0,0 +1,107 @@
+this.initialize = function () {
+    //this.createTransportVis();
+
+}
+
+this.simpleVis = function () {
+    return {
+        "extends": "proxy/two/rectangle.vwf",
+        "properties": {
+            "height": 25,
+            "width": 25,
+            "fill": "#ddd"
+        }
+    }
+}
+
+this.stop = function () {
+
+    this.animationStop();
+    this.playing = false;
+}
+
+this.play = function () {
+
+    this.beat = 0;
+    this.animationPlay(0, this.animationDuration);
+    this.playing = true;
+
+}
+
+this.setupTransport = function () {
+    this.beat = 0;
+    this.animationLoop = true;
+    this.animationDuration = 1;
+    this.animationRate = 1;
+    this.animationTPS = 30;
+    //this.animationPlay(0,1);
+}
+
+this.animationUpdate = function (time, duration) {
+           //let sceneID = this.find("/")[0].id
+           let rate = this.animationTPS / this.animationRate; // 60/1 by default
+
+           var b = this.beat;
+           //console.log('b: ' + this.beat + ' t: ' + time + ' ta: ' + this.time);
+        
+           if (time == this.animationDuration) { //time == 1 && 
+               this.beat = 0;
+               //this.doGlobalBeat(time, duration, b);
+           } else {
+            
+            if(this.beat !== rate) {
+                this.doGlobalBeat(time, duration, b)
+            }
+
+            this.beat = this.beat + 1;
+           }
+    
+
+}
+
+this.resetVisual = function(){
+    this.vis.fill = "#ddd";
+}
+
+this.changeVisual = function(){
+    this.vis.fill = "green";
+    //this.future(0.5).resetVisual();
+}
+
+this.doGlobalBeat = function (time, duration, beat) {
+
+this.changeVisual();
+
+   let allChilds = this.find("//element(*,'proxy/two/node.vwf')"); //this.children
+   allChilds.forEach(el => {
+        if (el.globalBeat) {
+            let obj = {
+                name: this.name,
+                time: time,
+                duration: duration,
+                beat: beat
+            }
+            el.onGlobalBeat(obj);
+        }
+    })
+}
+
+this.init = function () {
+
+
+    this.children.create("vis", this.simpleVis(), function (child) {
+
+        child.mousedownEvent = function () {
+            if (this.parent.animationPlaying) {
+                this.parent.stop();
+                this.parent.resetVisual();
+            } else {
+                this.parent.play();
+                this.parent.changeVisual();
+            }
+        }
+
+    });
+    this.setupTransport();
+    //this.play();
+}

+ 33 - 0
public/defaults/proxy/two/objects/transport.vwf.json

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

+ 18 - 0
public/defaults/proxy/two/path.js

@@ -0,0 +1,18 @@
+this.playVideo = function(){
+
+}
+this.syncVideoState = function(){
+
+}
+
+this.unmute = function(){
+
+}
+
+this.setVideoState = function(isPlaying, startOffset, pausedTime){
+   
+    this.isPlaying = isPlaying;
+    this.startOffset = startOffset;
+    this.pausedTime = pausedTime;
+
+  }

+ 39 - 0
public/defaults/proxy/two/path.vwf.json

@@ -0,0 +1,39 @@
+{
+  "extends": "proxy/two/node.vwf",
+  "type": "path",
+  "properties": {
+    "x": null,
+    "y": null,
+    "translation": [0,0],
+    "rotation": null,
+    "scale": null,
+    "fill": null,
+    "stroke": null,
+    "linewidth": null,
+    "opacity": null,
+    "clip": null,
+    "startOffset":null,
+    "pausedTime": null,
+    "isPlaying": null,
+    "vertices": [],
+    "curved":null,
+    "closed":null,
+    "join":null,
+    "automatic":null
+  },
+  "methods": {
+    "playVideo":{},
+    "syncVideoState":{},
+    "unmute":{},
+    "setVideoState":{
+      "parameters":[
+        "isPlaying",
+        "startOffset",
+        "pausedTime"
+      ]
+    }
+  },
+  "scripts": {
+    "source": "path.js"
+  }
+}

+ 62 - 0
public/defaults/proxy/two/player.js

@@ -0,0 +1,62 @@
+this.initialize = function() {
+    // this.future(0).updateAvatar();
+  
+ };
+
+ this.createPlayerBody = function() {
+   
+    let color = this.getRandomColor();
+
+    let vis = {
+          "extends": "proxy/two/group.vwf",
+          "properties": {},
+          "children":{
+            "body":{
+              "extends": "proxy/two/ellipse.vwf",
+              "properties": {
+                "width": 30,
+                "height": 30,
+                "fill": color,
+                "opacity": 0.7,
+                "linewidth": 4
+              }
+            }
+          }
+        }
+      
+   
+
+    this.children.create("vis", vis, function(child){
+
+            this.delta = [0,0]
+            this.stepping = true;
+            this.stepTime = 0.2;
+            this.step();
+            // if (!nodeDef) {
+            
+            // }
+    
+        });
+
+ };
+
+ this.move = function(x,y){
+    this.x = x;
+    this.y = y;
+
+    if(this.dragID){
+        let node = this.getScene().findNodeByID(this.dragID);
+        node.x = this.x - this.delta[0];
+        node.y = this.y - this.delta[1]
+    }
+
+ }
+
+ this.checkOver = function(x, y){
+    //console.log("CHECK OVER from ", this.id);
+
+ }
+
+this.do = function(){
+        this.checkOver(this.x, this.y);
+}

+ 21 - 0
public/defaults/proxy/two/player.vwf.json

@@ -0,0 +1,21 @@
+{
+  "extends": "proxy/two/group.vwf",
+  "properties": {
+    "dragID":null,
+    "delta": null
+  },
+  "methods": {
+    "initialize": {},
+    "createPlayerBody": {},
+    "updateAvatar": {},
+    "move":{
+      "parameters":["x","y"]
+    },
+    "checkOver":{
+      "parameters":["x","y"]
+    }
+  },
+  "scripts": {
+    "source": "player.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/two/rectangle.js


+ 15 - 0
public/defaults/proxy/two/rectangle.vwf.json

@@ -0,0 +1,15 @@
+{
+  "extends": "proxy/two/path.vwf",
+  "type": "rectangle",
+  "implements": [
+    "proxy/two/path.vwf"
+  ],
+  "properties": {
+    "width": null,
+    "height": null
+  },
+  "methods": {},
+  "scripts": {
+    "source": "rectangle.js"
+  }
+}

+ 55 - 0
public/defaults/proxy/two/scene.js

@@ -0,0 +1,55 @@
+this.initialize = function () {
+
+    if(Object.getPrototypeOf(this).id.includes('scene.vwf')){
+        console.log("Initialize of Scene...", this.id);
+        this.future(3).clientWatch();
+    } else {
+        console.log("Initialize proto Scene..", this.id);
+    }
+   
+    //this.createDefaultXRCostume();
+};
+
+this.clientWatch = function () {
+
+    var self = this;
+
+    if (this.children.length !== 0) {
+
+        var clients = this.find("doc('proxy/clients.vwf')")[0];
+
+        if (clients !== undefined) {
+            //console.log(clients.children);
+
+            let clientsArray = [];
+
+            clients.children.forEach(function (element) {
+                clientsArray.push(element.name);
+
+            });
+
+            this.children.forEach(function (node) {
+                if (node.id.indexOf('avatar-') != -1) {
+
+                    if (clientsArray.includes(node.id.slice(7))) {
+                        //console.log(node.id + 'is here!');
+                    } else {
+                        //console.log(node.id + " needed to delete!");
+                        let idToDelete = node.id.slice(7);
+                        let nodes = self.children.filter(el=>
+                            (el.id.includes(idToDelete) && 
+                            (   el.id.includes('avatar-') ||
+                                el.id.includes('mouse-'))) 
+                            );
+
+                        nodes.forEach(el => {
+                            self.children[el.id].stepping = false;
+                            self.children.delete(self.children[el.id])
+                        })
+                    }
+                }
+            });
+        }
+    }
+    this.future(5).clientWatch();
+};

+ 11 - 0
public/defaults/proxy/two/scene.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/two/node.vwf",
+  "type": "scene",
+  "properties": {},
+  "methods": {
+    "clientWatch": {}
+  },
+  "scripts": {
+    "source": "scene.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/two/text.js


+ 23 - 0
public/defaults/proxy/two/text.vwf.json

@@ -0,0 +1,23 @@
+{
+  "extends": "proxy/two/node.vwf",
+  "type": "text",
+  "properties": {
+    "text": null,
+    "family": null,
+    "size": null,
+    "fill": null,
+    "stroke": null,
+    "linewidth": null,
+    "style": null,
+    "weight": null,
+    "opacity": null,
+    "visible": null,
+    "rotation": null,
+    "scale": null,
+    "translation": null
+  },
+  "methods": {},
+  "scripts": {
+    "source": "ellipse.js"
+  }
+}

+ 0 - 0
public/defaults/proxy/two/texture.js


+ 11 - 0
public/defaults/proxy/two/texture.vwf.json

@@ -0,0 +1,11 @@
+{
+  "extends": "proxy/two/node.vwf",
+  "type": "texture",
+  "properties": {
+    "src": null
+  },
+  "methods": {},
+  "scripts": {
+    "source": "texture.js"
+  }
+}