# A-Frame & VWF & OSC simple scene # Copyright 2017 Krestianstvo.org project --- extends: http://vwf.example.com/aframe/ascene.vwf properties: fog: "type: linear; color: #ECECEC; far: 20; near: 0" assets: "assets.json" children: myLight: extends: http://vwf.example.com/aframe/alight.vwf properties: type: "point" color: "white" position: "0 10 5" rotation: "0 0 0" groundPlane: extends: http://vwf.example.com/aframe/aplane.vwf properties: height: 50 width: 50 repeat: "10 10" rotation: [-90, 0, 0] wireframe: false src: "#bg2" spaceText: extends: http://vwf.example.com/aframe/atext.vwf properties: value: "Virtual World Framework & A-Frame & OSC" color: "#2b5d83" position: [-2, 2.5, -3] cube: extends: http://vwf.example.com/aframe/abox.vwf properties: position: "0 1 -3" rotation: "0 0 0" color: "#3c7249" depth: 1 height: 1 width: 1 osc: true methods: getOSC: parameters: - msg body: | this.parseColorOSC(msg); this.parseSingleOSC(msg); parseColorOSC: parameters: - msg body: | let str = msg.address + JSON.stringify(msg.args); var match = this.oscLang.grammar.match(str, "rgb"); if (match.succeeded()) { let res = this.oscLang.semantics(match).parse(); this.setColorFromOSC(res); } setSinglePropFromOSC: parameters: - val body: | if (this.properties[val.propName]){ this[val.propName] = val.propValue } setColorFromOSC: parameters: - propValue body: | this.color = propValue; //this.parent.myLight.color = propValue; parseSingleOSC: parameters: - msg body: | let str = msg.address + JSON.stringify(msg.args[0]); var match = this.oscLang.grammar.match(str, "prop"); if (match.succeeded()) { let res = this.oscLang.semantics(match).parse(); this.setSinglePropFromOSC(res); } children: oscLang: extends: http://vwf.example.com/ohm/node.vwf properties: grammar: semantics: ohmLang: | parseOSC { rgb = "/rgb/" row row = "[" col rep "]" rep = ("," col)* col = colChar* colChar = ~("[" | "," | "]") number prop = "/" propSingle "/" number propSingle = letter* number (a number) = digit* "." digit+ -- fract | digit+ -- whole } methods: initLang: body: | console.log("add operations to semantics") this.addOperationLang(); addOperationLang: body: | var self = this; this.semantics.addOperation('parse', { rgb: function(_, e) { return 'rgb('+ e.parse() + ')' }, prop: function(_l, e, _r, k){ return {'propName': e.parse(), 'propValue': k.parse()}; }, row: function(_l, e, k, _e){ return e.parse() +','+ k.parse(); }, rep: function(_, e){ return e.parse()}, col: function(e) {return e.parse()}, colChar: function(e) {return e.parse()}, number: function(_) {return parseFloat(this.sourceString)}, propSingle: function(_){return this.sourceString} }); skySun: extends: http://vwf.example.com/aframe/aentity.vwf children: sun: extends: http://vwf.example.com/aframe/app-sun-component.vwf newSky: extends: http://vwf.example.com/aframe/aentity.vwf children: skyshader: extends: http://vwf.example.com/aframe/app-skyshader-component.vwf