/** * @author sunag / http://www.sunag.com.br/ */ import { TempNode } from '../core/TempNode.js'; function Math1Node( a, method ) { TempNode.call( this ); this.a = a; this.method = method; } Math1Node.RAD = 'radians'; Math1Node.DEG = 'degrees'; Math1Node.EXP = 'exp'; Math1Node.EXP2 = 'exp2'; Math1Node.LOG = 'log'; Math1Node.LOG2 = 'log2'; Math1Node.SQRT = 'sqrt'; Math1Node.INV_SQRT = 'inversesqrt'; Math1Node.FLOOR = 'floor'; Math1Node.CEIL = 'ceil'; Math1Node.NORMALIZE = 'normalize'; Math1Node.FRACT = 'fract'; Math1Node.SATURATE = 'saturate'; Math1Node.SIN = 'sin'; Math1Node.COS = 'cos'; Math1Node.TAN = 'tan'; Math1Node.ASIN = 'asin'; Math1Node.ACOS = 'acos'; Math1Node.ARCTAN = 'atan'; Math1Node.ABS = 'abs'; Math1Node.SIGN = 'sign'; Math1Node.LENGTH = 'length'; Math1Node.NEGATE = 'negate'; Math1Node.INVERT = 'invert'; Math1Node.prototype = Object.create( TempNode.prototype ); Math1Node.prototype.constructor = Math1Node; Math1Node.prototype.nodeType = "Math1"; Math1Node.prototype.getType = function ( builder ) { switch ( this.method ) { case Math1Node.LENGTH: return 'f'; } return this.a.getType( builder ); }; Math1Node.prototype.generate = function ( builder, output ) { var type = this.getType( builder ), result = this.a.build( builder, type ); switch ( this.method ) { case Math1Node.NEGATE: result = '( -' + result + ' )'; break; case Math1Node.INVERT: result = '( 1.0 - ' + result + ' )'; break; default: result = this.method + '( ' + result + ' )'; break; } return builder.format( result, type, output ); }; Math1Node.prototype.copy = function ( source ) { TempNode.prototype.copy.call( this, source ); this.a = source.a; this.method = source.method; }; Math1Node.prototype.toJSON = function ( meta ) { var data = this.getJSONNode( meta ); if ( ! data ) { data = this.createJSONNode( meta ); data.a = this.a.toJSON( meta ).uuid; data.method = this.method; } return data; }; export { Math1Node };