@smoud/tiny
Version:
Fast and tiny JavaScript library for HTML5 game and playable ads creation.
231 lines (123 loc) • 4.9 kB
JavaScript
// /**
// * @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};