From dc92188fef67d7a2032173d7746fbc16a951a366 Mon Sep 17 00:00:00 2001 From: hwc487 Date: Thu, 17 May 2012 15:15:43 -0700 Subject: Exposing parameters for pulse and plasma materials --- js/lib/rdge/materials/plasma-material.js | 98 +++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-) (limited to 'js/lib/rdge/materials/plasma-material.js') diff --git a/js/lib/rdge/materials/plasma-material.js b/js/lib/rdge/materials/plasma-material.js index 02172a6b..1db207d6 100644 --- a/js/lib/rdge/materials/plasma-material.js +++ b/js/lib/rdge/materials/plasma-material.js @@ -17,6 +17,23 @@ var PlasmaMaterial = function PlasmaMaterial() { this._dTime = 0.01; this._speed = 1.0; + this._wave = 0.0; + this._wave1 = 0.6; + this._wave2 = 0.8; + + /////////////////////////////////////////////////////////////////////// + // Properties + /////////////////////////////////////////////////////////////////////// + this._propNames = ["wave", "wave1", "wave2", "speed"]; + this._propLabels = ["Wave", "Wave 1", "Wave 2", "Speed"]; + this._propTypes = ["float", "float", "float", "float"]; + + this._propValues = []; + this._propValues[ this._propNames[0] ] = this._wave; + this._propValues[ this._propNames[1] ] = this._wave1; + this._propValues[ this._propNames[2] ] = this._wave2; + this._propValues[ this._propNames[3] ] = this._speed; + /////////////////////////////////////////////////////////////////////// // Property Accessors @@ -28,10 +45,51 @@ var PlasmaMaterial = function PlasmaMaterial() { /////////////////////////////////////////////////////////////////////// // Material Property Accessors /////////////////////////////////////////////////////////////////////// + // duplcate method requirde + this.dup = function (world) { + // get the current values; + var propNames = [], propValues = [], propTypes = [], propLabels = []; + this.getAllProperties(propNames, propValues, propTypes, propLabels); + + // allocate a new material + var newMat = new PlasmaMaterial(); + + // copy over the current values; + var n = propNames.length; + for (var i = 0; i < n; i++) + newMat.setProperty(propNames[i], propValues[i]); + + return newMat; + }; this.setProperty = function( prop, value ) { - // plasma has no properties + // make sure we have legitimate imput + var ok = this.validateProperty( prop, value ); + if (!ok) { + console.log( "invalid property in Water Material:" + prop + " : " + value ); + } + + switch (prop) + { + case "wave": + this._wave = value; + break; + + case "wave1": + this._wave1 = value; + break; + + case "wave2": + this._wave2 = value; + break; + + case "speed": + this._speed = value; + break; + } + + this.updateParameters(); }; /////////////////////////////////////////////////////////////////////// @@ -56,12 +114,37 @@ var PlasmaMaterial = function PlasmaMaterial() { // set the default value this._time = 0; this._shader['default'].u_time.set( [this._time] ); + this._shader['default'].u_speed.set( [this._speed] ); + + this._shader['default'].u_wave.set( [this._wave] ); + this._shader['default'].u_wave1.set( [this._wave1] ); + this._shader['default'].u_wave2.set( [this._wave2] ); // set up the material node this._materialNode = RDGE.createMaterialNode("plasmaMaterial" + "_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); }; + this.updateParameters = function() + { + this._propValues[ this._propNames[0] ] = this._wave; + this._propValues[ this._propNames[1] ] = this._wave1; + this._propValues[ this._propNames[2] ] = this._wave2; + this._propValues[ this._propNames[3] ] = this._speed; + + var material = this._materialNode; + if (material) { + var technique = material.shaderProgram['default']; + var renderer = RDGE.globals.engine.getContext().renderer; + if (renderer && technique) { + technique.u_wave.set( [this._wave] ); + technique.u_wave1.set( [this._wave1] ); + technique.u_wave2.set( [this._wave2] ); + technique.u_speed.set( [this._speed] ); + } + } + }; + this.update = function( time ) { this._shader['default'].u_time.set( [this._time] ); this._time += this._dTime; @@ -74,7 +157,10 @@ var PlasmaMaterial = function PlasmaMaterial() { 'material' : this.getShaderName(), 'name' : this.getName(), 'speed' : this._speed, - 'dTime' : this._dTime + 'dTime' : this._dTime, + 'wave' : this._wave, + 'wave1' : this._wave1, + 'wave2' : this._wave2 }; return jObj; @@ -84,6 +170,10 @@ var PlasmaMaterial = function PlasmaMaterial() { { this._speed = jObj.speed; this._dTime = jObj.dTime; + + this._wave = jObj.wave; + this._wave1 = jObj.wave1; + this._wave2 = jObj.wave2; }; }; @@ -115,6 +205,10 @@ var plasmaShaderDef = 'params' : { 'u_time' : { 'type' : 'float' }, + 'u_speed': { 'type' : 'float' }, + 'u_wave' : { 'type' : 'float' }, + 'u_wave1': { 'type' : 'float' }, + 'u_wave2': { 'type' : 'float' } }, // render states -- cgit v1.2.3