mirror of
https://github.com/photonstorm/phaser
synced 2024-11-24 21:53:59 +00:00
184 lines
4.3 KiB
JavaScript
184 lines
4.3 KiB
JavaScript
/**
|
|
* @copyright 2016 Photon Storm Ltd.
|
|
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
|
*/
|
|
|
|
// ES6 Math.trunc - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
|
|
if (!Math.trunc) {
|
|
Math.trunc = function trunc(x) {
|
|
return x < 0 ? Math.ceil(x) : Math.floor(x);
|
|
};
|
|
}
|
|
|
|
/**
|
|
* A polyfill for Function.prototype.bind
|
|
*/
|
|
if (!Function.prototype.bind) {
|
|
|
|
/* jshint freeze: false */
|
|
Function.prototype.bind = (function () {
|
|
|
|
var slice = Array.prototype.slice;
|
|
|
|
return function (thisArg) {
|
|
|
|
var target = this, boundArgs = slice.call(arguments, 1);
|
|
|
|
if (typeof target !== 'function')
|
|
{
|
|
throw new TypeError();
|
|
}
|
|
|
|
function bound() {
|
|
var args = boundArgs.concat(slice.call(arguments));
|
|
target.apply(this instanceof bound ? this : thisArg, args);
|
|
}
|
|
|
|
bound.prototype = (function F(proto) {
|
|
if (proto)
|
|
{
|
|
F.prototype = proto;
|
|
}
|
|
|
|
if (!(this instanceof F))
|
|
{
|
|
/* jshint supernew: true */
|
|
return new F;
|
|
}
|
|
})(target.prototype);
|
|
|
|
return bound;
|
|
};
|
|
})();
|
|
}
|
|
|
|
/**
|
|
* A polyfill for Array.isArray
|
|
*/
|
|
if (!Array.isArray)
|
|
{
|
|
Array.isArray = function (arg)
|
|
{
|
|
return Object.prototype.toString.call(arg) === '[object Array]';
|
|
};
|
|
}
|
|
|
|
/**
|
|
* A polyfill for Array.forEach
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
|
|
*/
|
|
if (!Array.prototype.forEach)
|
|
{
|
|
Array.prototype.forEach = function(fun /*, thisArg */)
|
|
{
|
|
"use strict";
|
|
|
|
if (this === void 0 || this === null)
|
|
{
|
|
throw new TypeError();
|
|
}
|
|
|
|
var t = Object(this);
|
|
var len = t.length >>> 0;
|
|
|
|
if (typeof fun !== "function")
|
|
{
|
|
throw new TypeError();
|
|
}
|
|
|
|
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
|
|
|
|
for (var i = 0; i < len; i++)
|
|
{
|
|
if (i in t)
|
|
{
|
|
fun.call(thisArg, t[i], i, t);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Low-budget Float32Array knock-off, suitable for use with P2.js in IE9
|
|
* Source: http://www.html5gamedevs.com/topic/5988-phaser-12-ie9/
|
|
* Cameron Foale (http://www.kibibu.com)
|
|
*/
|
|
if (typeof window.Uint32Array !== "function" && typeof window.Uint32Array !== "object")
|
|
{
|
|
var CheapArray = function(type)
|
|
{
|
|
var proto = new Array(); // jshint ignore:line
|
|
|
|
window[type] = function(arg) {
|
|
|
|
if (typeof(arg) === "number")
|
|
{
|
|
Array.call(this, arg);
|
|
this.length = arg;
|
|
|
|
for (var i = 0; i < this.length; i++)
|
|
{
|
|
this[i] = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Array.call(this, arg.length);
|
|
|
|
this.length = arg.length;
|
|
|
|
for (var i = 0; i < this.length; i++)
|
|
{
|
|
this[i] = arg[i];
|
|
}
|
|
}
|
|
};
|
|
|
|
window[type].prototype = proto;
|
|
window[type].constructor = window[type];
|
|
};
|
|
|
|
CheapArray('Float32Array'); // jshint ignore:line
|
|
CheapArray('Uint32Array'); // jshint ignore:line
|
|
CheapArray('Uint16Array'); // jshint ignore:line
|
|
CheapArray('Int16Array'); // jshint ignore:line
|
|
CheapArray('ArrayBuffer'); // jshint ignore:line
|
|
}
|
|
|
|
/**
|
|
* Also fix for the absent console in IE9
|
|
*/
|
|
if (!window.console)
|
|
{
|
|
window.console = {};
|
|
window.console.log = window.console.assert = function(){};
|
|
window.console.warn = window.console.assert = function(){};
|
|
}
|
|
|
|
/**
|
|
* performance.now
|
|
*/
|
|
(function(){
|
|
|
|
if ("performance" in window == false) {
|
|
window.performance = {};
|
|
}
|
|
|
|
Date.now = (Date.now || function () { // thanks IE8
|
|
return new Date().getTime();
|
|
});
|
|
|
|
if ("now" in window.performance == false)
|
|
{
|
|
var nowOffset = Date.now();
|
|
|
|
if (performance.timing && performance.timing.navigationStart){
|
|
nowOffset = performance.timing.navigationStart
|
|
}
|
|
|
|
window.performance.now = function now(){
|
|
return Date.now() - nowOffset;
|
|
}
|
|
}
|
|
|
|
})();
|