UNPKG

@smoud/tiny

Version:

Fast and tiny JavaScript library for HTML5 game and playable ads creation.

231 lines (123 loc) 4.9 kB
// /** // * @author alteredq / http://alteredqualia.com/ // * @author mrdoob / http://mrdoob.com/ // */ // var _lut = []; // for ( var i = 0; i < 256; i ++ ) { // _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); // } // var MathFunc = { // DEG2RAD: Math.PI / 180, // RAD2DEG: 180 / Math.PI, // generateUUID: function () { // // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 // var d0 = Math.random() * 0xffffffff | 0; // var d1 = Math.random() * 0xffffffff | 0; // var d2 = Math.random() * 0xffffffff | 0; // var d3 = Math.random() * 0xffffffff | 0; // var uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' + // _lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' + // _lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] + // _lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ]; // // .toUpperCase() here flattens concatenated strings to save heap memory space. // return uuid.toUpperCase(); // }, // clamp: function ( value, min, max ) { // return Math.max( min, Math.min( max, value ) ); // }, // // compute euclidian modulo of m % n // // https://en.wikipedia.org/wiki/Modulo_operation // euclideanModulo: function ( n, m ) { // return ( ( n % m ) + m ) % m; // }, // // Linear mapping from range <a1, a2> to range <b1, b2> // mapLinear: function ( x, a1, a2, b1, b2 ) { // return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); // }, // // https://en.wikipedia.org/wiki/Linear_interpolation // lerp: function ( x, y, t ) { // return ( 1 - t ) * x + t * y; // }, // // http://en.wikipedia.org/wiki/Smoothstep // smoothstep: function ( x, min, max ) { // if ( x <= min ) return 0; // if ( x >= max ) return 1; // x = ( x - min ) / ( max - min ); // return x * x * ( 3 - 2 * x ); // }, // smootherstep: function ( x, min, max ) { // if ( x <= min ) return 0; // if ( x >= max ) return 1; // x = ( x - min ) / ( max - min ); // return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); // }, // // Random integer from <low, high> interval // randInt: function ( low, high ) { // return low + Math.floor( Math.random() * ( high - low + 1 ) ); // }, // // Random float from <low, high> interval // randFloat: function ( low, high ) { // return low + Math.random() * ( high - low ); // }, // // Random float from <-range/2, range/2> interval // randFloatSpread: function ( range ) { // return range * ( 0.5 - Math.random() ); // }, // degToRad: function ( degrees ) { // return degrees * MathFunc.DEG2RAD; // }, // radToDeg: function ( radians ) { // return radians * MathFunc.RAD2DEG; // }, // isPowerOfTwo: function ( value ) { // return ( value & ( value - 1 ) ) === 0 && value !== 0; // }, // ceilPowerOfTwo: function ( value ) { // return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); // }, // floorPowerOfTwo: function ( value ) { // return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); // } // }; // export { MathFunc }; function denormalize( value, array ) { switch ( array.constructor ) { case Float32Array: return value; case Uint32Array: return value / 4294967295.0; case Uint16Array: return value / 65535.0; case Uint8Array: return value / 255.0; case Int32Array: return Math.max( value / 2147483647.0, - 1.0 ); case Int16Array: return Math.max( value / 32767.0, - 1.0 ); case Int8Array: return Math.max( value / 127.0, - 1.0 ); default: throw new Error( 'Invalid component type.' ); } } function normalize( value, array ) { switch ( array.constructor ) { case Float32Array: return value; case Uint32Array: return Math.round( value * 4294967295.0 ); case Uint16Array: return Math.round( value * 65535.0 ); case Uint8Array: return Math.round( value * 255.0 ); case Int32Array: return Math.round( value * 2147483647.0 ); case Int16Array: return Math.round( value * 32767.0 ); case Int8Array: return Math.round( value * 127.0 ); default: throw new Error( 'Invalid component type.' ); } } export {denormalize, normalize};