mirror of
https://github.com/photonstorm/phaser
synced 2025-02-17 06:28:30 +00:00
Merge branch 'master' of https://github.com/photonstorm/phaser
This commit is contained in:
commit
8d01f78a66
430 changed files with 7592 additions and 2362 deletions
|
@ -1,9 +1,10 @@
|
|||
# Change Log
|
||||
|
||||
## Version 2.7.1
|
||||
## Version 2.7.1 - 28th November 2016
|
||||
|
||||
### Updates
|
||||
|
||||
* Added a third optional parameter to PIXI.BaseTexture allowing textures to be scaled according to devicePixelRatio (thanks @cloakedninjas)
|
||||
* TypeScript definitions fixes and updates (thanks @Aleksey-Danchin)
|
||||
|
||||
### Bug Fixes
|
||||
|
|
|
@ -314,10 +314,11 @@ If you code with [TypeScript](http://www.typescriptlang.org/) there are comprehe
|
|||
![Change Log](http://phaser.io/images/github/div-change-log.png "Change Log")
|
||||
<a name="change-log"></a>
|
||||
|
||||
## Version 2.7.1
|
||||
## Version 2.7.1 - 28th November 2016
|
||||
|
||||
### Updates
|
||||
|
||||
* Added a third optional parameter to PIXI.BaseTexture allowing textures to be scaled according to devicePixelRatio (thanks @cloakedninjas)
|
||||
* TypeScript definitions fixes and updates (thanks @Aleksey-Danchin)
|
||||
|
||||
### Bug Fixes
|
||||
|
|
2
v2-community/build/creature.min.js
vendored
2
v2-community/build/creature.min.js
vendored
File diff suppressed because one or more lines are too long
2
v2-community/build/custom/p2.min.js
vendored
2
v2-community/build/custom/p2.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:48:35
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:22
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -6900,8 +6900,9 @@ PIXI.CanvasRenderer.prototype.mapBlendModes = function () {
|
|||
* @constructor
|
||||
* @param source {String|Canvas} the source object (image or canvas)
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
*/
|
||||
PIXI.BaseTexture = function(source, scaleMode)
|
||||
PIXI.BaseTexture = function(source, scaleMode, resolution)
|
||||
{
|
||||
/**
|
||||
* The Resolution of the texture.
|
||||
|
@ -6909,7 +6910,7 @@ PIXI.BaseTexture = function(source, scaleMode)
|
|||
* @property resolution
|
||||
* @type Number
|
||||
*/
|
||||
this.resolution = 1;
|
||||
this.resolution = resolution || 1;
|
||||
|
||||
/**
|
||||
* [read-only] The width of the base texture set when the image has loaded
|
||||
|
@ -7125,9 +7126,10 @@ PIXI.BaseTexture.prototype.unloadFromGPU = function()
|
|||
* @method fromCanvas
|
||||
* @param canvas {Canvas} The canvas element source of the texture
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
* @return {BaseTexture}
|
||||
*/
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode, resolution)
|
||||
{
|
||||
if (canvas.width === 0)
|
||||
{
|
||||
|
@ -7139,7 +7141,9 @@ PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
|||
canvas.height = 1;
|
||||
}
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode);
|
||||
resolution = resolution || 1;
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode, resolution);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -7502,7 +7506,7 @@ var Phaser = Phaser || { // jshint ignore:line
|
|||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
VERSION: '2.7.0',
|
||||
VERSION: '2.7.1',
|
||||
|
||||
/**
|
||||
* An array of Phaser game instances.
|
||||
|
@ -28888,7 +28892,7 @@ Phaser.SinglePad.prototype.constructor = Phaser.SinglePad;
|
|||
|
||||
/**
|
||||
* If you need more fine-grained control over the handling of specific keys you can create and use Phaser.Key objects.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Key
|
||||
* @constructor
|
||||
* @param {Phaser.Game} game - Current game instance.
|
||||
|
@ -29012,7 +29016,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#update
|
||||
* @protected
|
||||
*/
|
||||
|
@ -29035,7 +29039,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyDown
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -29072,7 +29076,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyUp
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -29135,7 +29139,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#downDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just pressed. Given in ms.
|
||||
* @return {boolean} True if the key was pressed down within the given duration.
|
||||
|
@ -29151,7 +29155,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#upDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just released. Given in ms.
|
||||
* @return {boolean} True if the key was released within the given duration.
|
||||
|
@ -29171,7 +29175,8 @@ Phaser.Key.prototype = {
|
|||
* When you check this value it will return `true` if the Key is down, otherwise `false`.
|
||||
* You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.
|
||||
* This allows you to use it in situations where you want to check if this key is down without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justDown
|
||||
* @property {boolean} justDown
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -29193,7 +29198,8 @@ Object.defineProperty(Phaser.Key.prototype, "justDown", {
|
|||
* When you check this value it will return `true` if the Key is up, otherwise `false`.
|
||||
* You can only call justUp once per key release. It will only return `true` once, until the Key is pressed down and released again.
|
||||
* This allows you to use it in situations where you want to check if this key is up without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justUp
|
||||
* @property {boolean} justUp
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -29213,7 +29219,7 @@ Object.defineProperty(Phaser.Key.prototype, "justUp", {
|
|||
/**
|
||||
* An enabled key processes its update and dispatches events.
|
||||
* A key can be disabled momentarily at runtime instead of deleting it.
|
||||
*
|
||||
* @name Phaser.Key#enabled
|
||||
* @property {boolean} enabled
|
||||
* @memberof Phaser.Key
|
||||
* @default true
|
||||
|
@ -35225,7 +35231,7 @@ Phaser.BitmapData = function (game, key, width, height, skipPool) {
|
|||
* @property {PIXI.BaseTexture} baseTexture - The PIXI.BaseTexture.
|
||||
* @default
|
||||
*/
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas, null, this.game.resolution);
|
||||
|
||||
/**
|
||||
* @property {PIXI.Texture} texture - The PIXI.Texture.
|
||||
|
@ -37547,6 +37553,635 @@ Phaser.BitmapData.getTransform = function (translateX, translateY, scaleX, scale
|
|||
|
||||
Phaser.BitmapData.prototype.constructor = Phaser.BitmapData;
|
||||
|
||||
/* jshint ignore:start */
|
||||
|
||||
/*
|
||||
Copyright (c) 2016, Mapbox
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class EarCut
|
||||
*/
|
||||
Phaser.EarCut = {};
|
||||
|
||||
Phaser.EarCut.Triangulate = function (data, holeIndices, dim) {
|
||||
|
||||
dim = dim || 2;
|
||||
|
||||
var hasHoles = holeIndices && holeIndices.length,
|
||||
outerLen = hasHoles ? holeIndices[0] * dim : data.length,
|
||||
outerNode = Phaser.EarCut.linkedList(data, 0, outerLen, dim, true),
|
||||
triangles = [];
|
||||
|
||||
if (!outerNode) return triangles;
|
||||
|
||||
var minX, minY, maxX, maxY, x, y, size;
|
||||
|
||||
if (hasHoles) outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim);
|
||||
|
||||
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
|
||||
if (data.length > 80 * dim) {
|
||||
minX = maxX = data[0];
|
||||
minY = maxY = data[1];
|
||||
|
||||
for (var i = dim; i < outerLen; i += dim) {
|
||||
x = data[i];
|
||||
y = data[i + 1];
|
||||
if (x < minX) minX = x;
|
||||
if (y < minY) minY = y;
|
||||
if (x > maxX) maxX = x;
|
||||
if (y > maxY) maxY = y;
|
||||
}
|
||||
|
||||
// minX, minY and size are later used to transform coords into integers for z-order calculation
|
||||
size = Math.max(maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
Phaser.EarCut.earcutLinked(outerNode, triangles, dim, minX, minY, size);
|
||||
|
||||
return triangles;
|
||||
};
|
||||
|
||||
// create a circular doubly linked list from polygon points in the specified winding order
|
||||
|
||||
Phaser.EarCut.linkedList = function (data, start, end, dim, clockwise) {
|
||||
var sum = 0,
|
||||
i, j, last;
|
||||
|
||||
// calculate original winding order of a polygon ring
|
||||
for (i = start, j = end - dim; i < end; i += dim) {
|
||||
sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
|
||||
j = i;
|
||||
}
|
||||
|
||||
// link points into circular doubly-linked list in the specified winding order
|
||||
if (clockwise === (sum > 0)) {
|
||||
for (i = start; i < end; i += dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
} else {
|
||||
for (i = end - dim; i >= start; i -= dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
}
|
||||
|
||||
return last;
|
||||
};
|
||||
|
||||
// eliminate colinear or duplicate points
|
||||
|
||||
Phaser.EarCut.filterPoints = function (start, end) {
|
||||
if (!start) return start;
|
||||
if (!end) end = start;
|
||||
|
||||
var p = start,
|
||||
again;
|
||||
do {
|
||||
again = false;
|
||||
|
||||
if (!p.steiner && (Phaser.EarCut.equals(p, p.next) || Phaser.EarCut.area(p.prev, p, p.next) === 0)) {
|
||||
Phaser.EarCut.removeNode(p);
|
||||
p = end = p.prev;
|
||||
if (p === p.next) return null;
|
||||
again = true;
|
||||
|
||||
} else {
|
||||
p = p.next;
|
||||
}
|
||||
} while (again || p !== end);
|
||||
|
||||
return end;
|
||||
};
|
||||
|
||||
// main ear slicing loop which triangulates a polygon (given as a linked list)
|
||||
|
||||
Phaser.EarCut.earcutLinked = function (ear, triangles, dim, minX, minY, size, pass) {
|
||||
if (!ear) return;
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
if (!pass && size) Phaser.EarCut.indexCurve(ear, minX, minY, size);
|
||||
|
||||
var stop = ear,
|
||||
prev, next;
|
||||
|
||||
// iterate through ears, slicing them one by one
|
||||
while (ear.prev !== ear.next) {
|
||||
prev = ear.prev;
|
||||
next = ear.next;
|
||||
|
||||
if (size ? Phaser.EarCut.isEarHashed(ear, minX, minY, size) : Phaser.EarCut.isEar(ear)) {
|
||||
// cut off the triangle
|
||||
triangles.push(prev.i / dim);
|
||||
triangles.push(ear.i / dim);
|
||||
triangles.push(next.i / dim);
|
||||
|
||||
Phaser.EarCut.removeNode(ear);
|
||||
|
||||
// skipping the next vertice leads to less sliver triangles
|
||||
ear = next.next;
|
||||
stop = next.next;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
ear = next;
|
||||
|
||||
// if we looped through the whole remaining polygon and can't find any more ears
|
||||
if (ear === stop) {
|
||||
// try filtering points and slicing again
|
||||
if (!pass) {
|
||||
Phaser.EarCut.earcutLinked(Phaser.EarCut.filterPoints(ear), triangles, dim, minX, minY, size, 1);
|
||||
|
||||
// if this didn't work, try curing all small self-intersections locally
|
||||
} else if (pass === 1) {
|
||||
ear = Phaser.EarCut.cureLocalIntersections(ear, triangles, dim);
|
||||
Phaser.EarCut.earcutLinked(ear, triangles, dim, minX, minY, size, 2);
|
||||
|
||||
// as a last resort, try splitting the remaining polygon into two
|
||||
} else if (pass === 2) {
|
||||
Phaser.EarCut.splitEarcut(ear, triangles, dim, minX, minY, size);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// check whether a polygon node forms a valid ear with adjacent nodes
|
||||
|
||||
Phaser.EarCut.isEar = function (ear) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// now make sure we don't have other points inside the potential ear
|
||||
var p = ear.next.next;
|
||||
|
||||
while (p !== ear.prev) {
|
||||
if (Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
Phaser.EarCut.isEarHashed = function (ear, minX, minY, size) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// triangle bbox; min & max are calculated like this for speed
|
||||
var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
|
||||
minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
|
||||
maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
|
||||
maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
|
||||
|
||||
// z-order range for the current triangle bbox;
|
||||
var minZ = Phaser.EarCut.zOrder(minTX, minTY, minX, minY, size),
|
||||
maxZ = Phaser.EarCut.zOrder(maxTX, maxTY, minX, minY, size);
|
||||
|
||||
// first look for points inside the triangle in increasing z-order
|
||||
var p = ear.nextZ;
|
||||
|
||||
while (p && p.z <= maxZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.nextZ;
|
||||
}
|
||||
|
||||
// then look for points in decreasing z-order
|
||||
p = ear.prevZ;
|
||||
|
||||
while (p && p.z >= minZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.prevZ;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// go through all polygon nodes and cure small local self-intersections
|
||||
|
||||
Phaser.EarCut.cureLocalIntersections = function (start, triangles, dim) {
|
||||
var p = start;
|
||||
do {
|
||||
var a = p.prev,
|
||||
b = p.next.next;
|
||||
|
||||
// a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2])
|
||||
if (Phaser.EarCut.intersects(a, p, p.next, b) && Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a)) {
|
||||
|
||||
triangles.push(a.i / dim);
|
||||
triangles.push(p.i / dim);
|
||||
triangles.push(b.i / dim);
|
||||
|
||||
// remove two nodes involved
|
||||
Phaser.EarCut.removeNode(p);
|
||||
Phaser.EarCut.removeNode(p.next);
|
||||
|
||||
p = start = b;
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
// try splitting polygon into two and triangulate them independently
|
||||
|
||||
Phaser.EarCut.splitEarcut = function (start, triangles, dim, minX, minY, size) {
|
||||
// look for a valid diagonal that divides the polygon into two
|
||||
var a = start;
|
||||
do {
|
||||
var b = a.next.next;
|
||||
while (b !== a.prev) {
|
||||
if (a.i !== b.i && Phaser.EarCut.isValidDiagonal(a, b)) {
|
||||
// split the polygon in two by the diagonal
|
||||
var c = Phaser.EarCut.splitPolygon(a, b);
|
||||
|
||||
// filter colinear points around the cuts
|
||||
a = Phaser.EarCut.filterPoints(a, a.next);
|
||||
c = Phaser.EarCut.filterPoints(c, c.next);
|
||||
|
||||
// run earcut on each half
|
||||
Phaser.EarCut.earcutLinked(a, triangles, dim, minX, minY, size);
|
||||
Phaser.EarCut.earcutLinked(c, triangles, dim, minX, minY, size);
|
||||
return;
|
||||
}
|
||||
b = b.next;
|
||||
}
|
||||
a = a.next;
|
||||
} while (a !== start);
|
||||
};
|
||||
|
||||
// link every hole into the outer loop, producing a single-ring polygon without holes
|
||||
|
||||
Phaser.EarCut.eliminateHoles = function (data, holeIndices, outerNode, dim) {
|
||||
var queue = [],
|
||||
i, len, start, end, list;
|
||||
|
||||
for (i = 0, len = holeIndices.length; i < len; i++) {
|
||||
start = holeIndices[i] * dim;
|
||||
end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
|
||||
list = Phaser.EarCut.linkedList(data, start, end, dim, false);
|
||||
if (list === list.next) list.steiner = true;
|
||||
queue.push(Phaser.EarCut.getLeftmost(list));
|
||||
}
|
||||
|
||||
queue.sort(compareX);
|
||||
|
||||
// process holes from left to right
|
||||
for (i = 0; i < queue.length; i++) {
|
||||
Phaser.EarCut.eliminateHole(queue[i], outerNode);
|
||||
outerNode = Phaser.EarCut.filterPoints(outerNode, outerNode.next);
|
||||
}
|
||||
|
||||
return outerNode;
|
||||
};
|
||||
|
||||
Phaser.EarCut.compareX = function (a, b) {
|
||||
return a.x - b.x;
|
||||
};
|
||||
|
||||
// find a bridge between vertices that connects hole with an outer ring and and link it
|
||||
|
||||
Phaser.EarCut.eliminateHole = function (hole, outerNode) {
|
||||
outerNode = Phaser.EarCut.findHoleBridge(hole, outerNode);
|
||||
if (outerNode) {
|
||||
var b = Phaser.EarCut.splitPolygon(outerNode, hole);
|
||||
Phaser.EarCut.filterPoints(b, b.next);
|
||||
}
|
||||
};
|
||||
|
||||
// David Eberly's algorithm for finding a bridge between hole and outer polygon
|
||||
|
||||
Phaser.EarCut.findHoleBridge = function (hole, outerNode) {
|
||||
var p = outerNode,
|
||||
hx = hole.x,
|
||||
hy = hole.y,
|
||||
qx = -Infinity,
|
||||
m;
|
||||
|
||||
// find a segment intersected by a ray from the hole's leftmost point to the left;
|
||||
// segment's endpoint with lesser x will be potential connection point
|
||||
do {
|
||||
if (hy <= p.y && hy >= p.next.y) {
|
||||
var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
|
||||
if (x <= hx && x > qx) {
|
||||
qx = x;
|
||||
m = p.x < p.next.x ? p : p.next;
|
||||
}
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== outerNode);
|
||||
|
||||
if (!m) return null;
|
||||
|
||||
if (hole.x === m.x) return m.prev; // hole touches outer segment; pick lower endpoint
|
||||
|
||||
// look for points inside the triangle of hole point, segment intersection and endpoint;
|
||||
// if there are no points found, we have a valid connection;
|
||||
// otherwise choose the point of the minimum angle with the ray as connection point
|
||||
|
||||
var stop = m,
|
||||
tanMin = Infinity,
|
||||
tan;
|
||||
|
||||
p = m.next;
|
||||
|
||||
while (p !== stop) {
|
||||
if (hx >= p.x && p.x >= m.x &&
|
||||
Phaser.EarCut.pointInTriangle(hy < m.y ? hx : qx, hy, m.x, m.y, hy < m.y ? qx : hx, hy, p.x, p.y)) {
|
||||
|
||||
tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
|
||||
|
||||
if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && Phaser.EarCut.locallyInside(p, hole)) {
|
||||
m = p;
|
||||
tanMin = tan;
|
||||
}
|
||||
}
|
||||
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return m;
|
||||
};
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
|
||||
Phaser.EarCut.indexCurve = function (start, minX, minY, size) {
|
||||
var p = start;
|
||||
do {
|
||||
if (p.z === null) p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size);
|
||||
p.prevZ = p.prev;
|
||||
p.nextZ = p.next;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
p.prevZ.nextZ = null;
|
||||
p.prevZ = null;
|
||||
|
||||
Phaser.EarCut.sortLinked(p);
|
||||
};
|
||||
|
||||
// Simon Tatham's linked list merge sort algorithm
|
||||
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
|
||||
|
||||
Phaser.EarCut.sortLinked = function (list) {
|
||||
var i, p, q, e, tail, numMerges, pSize, qSize,
|
||||
inSize = 1;
|
||||
|
||||
do {
|
||||
p = list;
|
||||
list = null;
|
||||
tail = null;
|
||||
numMerges = 0;
|
||||
|
||||
while (p) {
|
||||
numMerges++;
|
||||
q = p;
|
||||
pSize = 0;
|
||||
for (i = 0; i < inSize; i++) {
|
||||
pSize++;
|
||||
q = q.nextZ;
|
||||
if (!q) break;
|
||||
}
|
||||
|
||||
qSize = inSize;
|
||||
|
||||
while (pSize > 0 || (qSize > 0 && q)) {
|
||||
|
||||
if (pSize === 0) {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
} else if (qSize === 0 || !q) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else if (p.z <= q.z) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
}
|
||||
|
||||
if (tail) tail.nextZ = e;
|
||||
else list = e;
|
||||
|
||||
e.prevZ = tail;
|
||||
tail = e;
|
||||
}
|
||||
|
||||
p = q;
|
||||
}
|
||||
|
||||
tail.nextZ = null;
|
||||
inSize *= 2;
|
||||
|
||||
} while (numMerges > 1);
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
// z-order of a point given coords and size of the data bounding box
|
||||
|
||||
Phaser.EarCut.zOrder = function (x, y, minX, minY, size) {
|
||||
// coords are transformed into non-negative 15-bit integer range
|
||||
x = 32767 * (x - minX) / size;
|
||||
y = 32767 * (y - minY) / size;
|
||||
|
||||
x = (x | (x << 8)) & 0x00FF00FF;
|
||||
x = (x | (x << 4)) & 0x0F0F0F0F;
|
||||
x = (x | (x << 2)) & 0x33333333;
|
||||
x = (x | (x << 1)) & 0x55555555;
|
||||
|
||||
y = (y | (y << 8)) & 0x00FF00FF;
|
||||
y = (y | (y << 4)) & 0x0F0F0F0F;
|
||||
y = (y | (y << 2)) & 0x33333333;
|
||||
y = (y | (y << 1)) & 0x55555555;
|
||||
|
||||
return x | (y << 1);
|
||||
};
|
||||
|
||||
// find the leftmost node of a polygon ring
|
||||
|
||||
Phaser.EarCut.getLeftmost = function (start) {
|
||||
var p = start,
|
||||
leftmost = start;
|
||||
do {
|
||||
if (p.x < leftmost.x) leftmost = p;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return leftmost;
|
||||
};
|
||||
|
||||
// check if a point lies within a convex triangle
|
||||
|
||||
Phaser.EarCut.pointInTriangle = function (ax, ay, bx, by, cx, cy, px, py) {
|
||||
return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
|
||||
(ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
|
||||
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
|
||||
};
|
||||
|
||||
// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
|
||||
|
||||
Phaser.EarCut.isValidDiagonal = function (a, b) {
|
||||
return Phaser.EarCut.equals(a, b) || a.next.i !== b.i && a.prev.i !== b.i && !Phaser.EarCut.intersectsPolygon(a, b) &&
|
||||
Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a) && Phaser.EarCut.middleInside(a, b);
|
||||
};
|
||||
|
||||
// signed area of a triangle
|
||||
|
||||
Phaser.EarCut.area = function (p, q, r) {
|
||||
return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
|
||||
};
|
||||
|
||||
// check if two points are equal
|
||||
|
||||
Phaser.EarCut.equals = function (p1, p2) {
|
||||
return p1.x === p2.x && p1.y === p2.y;
|
||||
};
|
||||
|
||||
// check if two segments intersect
|
||||
|
||||
Phaser.EarCut.intersects = function (p1, q1, p2, q2) {
|
||||
return Phaser.EarCut.area(p1, q1, p2) > 0 !== Phaser.EarCut.area(p1, q1, q2) > 0 &&
|
||||
Phaser.EarCut.area(p2, q2, p1) > 0 !== Phaser.EarCut.area(p2, q2, q1) > 0;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal intersects any polygon segments
|
||||
|
||||
Phaser.EarCut.intersectsPolygon = function (a, b) {
|
||||
var p = a;
|
||||
do {
|
||||
if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
|
||||
Phaser.EarCut.intersects(p, p.next, a, b)) return true;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal is locally inside the polygon
|
||||
|
||||
Phaser.EarCut.locallyInside = function (a, b) {
|
||||
return Phaser.EarCut.area(a.prev, a, a.next) < 0 ?
|
||||
Phaser.EarCut.area(a, b, a.next) >= 0 && Phaser.EarCut.area(a, a.prev, b) >= 0 :
|
||||
Phaser.EarCut.area(a, b, a.prev) < 0 || Phaser.EarCut.area(a, a.next, b) < 0;
|
||||
};
|
||||
|
||||
// check if the middle point of a polygon diagonal is inside the polygon
|
||||
|
||||
Phaser.EarCut.middleInside = function (a, b) {
|
||||
var p = a,
|
||||
inside = false,
|
||||
px = (a.x + b.x) / 2,
|
||||
py = (a.y + b.y) / 2;
|
||||
do {
|
||||
if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
|
||||
inside = !inside;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return inside;
|
||||
};
|
||||
|
||||
// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
|
||||
// if one belongs to the outer ring and another to a hole, it merges it into a single ring
|
||||
|
||||
Phaser.EarCut.splitPolygon = function (a, b) {
|
||||
var a2 = new Phaser.EarCut.Node(a.i, a.x, a.y),
|
||||
b2 = new Phaser.EarCut.Node(b.i, b.x, b.y),
|
||||
an = a.next,
|
||||
bp = b.prev;
|
||||
|
||||
a.next = b;
|
||||
b.prev = a;
|
||||
|
||||
a2.next = an;
|
||||
an.prev = a2;
|
||||
|
||||
b2.next = a2;
|
||||
a2.prev = b2;
|
||||
|
||||
bp.next = b2;
|
||||
b2.prev = bp;
|
||||
|
||||
return b2;
|
||||
};
|
||||
|
||||
// create a node and optionally link it with previous one (in a circular doubly linked list)
|
||||
|
||||
Phaser.EarCut.insertNode = function (i, x, y, last) {
|
||||
var p = new Phaser.EarCut.Node(i, x, y);
|
||||
|
||||
if (!last) {
|
||||
p.prev = p;
|
||||
p.next = p;
|
||||
|
||||
} else {
|
||||
p.next = last.next;
|
||||
p.prev = last;
|
||||
last.next.prev = p;
|
||||
last.next = p;
|
||||
}
|
||||
return p;
|
||||
};
|
||||
|
||||
Phaser.EarCut.removeNode = function (p) {
|
||||
p.next.prev = p.prev;
|
||||
p.prev.next = p.next;
|
||||
|
||||
if (p.prevZ) p.prevZ.nextZ = p.nextZ;
|
||||
if (p.nextZ) p.nextZ.prevZ = p.prevZ;
|
||||
};
|
||||
|
||||
Phaser.EarCut.Node = function (i, x, y) {
|
||||
// vertice index in coordinates array
|
||||
this.i = i;
|
||||
|
||||
// vertex coordinates
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
||||
// previous and next vertice nodes in a polygon ring
|
||||
this.prev = null;
|
||||
this.next = null;
|
||||
|
||||
// z-order curve value
|
||||
this.z = null;
|
||||
|
||||
// previous and next nodes in z-order
|
||||
this.prevZ = null;
|
||||
this.nextZ = null;
|
||||
|
||||
// indicates whether this is a steiner point
|
||||
this.steiner = false;
|
||||
};
|
||||
|
||||
/* jshint ignore:end */
|
||||
|
||||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
@ -48050,7 +48685,7 @@ Phaser.RequestAnimationFrame = function(game, forceSetTimeOut) {
|
|||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
|
||||
{
|
||||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55157,8 +55792,9 @@ Phaser.Animation.prototype = {
|
|||
|
||||
if (frameIndex)
|
||||
{
|
||||
// Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update.
|
||||
this._frameIndex = frameIndex - 1;
|
||||
// Set the current frame index to the found index. Subtract a directional offset so that it animates to the desired frame on update.
|
||||
var directionalOffset = this.isReversed ? -1 : 1;
|
||||
this._frameIndex = frameIndex - directionalOffset;
|
||||
|
||||
// Make the animation update at next update
|
||||
this._timeNextFrame = this.game.time.time;
|
||||
|
@ -56260,6 +56896,10 @@ Phaser.AnimationParser = {
|
|||
*/
|
||||
spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) {
|
||||
|
||||
if (frameMax === undefined) { frameMax = -1; }
|
||||
if (margin === undefined) { margin = 0; }
|
||||
if (spacing === undefined) { spacing = 0; }
|
||||
|
||||
var img = key;
|
||||
|
||||
if (typeof key === 'string')
|
||||
|
@ -56839,7 +57479,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData(),
|
||||
fileFormat: extension
|
||||
|
@ -56892,7 +57532,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData()
|
||||
};
|
||||
|
@ -57105,7 +57745,7 @@ Phaser.Cache.prototype = {
|
|||
url: url,
|
||||
data: data,
|
||||
font: null,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (xSpacing === undefined) { xSpacing = 0; }
|
||||
|
@ -57287,7 +57927,7 @@ Phaser.Cache.prototype = {
|
|||
frameHeight: frameHeight,
|
||||
margin: margin,
|
||||
spacing: spacing,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frameData: Phaser.AnimationParser.spriteSheet(this.game, data, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames)
|
||||
};
|
||||
|
||||
|
@ -57313,7 +57953,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||
|
@ -78167,7 +78807,7 @@ Phaser.TilemapLayer = function (game, tilemap, index, width, height) {
|
|||
*/
|
||||
this.context = this.canvas.getContext('2d');
|
||||
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas)));
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas, null, this.game.resolution)));
|
||||
|
||||
/**
|
||||
* The const type of this object.
|
||||
|
@ -80610,11 +81250,8 @@ Phaser.Particles.prototype = {
|
|||
* @return {Phaser.Emitter} The emitter that was added.
|
||||
*/
|
||||
add: function (emitter) {
|
||||
|
||||
this.emitters[emitter.name] = emitter;
|
||||
|
||||
this.emitters[emitter.id] = emitter;
|
||||
return emitter;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -80623,9 +81260,7 @@ Phaser.Particles.prototype = {
|
|||
* @param {Phaser.Emitter} emitter - The emitter to remove.
|
||||
*/
|
||||
remove: function (emitter) {
|
||||
|
||||
delete this.emitters[emitter.name];
|
||||
|
||||
delete this.emitters[emitter.id];
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -80634,7 +81269,6 @@ Phaser.Particles.prototype = {
|
|||
* @protected
|
||||
*/
|
||||
update: function () {
|
||||
|
||||
for (var key in this.emitters)
|
||||
{
|
||||
if (this.emitters[key].exists)
|
||||
|
@ -80671,7 +81305,7 @@ Phaser.Particles.Arcade = {};
|
|||
* Emitter is a lightweight particle emitter that uses Arcade Physics.
|
||||
* It can be used for one-time explosions or for continuous effects like rain and fire.
|
||||
* All it really does is launch Particle objects out at set intervals, and fixes their positions and velocities accordingly.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Particles.Arcade.Emitter
|
||||
* @constructor
|
||||
* @extends Phaser.Group
|
||||
|
@ -80690,10 +81324,16 @@ Phaser.Particles.Arcade.Emitter = function (game, x, y, maxParticles) {
|
|||
|
||||
Phaser.Group.call(this, game);
|
||||
|
||||
/**
|
||||
* @property {number} _id - Internal ID for this emitter -- only used by the Particle System in most cases
|
||||
* @private
|
||||
*/
|
||||
this._id = this.game.particles.ID++;
|
||||
|
||||
/**
|
||||
* @property {string} name - A handy string name for this emitter. Can be set to anything.
|
||||
*/
|
||||
this.name = 'emitter' + this.game.particles.ID++;
|
||||
this.name = 'emitter' + this.id;
|
||||
|
||||
/**
|
||||
* @property {number} type - Internal Phaser Type value.
|
||||
|
@ -80928,7 +81568,7 @@ Phaser.Particles.Arcade.Emitter.prototype.constructor = Phaser.Particles.Arcade.
|
|||
|
||||
/**
|
||||
* Called automatically by the game loop, decides when to launch particles and when to "die".
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#update
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.update = function () {
|
||||
|
@ -81100,7 +81740,7 @@ Phaser.Particles.Arcade.Emitter.prototype.revive = function () {
|
|||
|
||||
/**
|
||||
* Call this function to emit the given quantity of particles at all once (an explosion)
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#explode
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [quantity=0] - How many particles to launch.
|
||||
|
@ -81122,7 +81762,7 @@ Phaser.Particles.Arcade.Emitter.prototype.explode = function (lifespan, quantity
|
|||
* Each time the flow is run the quantity number of particles will be emitted together.
|
||||
* If you set the total to be 20 and quantity to be 5 then flow will emit 4 times in total (4 x 5 = 20 total)
|
||||
* If you set the total to be -1 then no quantity cap is used and it will keep emitting.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#flow
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [frequency=250] - Frequency is how often to emit the particles, given in ms.
|
||||
|
@ -81165,7 +81805,7 @@ Phaser.Particles.Arcade.Emitter.prototype.flow = function (lifespan, frequency,
|
|||
|
||||
/**
|
||||
* Call this function to start emitting particles.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#start
|
||||
* @param {boolean} [explode=true] - Whether the particles should all burst out at once (true) or at the frequency given (false).
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
|
@ -81343,7 +81983,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function (x, y, key, fr
|
|||
|
||||
/**
|
||||
* Destroys this Emitter, all associated child Particles and then removes itself from the Particle Manager.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#destroy
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
||||
|
@ -81356,7 +81996,7 @@ Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
|||
|
||||
/**
|
||||
* A more compact way of setting the width and height of the emitter.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#setSize
|
||||
* @param {number} width - The desired width of the emitter (particles are spawned randomly within these dimensions).
|
||||
* @param {number} height - The desired height of the emitter.
|
||||
|
@ -81547,6 +82187,16 @@ Phaser.Particles.Arcade.Emitter.prototype.at = function (object) {
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#id
|
||||
* @property {number} id - Gets the internal ID that represents this emitter.
|
||||
*/
|
||||
Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "id", {
|
||||
get: function () {
|
||||
return this._id;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#width
|
||||
* @property {number} width - Gets or sets the width of the Emitter. This is the region in which a particle can be emitted.
|
||||
|
@ -83454,12 +84104,12 @@ Phaser.Video = function (game, key, url) {
|
|||
*/
|
||||
if (this.video && !url)
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source);
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:48:46
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:30
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -6900,8 +6900,9 @@ PIXI.CanvasRenderer.prototype.mapBlendModes = function () {
|
|||
* @constructor
|
||||
* @param source {String|Canvas} the source object (image or canvas)
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
*/
|
||||
PIXI.BaseTexture = function(source, scaleMode)
|
||||
PIXI.BaseTexture = function(source, scaleMode, resolution)
|
||||
{
|
||||
/**
|
||||
* The Resolution of the texture.
|
||||
|
@ -6909,7 +6910,7 @@ PIXI.BaseTexture = function(source, scaleMode)
|
|||
* @property resolution
|
||||
* @type Number
|
||||
*/
|
||||
this.resolution = 1;
|
||||
this.resolution = resolution || 1;
|
||||
|
||||
/**
|
||||
* [read-only] The width of the base texture set when the image has loaded
|
||||
|
@ -7125,9 +7126,10 @@ PIXI.BaseTexture.prototype.unloadFromGPU = function()
|
|||
* @method fromCanvas
|
||||
* @param canvas {Canvas} The canvas element source of the texture
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
* @return {BaseTexture}
|
||||
*/
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode, resolution)
|
||||
{
|
||||
if (canvas.width === 0)
|
||||
{
|
||||
|
@ -7139,7 +7141,9 @@ PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
|||
canvas.height = 1;
|
||||
}
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode);
|
||||
resolution = resolution || 1;
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode, resolution);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -7502,7 +7506,7 @@ var Phaser = Phaser || { // jshint ignore:line
|
|||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
VERSION: '2.7.0',
|
||||
VERSION: '2.7.1',
|
||||
|
||||
/**
|
||||
* An array of Phaser game instances.
|
||||
|
@ -34675,7 +34679,7 @@ Phaser.RequestAnimationFrame = function(game, forceSetTimeOut) {
|
|||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
|
||||
{
|
||||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -39229,8 +39233,9 @@ Phaser.Animation.prototype = {
|
|||
|
||||
if (frameIndex)
|
||||
{
|
||||
// Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update.
|
||||
this._frameIndex = frameIndex - 1;
|
||||
// Set the current frame index to the found index. Subtract a directional offset so that it animates to the desired frame on update.
|
||||
var directionalOffset = this.isReversed ? -1 : 1;
|
||||
this._frameIndex = frameIndex - directionalOffset;
|
||||
|
||||
// Make the animation update at next update
|
||||
this._timeNextFrame = this.game.time.time;
|
||||
|
@ -40332,6 +40337,10 @@ Phaser.AnimationParser = {
|
|||
*/
|
||||
spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) {
|
||||
|
||||
if (frameMax === undefined) { frameMax = -1; }
|
||||
if (margin === undefined) { margin = 0; }
|
||||
if (spacing === undefined) { spacing = 0; }
|
||||
|
||||
var img = key;
|
||||
|
||||
if (typeof key === 'string')
|
||||
|
@ -40911,7 +40920,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData(),
|
||||
fileFormat: extension
|
||||
|
@ -40964,7 +40973,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData()
|
||||
};
|
||||
|
@ -41177,7 +41186,7 @@ Phaser.Cache.prototype = {
|
|||
url: url,
|
||||
data: data,
|
||||
font: null,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (xSpacing === undefined) { xSpacing = 0; }
|
||||
|
@ -41359,7 +41368,7 @@ Phaser.Cache.prototype = {
|
|||
frameHeight: frameHeight,
|
||||
margin: margin,
|
||||
spacing: spacing,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frameData: Phaser.AnimationParser.spriteSheet(this.game, data, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames)
|
||||
};
|
||||
|
||||
|
@ -41385,7 +41394,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||
|
@ -52681,11 +52690,8 @@ Phaser.Particles.prototype = {
|
|||
* @return {Phaser.Emitter} The emitter that was added.
|
||||
*/
|
||||
add: function (emitter) {
|
||||
|
||||
this.emitters[emitter.name] = emitter;
|
||||
|
||||
this.emitters[emitter.id] = emitter;
|
||||
return emitter;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -52694,9 +52700,7 @@ Phaser.Particles.prototype = {
|
|||
* @param {Phaser.Emitter} emitter - The emitter to remove.
|
||||
*/
|
||||
remove: function (emitter) {
|
||||
|
||||
delete this.emitters[emitter.name];
|
||||
|
||||
delete this.emitters[emitter.id];
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -52705,7 +52709,6 @@ Phaser.Particles.prototype = {
|
|||
* @protected
|
||||
*/
|
||||
update: function () {
|
||||
|
||||
for (var key in this.emitters)
|
||||
{
|
||||
if (this.emitters[key].exists)
|
||||
|
|
File diff suppressed because one or more lines are too long
22
v2-community/build/custom/phaser-minimum.min.js
vendored
22
v2-community/build/custom/phaser-minimum.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:48:41
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:27
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -6900,8 +6900,9 @@ PIXI.CanvasRenderer.prototype.mapBlendModes = function () {
|
|||
* @constructor
|
||||
* @param source {String|Canvas} the source object (image or canvas)
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
*/
|
||||
PIXI.BaseTexture = function(source, scaleMode)
|
||||
PIXI.BaseTexture = function(source, scaleMode, resolution)
|
||||
{
|
||||
/**
|
||||
* The Resolution of the texture.
|
||||
|
@ -6909,7 +6910,7 @@ PIXI.BaseTexture = function(source, scaleMode)
|
|||
* @property resolution
|
||||
* @type Number
|
||||
*/
|
||||
this.resolution = 1;
|
||||
this.resolution = resolution || 1;
|
||||
|
||||
/**
|
||||
* [read-only] The width of the base texture set when the image has loaded
|
||||
|
@ -7125,9 +7126,10 @@ PIXI.BaseTexture.prototype.unloadFromGPU = function()
|
|||
* @method fromCanvas
|
||||
* @param canvas {Canvas} The canvas element source of the texture
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
* @return {BaseTexture}
|
||||
*/
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode, resolution)
|
||||
{
|
||||
if (canvas.width === 0)
|
||||
{
|
||||
|
@ -7139,7 +7141,9 @@ PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
|||
canvas.height = 1;
|
||||
}
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode);
|
||||
resolution = resolution || 1;
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode, resolution);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -7502,7 +7506,7 @@ var Phaser = Phaser || { // jshint ignore:line
|
|||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
VERSION: '2.7.0',
|
||||
VERSION: '2.7.1',
|
||||
|
||||
/**
|
||||
* An array of Phaser game instances.
|
||||
|
@ -28888,7 +28892,7 @@ Phaser.SinglePad.prototype.constructor = Phaser.SinglePad;
|
|||
|
||||
/**
|
||||
* If you need more fine-grained control over the handling of specific keys you can create and use Phaser.Key objects.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Key
|
||||
* @constructor
|
||||
* @param {Phaser.Game} game - Current game instance.
|
||||
|
@ -29012,7 +29016,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#update
|
||||
* @protected
|
||||
*/
|
||||
|
@ -29035,7 +29039,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyDown
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -29072,7 +29076,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyUp
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -29135,7 +29139,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#downDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just pressed. Given in ms.
|
||||
* @return {boolean} True if the key was pressed down within the given duration.
|
||||
|
@ -29151,7 +29155,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#upDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just released. Given in ms.
|
||||
* @return {boolean} True if the key was released within the given duration.
|
||||
|
@ -29171,7 +29175,8 @@ Phaser.Key.prototype = {
|
|||
* When you check this value it will return `true` if the Key is down, otherwise `false`.
|
||||
* You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.
|
||||
* This allows you to use it in situations where you want to check if this key is down without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justDown
|
||||
* @property {boolean} justDown
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -29193,7 +29198,8 @@ Object.defineProperty(Phaser.Key.prototype, "justDown", {
|
|||
* When you check this value it will return `true` if the Key is up, otherwise `false`.
|
||||
* You can only call justUp once per key release. It will only return `true` once, until the Key is pressed down and released again.
|
||||
* This allows you to use it in situations where you want to check if this key is up without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justUp
|
||||
* @property {boolean} justUp
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -29213,7 +29219,7 @@ Object.defineProperty(Phaser.Key.prototype, "justUp", {
|
|||
/**
|
||||
* An enabled key processes its update and dispatches events.
|
||||
* A key can be disabled momentarily at runtime instead of deleting it.
|
||||
*
|
||||
* @name Phaser.Key#enabled
|
||||
* @property {boolean} enabled
|
||||
* @memberof Phaser.Key
|
||||
* @default true
|
||||
|
@ -35225,7 +35231,7 @@ Phaser.BitmapData = function (game, key, width, height, skipPool) {
|
|||
* @property {PIXI.BaseTexture} baseTexture - The PIXI.BaseTexture.
|
||||
* @default
|
||||
*/
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas, null, this.game.resolution);
|
||||
|
||||
/**
|
||||
* @property {PIXI.Texture} texture - The PIXI.Texture.
|
||||
|
@ -37547,6 +37553,635 @@ Phaser.BitmapData.getTransform = function (translateX, translateY, scaleX, scale
|
|||
|
||||
Phaser.BitmapData.prototype.constructor = Phaser.BitmapData;
|
||||
|
||||
/* jshint ignore:start */
|
||||
|
||||
/*
|
||||
Copyright (c) 2016, Mapbox
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class EarCut
|
||||
*/
|
||||
Phaser.EarCut = {};
|
||||
|
||||
Phaser.EarCut.Triangulate = function (data, holeIndices, dim) {
|
||||
|
||||
dim = dim || 2;
|
||||
|
||||
var hasHoles = holeIndices && holeIndices.length,
|
||||
outerLen = hasHoles ? holeIndices[0] * dim : data.length,
|
||||
outerNode = Phaser.EarCut.linkedList(data, 0, outerLen, dim, true),
|
||||
triangles = [];
|
||||
|
||||
if (!outerNode) return triangles;
|
||||
|
||||
var minX, minY, maxX, maxY, x, y, size;
|
||||
|
||||
if (hasHoles) outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim);
|
||||
|
||||
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
|
||||
if (data.length > 80 * dim) {
|
||||
minX = maxX = data[0];
|
||||
minY = maxY = data[1];
|
||||
|
||||
for (var i = dim; i < outerLen; i += dim) {
|
||||
x = data[i];
|
||||
y = data[i + 1];
|
||||
if (x < minX) minX = x;
|
||||
if (y < minY) minY = y;
|
||||
if (x > maxX) maxX = x;
|
||||
if (y > maxY) maxY = y;
|
||||
}
|
||||
|
||||
// minX, minY and size are later used to transform coords into integers for z-order calculation
|
||||
size = Math.max(maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
Phaser.EarCut.earcutLinked(outerNode, triangles, dim, minX, minY, size);
|
||||
|
||||
return triangles;
|
||||
};
|
||||
|
||||
// create a circular doubly linked list from polygon points in the specified winding order
|
||||
|
||||
Phaser.EarCut.linkedList = function (data, start, end, dim, clockwise) {
|
||||
var sum = 0,
|
||||
i, j, last;
|
||||
|
||||
// calculate original winding order of a polygon ring
|
||||
for (i = start, j = end - dim; i < end; i += dim) {
|
||||
sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
|
||||
j = i;
|
||||
}
|
||||
|
||||
// link points into circular doubly-linked list in the specified winding order
|
||||
if (clockwise === (sum > 0)) {
|
||||
for (i = start; i < end; i += dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
} else {
|
||||
for (i = end - dim; i >= start; i -= dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
}
|
||||
|
||||
return last;
|
||||
};
|
||||
|
||||
// eliminate colinear or duplicate points
|
||||
|
||||
Phaser.EarCut.filterPoints = function (start, end) {
|
||||
if (!start) return start;
|
||||
if (!end) end = start;
|
||||
|
||||
var p = start,
|
||||
again;
|
||||
do {
|
||||
again = false;
|
||||
|
||||
if (!p.steiner && (Phaser.EarCut.equals(p, p.next) || Phaser.EarCut.area(p.prev, p, p.next) === 0)) {
|
||||
Phaser.EarCut.removeNode(p);
|
||||
p = end = p.prev;
|
||||
if (p === p.next) return null;
|
||||
again = true;
|
||||
|
||||
} else {
|
||||
p = p.next;
|
||||
}
|
||||
} while (again || p !== end);
|
||||
|
||||
return end;
|
||||
};
|
||||
|
||||
// main ear slicing loop which triangulates a polygon (given as a linked list)
|
||||
|
||||
Phaser.EarCut.earcutLinked = function (ear, triangles, dim, minX, minY, size, pass) {
|
||||
if (!ear) return;
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
if (!pass && size) Phaser.EarCut.indexCurve(ear, minX, minY, size);
|
||||
|
||||
var stop = ear,
|
||||
prev, next;
|
||||
|
||||
// iterate through ears, slicing them one by one
|
||||
while (ear.prev !== ear.next) {
|
||||
prev = ear.prev;
|
||||
next = ear.next;
|
||||
|
||||
if (size ? Phaser.EarCut.isEarHashed(ear, minX, minY, size) : Phaser.EarCut.isEar(ear)) {
|
||||
// cut off the triangle
|
||||
triangles.push(prev.i / dim);
|
||||
triangles.push(ear.i / dim);
|
||||
triangles.push(next.i / dim);
|
||||
|
||||
Phaser.EarCut.removeNode(ear);
|
||||
|
||||
// skipping the next vertice leads to less sliver triangles
|
||||
ear = next.next;
|
||||
stop = next.next;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
ear = next;
|
||||
|
||||
// if we looped through the whole remaining polygon and can't find any more ears
|
||||
if (ear === stop) {
|
||||
// try filtering points and slicing again
|
||||
if (!pass) {
|
||||
Phaser.EarCut.earcutLinked(Phaser.EarCut.filterPoints(ear), triangles, dim, minX, minY, size, 1);
|
||||
|
||||
// if this didn't work, try curing all small self-intersections locally
|
||||
} else if (pass === 1) {
|
||||
ear = Phaser.EarCut.cureLocalIntersections(ear, triangles, dim);
|
||||
Phaser.EarCut.earcutLinked(ear, triangles, dim, minX, minY, size, 2);
|
||||
|
||||
// as a last resort, try splitting the remaining polygon into two
|
||||
} else if (pass === 2) {
|
||||
Phaser.EarCut.splitEarcut(ear, triangles, dim, minX, minY, size);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// check whether a polygon node forms a valid ear with adjacent nodes
|
||||
|
||||
Phaser.EarCut.isEar = function (ear) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// now make sure we don't have other points inside the potential ear
|
||||
var p = ear.next.next;
|
||||
|
||||
while (p !== ear.prev) {
|
||||
if (Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
Phaser.EarCut.isEarHashed = function (ear, minX, minY, size) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// triangle bbox; min & max are calculated like this for speed
|
||||
var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
|
||||
minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
|
||||
maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
|
||||
maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
|
||||
|
||||
// z-order range for the current triangle bbox;
|
||||
var minZ = Phaser.EarCut.zOrder(minTX, minTY, minX, minY, size),
|
||||
maxZ = Phaser.EarCut.zOrder(maxTX, maxTY, minX, minY, size);
|
||||
|
||||
// first look for points inside the triangle in increasing z-order
|
||||
var p = ear.nextZ;
|
||||
|
||||
while (p && p.z <= maxZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.nextZ;
|
||||
}
|
||||
|
||||
// then look for points in decreasing z-order
|
||||
p = ear.prevZ;
|
||||
|
||||
while (p && p.z >= minZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.prevZ;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// go through all polygon nodes and cure small local self-intersections
|
||||
|
||||
Phaser.EarCut.cureLocalIntersections = function (start, triangles, dim) {
|
||||
var p = start;
|
||||
do {
|
||||
var a = p.prev,
|
||||
b = p.next.next;
|
||||
|
||||
// a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2])
|
||||
if (Phaser.EarCut.intersects(a, p, p.next, b) && Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a)) {
|
||||
|
||||
triangles.push(a.i / dim);
|
||||
triangles.push(p.i / dim);
|
||||
triangles.push(b.i / dim);
|
||||
|
||||
// remove two nodes involved
|
||||
Phaser.EarCut.removeNode(p);
|
||||
Phaser.EarCut.removeNode(p.next);
|
||||
|
||||
p = start = b;
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
// try splitting polygon into two and triangulate them independently
|
||||
|
||||
Phaser.EarCut.splitEarcut = function (start, triangles, dim, minX, minY, size) {
|
||||
// look for a valid diagonal that divides the polygon into two
|
||||
var a = start;
|
||||
do {
|
||||
var b = a.next.next;
|
||||
while (b !== a.prev) {
|
||||
if (a.i !== b.i && Phaser.EarCut.isValidDiagonal(a, b)) {
|
||||
// split the polygon in two by the diagonal
|
||||
var c = Phaser.EarCut.splitPolygon(a, b);
|
||||
|
||||
// filter colinear points around the cuts
|
||||
a = Phaser.EarCut.filterPoints(a, a.next);
|
||||
c = Phaser.EarCut.filterPoints(c, c.next);
|
||||
|
||||
// run earcut on each half
|
||||
Phaser.EarCut.earcutLinked(a, triangles, dim, minX, minY, size);
|
||||
Phaser.EarCut.earcutLinked(c, triangles, dim, minX, minY, size);
|
||||
return;
|
||||
}
|
||||
b = b.next;
|
||||
}
|
||||
a = a.next;
|
||||
} while (a !== start);
|
||||
};
|
||||
|
||||
// link every hole into the outer loop, producing a single-ring polygon without holes
|
||||
|
||||
Phaser.EarCut.eliminateHoles = function (data, holeIndices, outerNode, dim) {
|
||||
var queue = [],
|
||||
i, len, start, end, list;
|
||||
|
||||
for (i = 0, len = holeIndices.length; i < len; i++) {
|
||||
start = holeIndices[i] * dim;
|
||||
end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
|
||||
list = Phaser.EarCut.linkedList(data, start, end, dim, false);
|
||||
if (list === list.next) list.steiner = true;
|
||||
queue.push(Phaser.EarCut.getLeftmost(list));
|
||||
}
|
||||
|
||||
queue.sort(compareX);
|
||||
|
||||
// process holes from left to right
|
||||
for (i = 0; i < queue.length; i++) {
|
||||
Phaser.EarCut.eliminateHole(queue[i], outerNode);
|
||||
outerNode = Phaser.EarCut.filterPoints(outerNode, outerNode.next);
|
||||
}
|
||||
|
||||
return outerNode;
|
||||
};
|
||||
|
||||
Phaser.EarCut.compareX = function (a, b) {
|
||||
return a.x - b.x;
|
||||
};
|
||||
|
||||
// find a bridge between vertices that connects hole with an outer ring and and link it
|
||||
|
||||
Phaser.EarCut.eliminateHole = function (hole, outerNode) {
|
||||
outerNode = Phaser.EarCut.findHoleBridge(hole, outerNode);
|
||||
if (outerNode) {
|
||||
var b = Phaser.EarCut.splitPolygon(outerNode, hole);
|
||||
Phaser.EarCut.filterPoints(b, b.next);
|
||||
}
|
||||
};
|
||||
|
||||
// David Eberly's algorithm for finding a bridge between hole and outer polygon
|
||||
|
||||
Phaser.EarCut.findHoleBridge = function (hole, outerNode) {
|
||||
var p = outerNode,
|
||||
hx = hole.x,
|
||||
hy = hole.y,
|
||||
qx = -Infinity,
|
||||
m;
|
||||
|
||||
// find a segment intersected by a ray from the hole's leftmost point to the left;
|
||||
// segment's endpoint with lesser x will be potential connection point
|
||||
do {
|
||||
if (hy <= p.y && hy >= p.next.y) {
|
||||
var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
|
||||
if (x <= hx && x > qx) {
|
||||
qx = x;
|
||||
m = p.x < p.next.x ? p : p.next;
|
||||
}
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== outerNode);
|
||||
|
||||
if (!m) return null;
|
||||
|
||||
if (hole.x === m.x) return m.prev; // hole touches outer segment; pick lower endpoint
|
||||
|
||||
// look for points inside the triangle of hole point, segment intersection and endpoint;
|
||||
// if there are no points found, we have a valid connection;
|
||||
// otherwise choose the point of the minimum angle with the ray as connection point
|
||||
|
||||
var stop = m,
|
||||
tanMin = Infinity,
|
||||
tan;
|
||||
|
||||
p = m.next;
|
||||
|
||||
while (p !== stop) {
|
||||
if (hx >= p.x && p.x >= m.x &&
|
||||
Phaser.EarCut.pointInTriangle(hy < m.y ? hx : qx, hy, m.x, m.y, hy < m.y ? qx : hx, hy, p.x, p.y)) {
|
||||
|
||||
tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
|
||||
|
||||
if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && Phaser.EarCut.locallyInside(p, hole)) {
|
||||
m = p;
|
||||
tanMin = tan;
|
||||
}
|
||||
}
|
||||
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return m;
|
||||
};
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
|
||||
Phaser.EarCut.indexCurve = function (start, minX, minY, size) {
|
||||
var p = start;
|
||||
do {
|
||||
if (p.z === null) p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size);
|
||||
p.prevZ = p.prev;
|
||||
p.nextZ = p.next;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
p.prevZ.nextZ = null;
|
||||
p.prevZ = null;
|
||||
|
||||
Phaser.EarCut.sortLinked(p);
|
||||
};
|
||||
|
||||
// Simon Tatham's linked list merge sort algorithm
|
||||
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
|
||||
|
||||
Phaser.EarCut.sortLinked = function (list) {
|
||||
var i, p, q, e, tail, numMerges, pSize, qSize,
|
||||
inSize = 1;
|
||||
|
||||
do {
|
||||
p = list;
|
||||
list = null;
|
||||
tail = null;
|
||||
numMerges = 0;
|
||||
|
||||
while (p) {
|
||||
numMerges++;
|
||||
q = p;
|
||||
pSize = 0;
|
||||
for (i = 0; i < inSize; i++) {
|
||||
pSize++;
|
||||
q = q.nextZ;
|
||||
if (!q) break;
|
||||
}
|
||||
|
||||
qSize = inSize;
|
||||
|
||||
while (pSize > 0 || (qSize > 0 && q)) {
|
||||
|
||||
if (pSize === 0) {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
} else if (qSize === 0 || !q) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else if (p.z <= q.z) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
}
|
||||
|
||||
if (tail) tail.nextZ = e;
|
||||
else list = e;
|
||||
|
||||
e.prevZ = tail;
|
||||
tail = e;
|
||||
}
|
||||
|
||||
p = q;
|
||||
}
|
||||
|
||||
tail.nextZ = null;
|
||||
inSize *= 2;
|
||||
|
||||
} while (numMerges > 1);
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
// z-order of a point given coords and size of the data bounding box
|
||||
|
||||
Phaser.EarCut.zOrder = function (x, y, minX, minY, size) {
|
||||
// coords are transformed into non-negative 15-bit integer range
|
||||
x = 32767 * (x - minX) / size;
|
||||
y = 32767 * (y - minY) / size;
|
||||
|
||||
x = (x | (x << 8)) & 0x00FF00FF;
|
||||
x = (x | (x << 4)) & 0x0F0F0F0F;
|
||||
x = (x | (x << 2)) & 0x33333333;
|
||||
x = (x | (x << 1)) & 0x55555555;
|
||||
|
||||
y = (y | (y << 8)) & 0x00FF00FF;
|
||||
y = (y | (y << 4)) & 0x0F0F0F0F;
|
||||
y = (y | (y << 2)) & 0x33333333;
|
||||
y = (y | (y << 1)) & 0x55555555;
|
||||
|
||||
return x | (y << 1);
|
||||
};
|
||||
|
||||
// find the leftmost node of a polygon ring
|
||||
|
||||
Phaser.EarCut.getLeftmost = function (start) {
|
||||
var p = start,
|
||||
leftmost = start;
|
||||
do {
|
||||
if (p.x < leftmost.x) leftmost = p;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return leftmost;
|
||||
};
|
||||
|
||||
// check if a point lies within a convex triangle
|
||||
|
||||
Phaser.EarCut.pointInTriangle = function (ax, ay, bx, by, cx, cy, px, py) {
|
||||
return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
|
||||
(ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
|
||||
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
|
||||
};
|
||||
|
||||
// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
|
||||
|
||||
Phaser.EarCut.isValidDiagonal = function (a, b) {
|
||||
return Phaser.EarCut.equals(a, b) || a.next.i !== b.i && a.prev.i !== b.i && !Phaser.EarCut.intersectsPolygon(a, b) &&
|
||||
Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a) && Phaser.EarCut.middleInside(a, b);
|
||||
};
|
||||
|
||||
// signed area of a triangle
|
||||
|
||||
Phaser.EarCut.area = function (p, q, r) {
|
||||
return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
|
||||
};
|
||||
|
||||
// check if two points are equal
|
||||
|
||||
Phaser.EarCut.equals = function (p1, p2) {
|
||||
return p1.x === p2.x && p1.y === p2.y;
|
||||
};
|
||||
|
||||
// check if two segments intersect
|
||||
|
||||
Phaser.EarCut.intersects = function (p1, q1, p2, q2) {
|
||||
return Phaser.EarCut.area(p1, q1, p2) > 0 !== Phaser.EarCut.area(p1, q1, q2) > 0 &&
|
||||
Phaser.EarCut.area(p2, q2, p1) > 0 !== Phaser.EarCut.area(p2, q2, q1) > 0;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal intersects any polygon segments
|
||||
|
||||
Phaser.EarCut.intersectsPolygon = function (a, b) {
|
||||
var p = a;
|
||||
do {
|
||||
if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
|
||||
Phaser.EarCut.intersects(p, p.next, a, b)) return true;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal is locally inside the polygon
|
||||
|
||||
Phaser.EarCut.locallyInside = function (a, b) {
|
||||
return Phaser.EarCut.area(a.prev, a, a.next) < 0 ?
|
||||
Phaser.EarCut.area(a, b, a.next) >= 0 && Phaser.EarCut.area(a, a.prev, b) >= 0 :
|
||||
Phaser.EarCut.area(a, b, a.prev) < 0 || Phaser.EarCut.area(a, a.next, b) < 0;
|
||||
};
|
||||
|
||||
// check if the middle point of a polygon diagonal is inside the polygon
|
||||
|
||||
Phaser.EarCut.middleInside = function (a, b) {
|
||||
var p = a,
|
||||
inside = false,
|
||||
px = (a.x + b.x) / 2,
|
||||
py = (a.y + b.y) / 2;
|
||||
do {
|
||||
if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
|
||||
inside = !inside;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return inside;
|
||||
};
|
||||
|
||||
// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
|
||||
// if one belongs to the outer ring and another to a hole, it merges it into a single ring
|
||||
|
||||
Phaser.EarCut.splitPolygon = function (a, b) {
|
||||
var a2 = new Phaser.EarCut.Node(a.i, a.x, a.y),
|
||||
b2 = new Phaser.EarCut.Node(b.i, b.x, b.y),
|
||||
an = a.next,
|
||||
bp = b.prev;
|
||||
|
||||
a.next = b;
|
||||
b.prev = a;
|
||||
|
||||
a2.next = an;
|
||||
an.prev = a2;
|
||||
|
||||
b2.next = a2;
|
||||
a2.prev = b2;
|
||||
|
||||
bp.next = b2;
|
||||
b2.prev = bp;
|
||||
|
||||
return b2;
|
||||
};
|
||||
|
||||
// create a node and optionally link it with previous one (in a circular doubly linked list)
|
||||
|
||||
Phaser.EarCut.insertNode = function (i, x, y, last) {
|
||||
var p = new Phaser.EarCut.Node(i, x, y);
|
||||
|
||||
if (!last) {
|
||||
p.prev = p;
|
||||
p.next = p;
|
||||
|
||||
} else {
|
||||
p.next = last.next;
|
||||
p.prev = last;
|
||||
last.next.prev = p;
|
||||
last.next = p;
|
||||
}
|
||||
return p;
|
||||
};
|
||||
|
||||
Phaser.EarCut.removeNode = function (p) {
|
||||
p.next.prev = p.prev;
|
||||
p.prev.next = p.next;
|
||||
|
||||
if (p.prevZ) p.prevZ.nextZ = p.nextZ;
|
||||
if (p.nextZ) p.nextZ.prevZ = p.prevZ;
|
||||
};
|
||||
|
||||
Phaser.EarCut.Node = function (i, x, y) {
|
||||
// vertice index in coordinates array
|
||||
this.i = i;
|
||||
|
||||
// vertex coordinates
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
||||
// previous and next vertice nodes in a polygon ring
|
||||
this.prev = null;
|
||||
this.next = null;
|
||||
|
||||
// z-order curve value
|
||||
this.z = null;
|
||||
|
||||
// previous and next nodes in z-order
|
||||
this.prevZ = null;
|
||||
this.nextZ = null;
|
||||
|
||||
// indicates whether this is a steiner point
|
||||
this.steiner = false;
|
||||
};
|
||||
|
||||
/* jshint ignore:end */
|
||||
|
||||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
@ -48050,7 +48685,7 @@ Phaser.RequestAnimationFrame = function(game, forceSetTimeOut) {
|
|||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
|
||||
{
|
||||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55157,8 +55792,9 @@ Phaser.Animation.prototype = {
|
|||
|
||||
if (frameIndex)
|
||||
{
|
||||
// Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update.
|
||||
this._frameIndex = frameIndex - 1;
|
||||
// Set the current frame index to the found index. Subtract a directional offset so that it animates to the desired frame on update.
|
||||
var directionalOffset = this.isReversed ? -1 : 1;
|
||||
this._frameIndex = frameIndex - directionalOffset;
|
||||
|
||||
// Make the animation update at next update
|
||||
this._timeNextFrame = this.game.time.time;
|
||||
|
@ -56260,6 +56896,10 @@ Phaser.AnimationParser = {
|
|||
*/
|
||||
spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) {
|
||||
|
||||
if (frameMax === undefined) { frameMax = -1; }
|
||||
if (margin === undefined) { margin = 0; }
|
||||
if (spacing === undefined) { spacing = 0; }
|
||||
|
||||
var img = key;
|
||||
|
||||
if (typeof key === 'string')
|
||||
|
@ -56839,7 +57479,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData(),
|
||||
fileFormat: extension
|
||||
|
@ -56892,7 +57532,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData()
|
||||
};
|
||||
|
@ -57105,7 +57745,7 @@ Phaser.Cache.prototype = {
|
|||
url: url,
|
||||
data: data,
|
||||
font: null,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (xSpacing === undefined) { xSpacing = 0; }
|
||||
|
@ -57287,7 +57927,7 @@ Phaser.Cache.prototype = {
|
|||
frameHeight: frameHeight,
|
||||
margin: margin,
|
||||
spacing: spacing,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frameData: Phaser.AnimationParser.spriteSheet(this.game, data, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames)
|
||||
};
|
||||
|
||||
|
@ -57313,7 +57953,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||
|
@ -71606,11 +72246,8 @@ Phaser.Particles.prototype = {
|
|||
* @return {Phaser.Emitter} The emitter that was added.
|
||||
*/
|
||||
add: function (emitter) {
|
||||
|
||||
this.emitters[emitter.name] = emitter;
|
||||
|
||||
this.emitters[emitter.id] = emitter;
|
||||
return emitter;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -71619,9 +72256,7 @@ Phaser.Particles.prototype = {
|
|||
* @param {Phaser.Emitter} emitter - The emitter to remove.
|
||||
*/
|
||||
remove: function (emitter) {
|
||||
|
||||
delete this.emitters[emitter.name];
|
||||
|
||||
delete this.emitters[emitter.id];
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -71630,7 +72265,6 @@ Phaser.Particles.prototype = {
|
|||
* @protected
|
||||
*/
|
||||
update: function () {
|
||||
|
||||
for (var key in this.emitters)
|
||||
{
|
||||
if (this.emitters[key].exists)
|
||||
|
@ -71901,12 +72535,12 @@ Phaser.Video = function (game, key, url) {
|
|||
*/
|
||||
if (this.video && !url)
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source);
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:48:52
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:34
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -53,7 +53,7 @@ var Phaser = Phaser || { // jshint ignore:line
|
|||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
VERSION: '2.7.0',
|
||||
VERSION: '2.7.1',
|
||||
|
||||
/**
|
||||
* An array of Phaser game instances.
|
||||
|
@ -21439,7 +21439,7 @@ Phaser.SinglePad.prototype.constructor = Phaser.SinglePad;
|
|||
|
||||
/**
|
||||
* If you need more fine-grained control over the handling of specific keys you can create and use Phaser.Key objects.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Key
|
||||
* @constructor
|
||||
* @param {Phaser.Game} game - Current game instance.
|
||||
|
@ -21563,7 +21563,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#update
|
||||
* @protected
|
||||
*/
|
||||
|
@ -21586,7 +21586,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyDown
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -21623,7 +21623,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyUp
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -21686,7 +21686,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#downDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just pressed. Given in ms.
|
||||
* @return {boolean} True if the key was pressed down within the given duration.
|
||||
|
@ -21702,7 +21702,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#upDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just released. Given in ms.
|
||||
* @return {boolean} True if the key was released within the given duration.
|
||||
|
@ -21722,7 +21722,8 @@ Phaser.Key.prototype = {
|
|||
* When you check this value it will return `true` if the Key is down, otherwise `false`.
|
||||
* You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.
|
||||
* This allows you to use it in situations where you want to check if this key is down without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justDown
|
||||
* @property {boolean} justDown
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -21744,7 +21745,8 @@ Object.defineProperty(Phaser.Key.prototype, "justDown", {
|
|||
* When you check this value it will return `true` if the Key is up, otherwise `false`.
|
||||
* You can only call justUp once per key release. It will only return `true` once, until the Key is pressed down and released again.
|
||||
* This allows you to use it in situations where you want to check if this key is up without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justUp
|
||||
* @property {boolean} justUp
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -21764,7 +21766,7 @@ Object.defineProperty(Phaser.Key.prototype, "justUp", {
|
|||
/**
|
||||
* An enabled key processes its update and dispatches events.
|
||||
* A key can be disabled momentarily at runtime instead of deleting it.
|
||||
*
|
||||
* @name Phaser.Key#enabled
|
||||
* @property {boolean} enabled
|
||||
* @memberof Phaser.Key
|
||||
* @default true
|
||||
|
@ -27776,7 +27778,7 @@ Phaser.BitmapData = function (game, key, width, height, skipPool) {
|
|||
* @property {PIXI.BaseTexture} baseTexture - The PIXI.BaseTexture.
|
||||
* @default
|
||||
*/
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas, null, this.game.resolution);
|
||||
|
||||
/**
|
||||
* @property {PIXI.Texture} texture - The PIXI.Texture.
|
||||
|
@ -30098,6 +30100,635 @@ Phaser.BitmapData.getTransform = function (translateX, translateY, scaleX, scale
|
|||
|
||||
Phaser.BitmapData.prototype.constructor = Phaser.BitmapData;
|
||||
|
||||
/* jshint ignore:start */
|
||||
|
||||
/*
|
||||
Copyright (c) 2016, Mapbox
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class EarCut
|
||||
*/
|
||||
Phaser.EarCut = {};
|
||||
|
||||
Phaser.EarCut.Triangulate = function (data, holeIndices, dim) {
|
||||
|
||||
dim = dim || 2;
|
||||
|
||||
var hasHoles = holeIndices && holeIndices.length,
|
||||
outerLen = hasHoles ? holeIndices[0] * dim : data.length,
|
||||
outerNode = Phaser.EarCut.linkedList(data, 0, outerLen, dim, true),
|
||||
triangles = [];
|
||||
|
||||
if (!outerNode) return triangles;
|
||||
|
||||
var minX, minY, maxX, maxY, x, y, size;
|
||||
|
||||
if (hasHoles) outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim);
|
||||
|
||||
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
|
||||
if (data.length > 80 * dim) {
|
||||
minX = maxX = data[0];
|
||||
minY = maxY = data[1];
|
||||
|
||||
for (var i = dim; i < outerLen; i += dim) {
|
||||
x = data[i];
|
||||
y = data[i + 1];
|
||||
if (x < minX) minX = x;
|
||||
if (y < minY) minY = y;
|
||||
if (x > maxX) maxX = x;
|
||||
if (y > maxY) maxY = y;
|
||||
}
|
||||
|
||||
// minX, minY and size are later used to transform coords into integers for z-order calculation
|
||||
size = Math.max(maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
Phaser.EarCut.earcutLinked(outerNode, triangles, dim, minX, minY, size);
|
||||
|
||||
return triangles;
|
||||
};
|
||||
|
||||
// create a circular doubly linked list from polygon points in the specified winding order
|
||||
|
||||
Phaser.EarCut.linkedList = function (data, start, end, dim, clockwise) {
|
||||
var sum = 0,
|
||||
i, j, last;
|
||||
|
||||
// calculate original winding order of a polygon ring
|
||||
for (i = start, j = end - dim; i < end; i += dim) {
|
||||
sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
|
||||
j = i;
|
||||
}
|
||||
|
||||
// link points into circular doubly-linked list in the specified winding order
|
||||
if (clockwise === (sum > 0)) {
|
||||
for (i = start; i < end; i += dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
} else {
|
||||
for (i = end - dim; i >= start; i -= dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
}
|
||||
|
||||
return last;
|
||||
};
|
||||
|
||||
// eliminate colinear or duplicate points
|
||||
|
||||
Phaser.EarCut.filterPoints = function (start, end) {
|
||||
if (!start) return start;
|
||||
if (!end) end = start;
|
||||
|
||||
var p = start,
|
||||
again;
|
||||
do {
|
||||
again = false;
|
||||
|
||||
if (!p.steiner && (Phaser.EarCut.equals(p, p.next) || Phaser.EarCut.area(p.prev, p, p.next) === 0)) {
|
||||
Phaser.EarCut.removeNode(p);
|
||||
p = end = p.prev;
|
||||
if (p === p.next) return null;
|
||||
again = true;
|
||||
|
||||
} else {
|
||||
p = p.next;
|
||||
}
|
||||
} while (again || p !== end);
|
||||
|
||||
return end;
|
||||
};
|
||||
|
||||
// main ear slicing loop which triangulates a polygon (given as a linked list)
|
||||
|
||||
Phaser.EarCut.earcutLinked = function (ear, triangles, dim, minX, minY, size, pass) {
|
||||
if (!ear) return;
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
if (!pass && size) Phaser.EarCut.indexCurve(ear, minX, minY, size);
|
||||
|
||||
var stop = ear,
|
||||
prev, next;
|
||||
|
||||
// iterate through ears, slicing them one by one
|
||||
while (ear.prev !== ear.next) {
|
||||
prev = ear.prev;
|
||||
next = ear.next;
|
||||
|
||||
if (size ? Phaser.EarCut.isEarHashed(ear, minX, minY, size) : Phaser.EarCut.isEar(ear)) {
|
||||
// cut off the triangle
|
||||
triangles.push(prev.i / dim);
|
||||
triangles.push(ear.i / dim);
|
||||
triangles.push(next.i / dim);
|
||||
|
||||
Phaser.EarCut.removeNode(ear);
|
||||
|
||||
// skipping the next vertice leads to less sliver triangles
|
||||
ear = next.next;
|
||||
stop = next.next;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
ear = next;
|
||||
|
||||
// if we looped through the whole remaining polygon and can't find any more ears
|
||||
if (ear === stop) {
|
||||
// try filtering points and slicing again
|
||||
if (!pass) {
|
||||
Phaser.EarCut.earcutLinked(Phaser.EarCut.filterPoints(ear), triangles, dim, minX, minY, size, 1);
|
||||
|
||||
// if this didn't work, try curing all small self-intersections locally
|
||||
} else if (pass === 1) {
|
||||
ear = Phaser.EarCut.cureLocalIntersections(ear, triangles, dim);
|
||||
Phaser.EarCut.earcutLinked(ear, triangles, dim, minX, minY, size, 2);
|
||||
|
||||
// as a last resort, try splitting the remaining polygon into two
|
||||
} else if (pass === 2) {
|
||||
Phaser.EarCut.splitEarcut(ear, triangles, dim, minX, minY, size);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// check whether a polygon node forms a valid ear with adjacent nodes
|
||||
|
||||
Phaser.EarCut.isEar = function (ear) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// now make sure we don't have other points inside the potential ear
|
||||
var p = ear.next.next;
|
||||
|
||||
while (p !== ear.prev) {
|
||||
if (Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
Phaser.EarCut.isEarHashed = function (ear, minX, minY, size) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// triangle bbox; min & max are calculated like this for speed
|
||||
var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
|
||||
minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
|
||||
maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
|
||||
maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
|
||||
|
||||
// z-order range for the current triangle bbox;
|
||||
var minZ = Phaser.EarCut.zOrder(minTX, minTY, minX, minY, size),
|
||||
maxZ = Phaser.EarCut.zOrder(maxTX, maxTY, minX, minY, size);
|
||||
|
||||
// first look for points inside the triangle in increasing z-order
|
||||
var p = ear.nextZ;
|
||||
|
||||
while (p && p.z <= maxZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.nextZ;
|
||||
}
|
||||
|
||||
// then look for points in decreasing z-order
|
||||
p = ear.prevZ;
|
||||
|
||||
while (p && p.z >= minZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.prevZ;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// go through all polygon nodes and cure small local self-intersections
|
||||
|
||||
Phaser.EarCut.cureLocalIntersections = function (start, triangles, dim) {
|
||||
var p = start;
|
||||
do {
|
||||
var a = p.prev,
|
||||
b = p.next.next;
|
||||
|
||||
// a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2])
|
||||
if (Phaser.EarCut.intersects(a, p, p.next, b) && Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a)) {
|
||||
|
||||
triangles.push(a.i / dim);
|
||||
triangles.push(p.i / dim);
|
||||
triangles.push(b.i / dim);
|
||||
|
||||
// remove two nodes involved
|
||||
Phaser.EarCut.removeNode(p);
|
||||
Phaser.EarCut.removeNode(p.next);
|
||||
|
||||
p = start = b;
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
// try splitting polygon into two and triangulate them independently
|
||||
|
||||
Phaser.EarCut.splitEarcut = function (start, triangles, dim, minX, minY, size) {
|
||||
// look for a valid diagonal that divides the polygon into two
|
||||
var a = start;
|
||||
do {
|
||||
var b = a.next.next;
|
||||
while (b !== a.prev) {
|
||||
if (a.i !== b.i && Phaser.EarCut.isValidDiagonal(a, b)) {
|
||||
// split the polygon in two by the diagonal
|
||||
var c = Phaser.EarCut.splitPolygon(a, b);
|
||||
|
||||
// filter colinear points around the cuts
|
||||
a = Phaser.EarCut.filterPoints(a, a.next);
|
||||
c = Phaser.EarCut.filterPoints(c, c.next);
|
||||
|
||||
// run earcut on each half
|
||||
Phaser.EarCut.earcutLinked(a, triangles, dim, minX, minY, size);
|
||||
Phaser.EarCut.earcutLinked(c, triangles, dim, minX, minY, size);
|
||||
return;
|
||||
}
|
||||
b = b.next;
|
||||
}
|
||||
a = a.next;
|
||||
} while (a !== start);
|
||||
};
|
||||
|
||||
// link every hole into the outer loop, producing a single-ring polygon without holes
|
||||
|
||||
Phaser.EarCut.eliminateHoles = function (data, holeIndices, outerNode, dim) {
|
||||
var queue = [],
|
||||
i, len, start, end, list;
|
||||
|
||||
for (i = 0, len = holeIndices.length; i < len; i++) {
|
||||
start = holeIndices[i] * dim;
|
||||
end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
|
||||
list = Phaser.EarCut.linkedList(data, start, end, dim, false);
|
||||
if (list === list.next) list.steiner = true;
|
||||
queue.push(Phaser.EarCut.getLeftmost(list));
|
||||
}
|
||||
|
||||
queue.sort(compareX);
|
||||
|
||||
// process holes from left to right
|
||||
for (i = 0; i < queue.length; i++) {
|
||||
Phaser.EarCut.eliminateHole(queue[i], outerNode);
|
||||
outerNode = Phaser.EarCut.filterPoints(outerNode, outerNode.next);
|
||||
}
|
||||
|
||||
return outerNode;
|
||||
};
|
||||
|
||||
Phaser.EarCut.compareX = function (a, b) {
|
||||
return a.x - b.x;
|
||||
};
|
||||
|
||||
// find a bridge between vertices that connects hole with an outer ring and and link it
|
||||
|
||||
Phaser.EarCut.eliminateHole = function (hole, outerNode) {
|
||||
outerNode = Phaser.EarCut.findHoleBridge(hole, outerNode);
|
||||
if (outerNode) {
|
||||
var b = Phaser.EarCut.splitPolygon(outerNode, hole);
|
||||
Phaser.EarCut.filterPoints(b, b.next);
|
||||
}
|
||||
};
|
||||
|
||||
// David Eberly's algorithm for finding a bridge between hole and outer polygon
|
||||
|
||||
Phaser.EarCut.findHoleBridge = function (hole, outerNode) {
|
||||
var p = outerNode,
|
||||
hx = hole.x,
|
||||
hy = hole.y,
|
||||
qx = -Infinity,
|
||||
m;
|
||||
|
||||
// find a segment intersected by a ray from the hole's leftmost point to the left;
|
||||
// segment's endpoint with lesser x will be potential connection point
|
||||
do {
|
||||
if (hy <= p.y && hy >= p.next.y) {
|
||||
var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
|
||||
if (x <= hx && x > qx) {
|
||||
qx = x;
|
||||
m = p.x < p.next.x ? p : p.next;
|
||||
}
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== outerNode);
|
||||
|
||||
if (!m) return null;
|
||||
|
||||
if (hole.x === m.x) return m.prev; // hole touches outer segment; pick lower endpoint
|
||||
|
||||
// look for points inside the triangle of hole point, segment intersection and endpoint;
|
||||
// if there are no points found, we have a valid connection;
|
||||
// otherwise choose the point of the minimum angle with the ray as connection point
|
||||
|
||||
var stop = m,
|
||||
tanMin = Infinity,
|
||||
tan;
|
||||
|
||||
p = m.next;
|
||||
|
||||
while (p !== stop) {
|
||||
if (hx >= p.x && p.x >= m.x &&
|
||||
Phaser.EarCut.pointInTriangle(hy < m.y ? hx : qx, hy, m.x, m.y, hy < m.y ? qx : hx, hy, p.x, p.y)) {
|
||||
|
||||
tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
|
||||
|
||||
if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && Phaser.EarCut.locallyInside(p, hole)) {
|
||||
m = p;
|
||||
tanMin = tan;
|
||||
}
|
||||
}
|
||||
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return m;
|
||||
};
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
|
||||
Phaser.EarCut.indexCurve = function (start, minX, minY, size) {
|
||||
var p = start;
|
||||
do {
|
||||
if (p.z === null) p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size);
|
||||
p.prevZ = p.prev;
|
||||
p.nextZ = p.next;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
p.prevZ.nextZ = null;
|
||||
p.prevZ = null;
|
||||
|
||||
Phaser.EarCut.sortLinked(p);
|
||||
};
|
||||
|
||||
// Simon Tatham's linked list merge sort algorithm
|
||||
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
|
||||
|
||||
Phaser.EarCut.sortLinked = function (list) {
|
||||
var i, p, q, e, tail, numMerges, pSize, qSize,
|
||||
inSize = 1;
|
||||
|
||||
do {
|
||||
p = list;
|
||||
list = null;
|
||||
tail = null;
|
||||
numMerges = 0;
|
||||
|
||||
while (p) {
|
||||
numMerges++;
|
||||
q = p;
|
||||
pSize = 0;
|
||||
for (i = 0; i < inSize; i++) {
|
||||
pSize++;
|
||||
q = q.nextZ;
|
||||
if (!q) break;
|
||||
}
|
||||
|
||||
qSize = inSize;
|
||||
|
||||
while (pSize > 0 || (qSize > 0 && q)) {
|
||||
|
||||
if (pSize === 0) {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
} else if (qSize === 0 || !q) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else if (p.z <= q.z) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
}
|
||||
|
||||
if (tail) tail.nextZ = e;
|
||||
else list = e;
|
||||
|
||||
e.prevZ = tail;
|
||||
tail = e;
|
||||
}
|
||||
|
||||
p = q;
|
||||
}
|
||||
|
||||
tail.nextZ = null;
|
||||
inSize *= 2;
|
||||
|
||||
} while (numMerges > 1);
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
// z-order of a point given coords and size of the data bounding box
|
||||
|
||||
Phaser.EarCut.zOrder = function (x, y, minX, minY, size) {
|
||||
// coords are transformed into non-negative 15-bit integer range
|
||||
x = 32767 * (x - minX) / size;
|
||||
y = 32767 * (y - minY) / size;
|
||||
|
||||
x = (x | (x << 8)) & 0x00FF00FF;
|
||||
x = (x | (x << 4)) & 0x0F0F0F0F;
|
||||
x = (x | (x << 2)) & 0x33333333;
|
||||
x = (x | (x << 1)) & 0x55555555;
|
||||
|
||||
y = (y | (y << 8)) & 0x00FF00FF;
|
||||
y = (y | (y << 4)) & 0x0F0F0F0F;
|
||||
y = (y | (y << 2)) & 0x33333333;
|
||||
y = (y | (y << 1)) & 0x55555555;
|
||||
|
||||
return x | (y << 1);
|
||||
};
|
||||
|
||||
// find the leftmost node of a polygon ring
|
||||
|
||||
Phaser.EarCut.getLeftmost = function (start) {
|
||||
var p = start,
|
||||
leftmost = start;
|
||||
do {
|
||||
if (p.x < leftmost.x) leftmost = p;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return leftmost;
|
||||
};
|
||||
|
||||
// check if a point lies within a convex triangle
|
||||
|
||||
Phaser.EarCut.pointInTriangle = function (ax, ay, bx, by, cx, cy, px, py) {
|
||||
return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
|
||||
(ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
|
||||
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
|
||||
};
|
||||
|
||||
// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
|
||||
|
||||
Phaser.EarCut.isValidDiagonal = function (a, b) {
|
||||
return Phaser.EarCut.equals(a, b) || a.next.i !== b.i && a.prev.i !== b.i && !Phaser.EarCut.intersectsPolygon(a, b) &&
|
||||
Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a) && Phaser.EarCut.middleInside(a, b);
|
||||
};
|
||||
|
||||
// signed area of a triangle
|
||||
|
||||
Phaser.EarCut.area = function (p, q, r) {
|
||||
return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
|
||||
};
|
||||
|
||||
// check if two points are equal
|
||||
|
||||
Phaser.EarCut.equals = function (p1, p2) {
|
||||
return p1.x === p2.x && p1.y === p2.y;
|
||||
};
|
||||
|
||||
// check if two segments intersect
|
||||
|
||||
Phaser.EarCut.intersects = function (p1, q1, p2, q2) {
|
||||
return Phaser.EarCut.area(p1, q1, p2) > 0 !== Phaser.EarCut.area(p1, q1, q2) > 0 &&
|
||||
Phaser.EarCut.area(p2, q2, p1) > 0 !== Phaser.EarCut.area(p2, q2, q1) > 0;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal intersects any polygon segments
|
||||
|
||||
Phaser.EarCut.intersectsPolygon = function (a, b) {
|
||||
var p = a;
|
||||
do {
|
||||
if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
|
||||
Phaser.EarCut.intersects(p, p.next, a, b)) return true;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal is locally inside the polygon
|
||||
|
||||
Phaser.EarCut.locallyInside = function (a, b) {
|
||||
return Phaser.EarCut.area(a.prev, a, a.next) < 0 ?
|
||||
Phaser.EarCut.area(a, b, a.next) >= 0 && Phaser.EarCut.area(a, a.prev, b) >= 0 :
|
||||
Phaser.EarCut.area(a, b, a.prev) < 0 || Phaser.EarCut.area(a, a.next, b) < 0;
|
||||
};
|
||||
|
||||
// check if the middle point of a polygon diagonal is inside the polygon
|
||||
|
||||
Phaser.EarCut.middleInside = function (a, b) {
|
||||
var p = a,
|
||||
inside = false,
|
||||
px = (a.x + b.x) / 2,
|
||||
py = (a.y + b.y) / 2;
|
||||
do {
|
||||
if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
|
||||
inside = !inside;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return inside;
|
||||
};
|
||||
|
||||
// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
|
||||
// if one belongs to the outer ring and another to a hole, it merges it into a single ring
|
||||
|
||||
Phaser.EarCut.splitPolygon = function (a, b) {
|
||||
var a2 = new Phaser.EarCut.Node(a.i, a.x, a.y),
|
||||
b2 = new Phaser.EarCut.Node(b.i, b.x, b.y),
|
||||
an = a.next,
|
||||
bp = b.prev;
|
||||
|
||||
a.next = b;
|
||||
b.prev = a;
|
||||
|
||||
a2.next = an;
|
||||
an.prev = a2;
|
||||
|
||||
b2.next = a2;
|
||||
a2.prev = b2;
|
||||
|
||||
bp.next = b2;
|
||||
b2.prev = bp;
|
||||
|
||||
return b2;
|
||||
};
|
||||
|
||||
// create a node and optionally link it with previous one (in a circular doubly linked list)
|
||||
|
||||
Phaser.EarCut.insertNode = function (i, x, y, last) {
|
||||
var p = new Phaser.EarCut.Node(i, x, y);
|
||||
|
||||
if (!last) {
|
||||
p.prev = p;
|
||||
p.next = p;
|
||||
|
||||
} else {
|
||||
p.next = last.next;
|
||||
p.prev = last;
|
||||
last.next.prev = p;
|
||||
last.next = p;
|
||||
}
|
||||
return p;
|
||||
};
|
||||
|
||||
Phaser.EarCut.removeNode = function (p) {
|
||||
p.next.prev = p.prev;
|
||||
p.prev.next = p.next;
|
||||
|
||||
if (p.prevZ) p.prevZ.nextZ = p.nextZ;
|
||||
if (p.nextZ) p.nextZ.prevZ = p.prevZ;
|
||||
};
|
||||
|
||||
Phaser.EarCut.Node = function (i, x, y) {
|
||||
// vertice index in coordinates array
|
||||
this.i = i;
|
||||
|
||||
// vertex coordinates
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
||||
// previous and next vertice nodes in a polygon ring
|
||||
this.prev = null;
|
||||
this.next = null;
|
||||
|
||||
// z-order curve value
|
||||
this.z = null;
|
||||
|
||||
// previous and next nodes in z-order
|
||||
this.prevZ = null;
|
||||
this.nextZ = null;
|
||||
|
||||
// indicates whether this is a steiner point
|
||||
this.steiner = false;
|
||||
};
|
||||
|
||||
/* jshint ignore:end */
|
||||
|
||||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
@ -40601,7 +41232,7 @@ Phaser.RequestAnimationFrame = function(game, forceSetTimeOut) {
|
|||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
|
||||
{
|
||||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -47708,8 +48339,9 @@ Phaser.Animation.prototype = {
|
|||
|
||||
if (frameIndex)
|
||||
{
|
||||
// Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update.
|
||||
this._frameIndex = frameIndex - 1;
|
||||
// Set the current frame index to the found index. Subtract a directional offset so that it animates to the desired frame on update.
|
||||
var directionalOffset = this.isReversed ? -1 : 1;
|
||||
this._frameIndex = frameIndex - directionalOffset;
|
||||
|
||||
// Make the animation update at next update
|
||||
this._timeNextFrame = this.game.time.time;
|
||||
|
@ -48811,6 +49443,10 @@ Phaser.AnimationParser = {
|
|||
*/
|
||||
spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) {
|
||||
|
||||
if (frameMax === undefined) { frameMax = -1; }
|
||||
if (margin === undefined) { margin = 0; }
|
||||
if (spacing === undefined) { spacing = 0; }
|
||||
|
||||
var img = key;
|
||||
|
||||
if (typeof key === 'string')
|
||||
|
@ -49390,7 +50026,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData(),
|
||||
fileFormat: extension
|
||||
|
@ -49443,7 +50079,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData()
|
||||
};
|
||||
|
@ -49656,7 +50292,7 @@ Phaser.Cache.prototype = {
|
|||
url: url,
|
||||
data: data,
|
||||
font: null,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (xSpacing === undefined) { xSpacing = 0; }
|
||||
|
@ -49838,7 +50474,7 @@ Phaser.Cache.prototype = {
|
|||
frameHeight: frameHeight,
|
||||
margin: margin,
|
||||
spacing: spacing,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frameData: Phaser.AnimationParser.spriteSheet(this.game, data, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames)
|
||||
};
|
||||
|
||||
|
@ -49864,7 +50500,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||
|
@ -76148,7 +76784,7 @@ Phaser.TilemapLayer = function (game, tilemap, index, width, height) {
|
|||
*/
|
||||
this.context = this.canvas.getContext('2d');
|
||||
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas)));
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas, null, this.game.resolution)));
|
||||
|
||||
/**
|
||||
* The const type of this object.
|
||||
|
@ -78591,11 +79227,8 @@ Phaser.Particles.prototype = {
|
|||
* @return {Phaser.Emitter} The emitter that was added.
|
||||
*/
|
||||
add: function (emitter) {
|
||||
|
||||
this.emitters[emitter.name] = emitter;
|
||||
|
||||
this.emitters[emitter.id] = emitter;
|
||||
return emitter;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -78604,9 +79237,7 @@ Phaser.Particles.prototype = {
|
|||
* @param {Phaser.Emitter} emitter - The emitter to remove.
|
||||
*/
|
||||
remove: function (emitter) {
|
||||
|
||||
delete this.emitters[emitter.name];
|
||||
|
||||
delete this.emitters[emitter.id];
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -78615,7 +79246,6 @@ Phaser.Particles.prototype = {
|
|||
* @protected
|
||||
*/
|
||||
update: function () {
|
||||
|
||||
for (var key in this.emitters)
|
||||
{
|
||||
if (this.emitters[key].exists)
|
||||
|
@ -78652,7 +79282,7 @@ Phaser.Particles.Arcade = {};
|
|||
* Emitter is a lightweight particle emitter that uses Arcade Physics.
|
||||
* It can be used for one-time explosions or for continuous effects like rain and fire.
|
||||
* All it really does is launch Particle objects out at set intervals, and fixes their positions and velocities accordingly.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Particles.Arcade.Emitter
|
||||
* @constructor
|
||||
* @extends Phaser.Group
|
||||
|
@ -78671,10 +79301,16 @@ Phaser.Particles.Arcade.Emitter = function (game, x, y, maxParticles) {
|
|||
|
||||
Phaser.Group.call(this, game);
|
||||
|
||||
/**
|
||||
* @property {number} _id - Internal ID for this emitter -- only used by the Particle System in most cases
|
||||
* @private
|
||||
*/
|
||||
this._id = this.game.particles.ID++;
|
||||
|
||||
/**
|
||||
* @property {string} name - A handy string name for this emitter. Can be set to anything.
|
||||
*/
|
||||
this.name = 'emitter' + this.game.particles.ID++;
|
||||
this.name = 'emitter' + this.id;
|
||||
|
||||
/**
|
||||
* @property {number} type - Internal Phaser Type value.
|
||||
|
@ -78909,7 +79545,7 @@ Phaser.Particles.Arcade.Emitter.prototype.constructor = Phaser.Particles.Arcade.
|
|||
|
||||
/**
|
||||
* Called automatically by the game loop, decides when to launch particles and when to "die".
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#update
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.update = function () {
|
||||
|
@ -79081,7 +79717,7 @@ Phaser.Particles.Arcade.Emitter.prototype.revive = function () {
|
|||
|
||||
/**
|
||||
* Call this function to emit the given quantity of particles at all once (an explosion)
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#explode
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [quantity=0] - How many particles to launch.
|
||||
|
@ -79103,7 +79739,7 @@ Phaser.Particles.Arcade.Emitter.prototype.explode = function (lifespan, quantity
|
|||
* Each time the flow is run the quantity number of particles will be emitted together.
|
||||
* If you set the total to be 20 and quantity to be 5 then flow will emit 4 times in total (4 x 5 = 20 total)
|
||||
* If you set the total to be -1 then no quantity cap is used and it will keep emitting.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#flow
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [frequency=250] - Frequency is how often to emit the particles, given in ms.
|
||||
|
@ -79146,7 +79782,7 @@ Phaser.Particles.Arcade.Emitter.prototype.flow = function (lifespan, frequency,
|
|||
|
||||
/**
|
||||
* Call this function to start emitting particles.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#start
|
||||
* @param {boolean} [explode=true] - Whether the particles should all burst out at once (true) or at the frequency given (false).
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
|
@ -79324,7 +79960,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function (x, y, key, fr
|
|||
|
||||
/**
|
||||
* Destroys this Emitter, all associated child Particles and then removes itself from the Particle Manager.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#destroy
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
||||
|
@ -79337,7 +79973,7 @@ Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
|||
|
||||
/**
|
||||
* A more compact way of setting the width and height of the emitter.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#setSize
|
||||
* @param {number} width - The desired width of the emitter (particles are spawned randomly within these dimensions).
|
||||
* @param {number} height - The desired height of the emitter.
|
||||
|
@ -79528,6 +80164,16 @@ Phaser.Particles.Arcade.Emitter.prototype.at = function (object) {
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#id
|
||||
* @property {number} id - Gets the internal ID that represents this emitter.
|
||||
*/
|
||||
Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "id", {
|
||||
get: function () {
|
||||
return this._id;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#width
|
||||
* @property {number} width - Gets or sets the width of the Emitter. This is the region in which a particle can be emitted.
|
||||
|
@ -81435,12 +82081,12 @@ Phaser.Video = function (game, key, url) {
|
|||
*/
|
||||
if (this.video && !url)
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source);
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
32
v2-community/build/custom/phaser-split.min.js
vendored
32
v2-community/build/custom/phaser-split.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:48:51
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:34
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -6900,8 +6900,9 @@ PIXI.CanvasRenderer.prototype.mapBlendModes = function () {
|
|||
* @constructor
|
||||
* @param source {String|Canvas} the source object (image or canvas)
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
*/
|
||||
PIXI.BaseTexture = function(source, scaleMode)
|
||||
PIXI.BaseTexture = function(source, scaleMode, resolution)
|
||||
{
|
||||
/**
|
||||
* The Resolution of the texture.
|
||||
|
@ -6909,7 +6910,7 @@ PIXI.BaseTexture = function(source, scaleMode)
|
|||
* @property resolution
|
||||
* @type Number
|
||||
*/
|
||||
this.resolution = 1;
|
||||
this.resolution = resolution || 1;
|
||||
|
||||
/**
|
||||
* [read-only] The width of the base texture set when the image has loaded
|
||||
|
@ -7125,9 +7126,10 @@ PIXI.BaseTexture.prototype.unloadFromGPU = function()
|
|||
* @method fromCanvas
|
||||
* @param canvas {Canvas} The canvas element source of the texture
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
* @return {BaseTexture}
|
||||
*/
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode, resolution)
|
||||
{
|
||||
if (canvas.width === 0)
|
||||
{
|
||||
|
@ -7139,7 +7141,9 @@ PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
|||
canvas.height = 1;
|
||||
}
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode);
|
||||
resolution = resolution || 1;
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode, resolution);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
File diff suppressed because one or more lines are too long
4
v2-community/build/custom/pixi.min.js
vendored
4
v2-community/build/custom/pixi.min.js
vendored
File diff suppressed because one or more lines are too long
2
v2-community/build/p2.min.js
vendored
2
v2-community/build/p2.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:49:01
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:40
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -53,7 +53,7 @@ var Phaser = Phaser || { // jshint ignore:line
|
|||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
VERSION: '2.7.0',
|
||||
VERSION: '2.7.1',
|
||||
|
||||
/**
|
||||
* An array of Phaser game instances.
|
||||
|
@ -21439,7 +21439,7 @@ Phaser.SinglePad.prototype.constructor = Phaser.SinglePad;
|
|||
|
||||
/**
|
||||
* If you need more fine-grained control over the handling of specific keys you can create and use Phaser.Key objects.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Key
|
||||
* @constructor
|
||||
* @param {Phaser.Game} game - Current game instance.
|
||||
|
@ -21563,7 +21563,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#update
|
||||
* @protected
|
||||
*/
|
||||
|
@ -21586,7 +21586,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyDown
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -21623,7 +21623,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyUp
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -21686,7 +21686,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#downDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just pressed. Given in ms.
|
||||
* @return {boolean} True if the key was pressed down within the given duration.
|
||||
|
@ -21702,7 +21702,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#upDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just released. Given in ms.
|
||||
* @return {boolean} True if the key was released within the given duration.
|
||||
|
@ -21722,7 +21722,8 @@ Phaser.Key.prototype = {
|
|||
* When you check this value it will return `true` if the Key is down, otherwise `false`.
|
||||
* You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.
|
||||
* This allows you to use it in situations where you want to check if this key is down without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justDown
|
||||
* @property {boolean} justDown
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -21744,7 +21745,8 @@ Object.defineProperty(Phaser.Key.prototype, "justDown", {
|
|||
* When you check this value it will return `true` if the Key is up, otherwise `false`.
|
||||
* You can only call justUp once per key release. It will only return `true` once, until the Key is pressed down and released again.
|
||||
* This allows you to use it in situations where you want to check if this key is up without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justUp
|
||||
* @property {boolean} justUp
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -21764,7 +21766,7 @@ Object.defineProperty(Phaser.Key.prototype, "justUp", {
|
|||
/**
|
||||
* An enabled key processes its update and dispatches events.
|
||||
* A key can be disabled momentarily at runtime instead of deleting it.
|
||||
*
|
||||
* @name Phaser.Key#enabled
|
||||
* @property {boolean} enabled
|
||||
* @memberof Phaser.Key
|
||||
* @default true
|
||||
|
@ -27776,7 +27778,7 @@ Phaser.BitmapData = function (game, key, width, height, skipPool) {
|
|||
* @property {PIXI.BaseTexture} baseTexture - The PIXI.BaseTexture.
|
||||
* @default
|
||||
*/
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas, null, this.game.resolution);
|
||||
|
||||
/**
|
||||
* @property {PIXI.Texture} texture - The PIXI.Texture.
|
||||
|
@ -30098,6 +30100,635 @@ Phaser.BitmapData.getTransform = function (translateX, translateY, scaleX, scale
|
|||
|
||||
Phaser.BitmapData.prototype.constructor = Phaser.BitmapData;
|
||||
|
||||
/* jshint ignore:start */
|
||||
|
||||
/*
|
||||
Copyright (c) 2016, Mapbox
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class EarCut
|
||||
*/
|
||||
Phaser.EarCut = {};
|
||||
|
||||
Phaser.EarCut.Triangulate = function (data, holeIndices, dim) {
|
||||
|
||||
dim = dim || 2;
|
||||
|
||||
var hasHoles = holeIndices && holeIndices.length,
|
||||
outerLen = hasHoles ? holeIndices[0] * dim : data.length,
|
||||
outerNode = Phaser.EarCut.linkedList(data, 0, outerLen, dim, true),
|
||||
triangles = [];
|
||||
|
||||
if (!outerNode) return triangles;
|
||||
|
||||
var minX, minY, maxX, maxY, x, y, size;
|
||||
|
||||
if (hasHoles) outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim);
|
||||
|
||||
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
|
||||
if (data.length > 80 * dim) {
|
||||
minX = maxX = data[0];
|
||||
minY = maxY = data[1];
|
||||
|
||||
for (var i = dim; i < outerLen; i += dim) {
|
||||
x = data[i];
|
||||
y = data[i + 1];
|
||||
if (x < minX) minX = x;
|
||||
if (y < minY) minY = y;
|
||||
if (x > maxX) maxX = x;
|
||||
if (y > maxY) maxY = y;
|
||||
}
|
||||
|
||||
// minX, minY and size are later used to transform coords into integers for z-order calculation
|
||||
size = Math.max(maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
Phaser.EarCut.earcutLinked(outerNode, triangles, dim, minX, minY, size);
|
||||
|
||||
return triangles;
|
||||
};
|
||||
|
||||
// create a circular doubly linked list from polygon points in the specified winding order
|
||||
|
||||
Phaser.EarCut.linkedList = function (data, start, end, dim, clockwise) {
|
||||
var sum = 0,
|
||||
i, j, last;
|
||||
|
||||
// calculate original winding order of a polygon ring
|
||||
for (i = start, j = end - dim; i < end; i += dim) {
|
||||
sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
|
||||
j = i;
|
||||
}
|
||||
|
||||
// link points into circular doubly-linked list in the specified winding order
|
||||
if (clockwise === (sum > 0)) {
|
||||
for (i = start; i < end; i += dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
} else {
|
||||
for (i = end - dim; i >= start; i -= dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
}
|
||||
|
||||
return last;
|
||||
};
|
||||
|
||||
// eliminate colinear or duplicate points
|
||||
|
||||
Phaser.EarCut.filterPoints = function (start, end) {
|
||||
if (!start) return start;
|
||||
if (!end) end = start;
|
||||
|
||||
var p = start,
|
||||
again;
|
||||
do {
|
||||
again = false;
|
||||
|
||||
if (!p.steiner && (Phaser.EarCut.equals(p, p.next) || Phaser.EarCut.area(p.prev, p, p.next) === 0)) {
|
||||
Phaser.EarCut.removeNode(p);
|
||||
p = end = p.prev;
|
||||
if (p === p.next) return null;
|
||||
again = true;
|
||||
|
||||
} else {
|
||||
p = p.next;
|
||||
}
|
||||
} while (again || p !== end);
|
||||
|
||||
return end;
|
||||
};
|
||||
|
||||
// main ear slicing loop which triangulates a polygon (given as a linked list)
|
||||
|
||||
Phaser.EarCut.earcutLinked = function (ear, triangles, dim, minX, minY, size, pass) {
|
||||
if (!ear) return;
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
if (!pass && size) Phaser.EarCut.indexCurve(ear, minX, minY, size);
|
||||
|
||||
var stop = ear,
|
||||
prev, next;
|
||||
|
||||
// iterate through ears, slicing them one by one
|
||||
while (ear.prev !== ear.next) {
|
||||
prev = ear.prev;
|
||||
next = ear.next;
|
||||
|
||||
if (size ? Phaser.EarCut.isEarHashed(ear, minX, minY, size) : Phaser.EarCut.isEar(ear)) {
|
||||
// cut off the triangle
|
||||
triangles.push(prev.i / dim);
|
||||
triangles.push(ear.i / dim);
|
||||
triangles.push(next.i / dim);
|
||||
|
||||
Phaser.EarCut.removeNode(ear);
|
||||
|
||||
// skipping the next vertice leads to less sliver triangles
|
||||
ear = next.next;
|
||||
stop = next.next;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
ear = next;
|
||||
|
||||
// if we looped through the whole remaining polygon and can't find any more ears
|
||||
if (ear === stop) {
|
||||
// try filtering points and slicing again
|
||||
if (!pass) {
|
||||
Phaser.EarCut.earcutLinked(Phaser.EarCut.filterPoints(ear), triangles, dim, minX, minY, size, 1);
|
||||
|
||||
// if this didn't work, try curing all small self-intersections locally
|
||||
} else if (pass === 1) {
|
||||
ear = Phaser.EarCut.cureLocalIntersections(ear, triangles, dim);
|
||||
Phaser.EarCut.earcutLinked(ear, triangles, dim, minX, minY, size, 2);
|
||||
|
||||
// as a last resort, try splitting the remaining polygon into two
|
||||
} else if (pass === 2) {
|
||||
Phaser.EarCut.splitEarcut(ear, triangles, dim, minX, minY, size);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// check whether a polygon node forms a valid ear with adjacent nodes
|
||||
|
||||
Phaser.EarCut.isEar = function (ear) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// now make sure we don't have other points inside the potential ear
|
||||
var p = ear.next.next;
|
||||
|
||||
while (p !== ear.prev) {
|
||||
if (Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
Phaser.EarCut.isEarHashed = function (ear, minX, minY, size) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// triangle bbox; min & max are calculated like this for speed
|
||||
var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
|
||||
minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
|
||||
maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
|
||||
maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
|
||||
|
||||
// z-order range for the current triangle bbox;
|
||||
var minZ = Phaser.EarCut.zOrder(minTX, minTY, minX, minY, size),
|
||||
maxZ = Phaser.EarCut.zOrder(maxTX, maxTY, minX, minY, size);
|
||||
|
||||
// first look for points inside the triangle in increasing z-order
|
||||
var p = ear.nextZ;
|
||||
|
||||
while (p && p.z <= maxZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.nextZ;
|
||||
}
|
||||
|
||||
// then look for points in decreasing z-order
|
||||
p = ear.prevZ;
|
||||
|
||||
while (p && p.z >= minZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.prevZ;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// go through all polygon nodes and cure small local self-intersections
|
||||
|
||||
Phaser.EarCut.cureLocalIntersections = function (start, triangles, dim) {
|
||||
var p = start;
|
||||
do {
|
||||
var a = p.prev,
|
||||
b = p.next.next;
|
||||
|
||||
// a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2])
|
||||
if (Phaser.EarCut.intersects(a, p, p.next, b) && Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a)) {
|
||||
|
||||
triangles.push(a.i / dim);
|
||||
triangles.push(p.i / dim);
|
||||
triangles.push(b.i / dim);
|
||||
|
||||
// remove two nodes involved
|
||||
Phaser.EarCut.removeNode(p);
|
||||
Phaser.EarCut.removeNode(p.next);
|
||||
|
||||
p = start = b;
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
// try splitting polygon into two and triangulate them independently
|
||||
|
||||
Phaser.EarCut.splitEarcut = function (start, triangles, dim, minX, minY, size) {
|
||||
// look for a valid diagonal that divides the polygon into two
|
||||
var a = start;
|
||||
do {
|
||||
var b = a.next.next;
|
||||
while (b !== a.prev) {
|
||||
if (a.i !== b.i && Phaser.EarCut.isValidDiagonal(a, b)) {
|
||||
// split the polygon in two by the diagonal
|
||||
var c = Phaser.EarCut.splitPolygon(a, b);
|
||||
|
||||
// filter colinear points around the cuts
|
||||
a = Phaser.EarCut.filterPoints(a, a.next);
|
||||
c = Phaser.EarCut.filterPoints(c, c.next);
|
||||
|
||||
// run earcut on each half
|
||||
Phaser.EarCut.earcutLinked(a, triangles, dim, minX, minY, size);
|
||||
Phaser.EarCut.earcutLinked(c, triangles, dim, minX, minY, size);
|
||||
return;
|
||||
}
|
||||
b = b.next;
|
||||
}
|
||||
a = a.next;
|
||||
} while (a !== start);
|
||||
};
|
||||
|
||||
// link every hole into the outer loop, producing a single-ring polygon without holes
|
||||
|
||||
Phaser.EarCut.eliminateHoles = function (data, holeIndices, outerNode, dim) {
|
||||
var queue = [],
|
||||
i, len, start, end, list;
|
||||
|
||||
for (i = 0, len = holeIndices.length; i < len; i++) {
|
||||
start = holeIndices[i] * dim;
|
||||
end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
|
||||
list = Phaser.EarCut.linkedList(data, start, end, dim, false);
|
||||
if (list === list.next) list.steiner = true;
|
||||
queue.push(Phaser.EarCut.getLeftmost(list));
|
||||
}
|
||||
|
||||
queue.sort(compareX);
|
||||
|
||||
// process holes from left to right
|
||||
for (i = 0; i < queue.length; i++) {
|
||||
Phaser.EarCut.eliminateHole(queue[i], outerNode);
|
||||
outerNode = Phaser.EarCut.filterPoints(outerNode, outerNode.next);
|
||||
}
|
||||
|
||||
return outerNode;
|
||||
};
|
||||
|
||||
Phaser.EarCut.compareX = function (a, b) {
|
||||
return a.x - b.x;
|
||||
};
|
||||
|
||||
// find a bridge between vertices that connects hole with an outer ring and and link it
|
||||
|
||||
Phaser.EarCut.eliminateHole = function (hole, outerNode) {
|
||||
outerNode = Phaser.EarCut.findHoleBridge(hole, outerNode);
|
||||
if (outerNode) {
|
||||
var b = Phaser.EarCut.splitPolygon(outerNode, hole);
|
||||
Phaser.EarCut.filterPoints(b, b.next);
|
||||
}
|
||||
};
|
||||
|
||||
// David Eberly's algorithm for finding a bridge between hole and outer polygon
|
||||
|
||||
Phaser.EarCut.findHoleBridge = function (hole, outerNode) {
|
||||
var p = outerNode,
|
||||
hx = hole.x,
|
||||
hy = hole.y,
|
||||
qx = -Infinity,
|
||||
m;
|
||||
|
||||
// find a segment intersected by a ray from the hole's leftmost point to the left;
|
||||
// segment's endpoint with lesser x will be potential connection point
|
||||
do {
|
||||
if (hy <= p.y && hy >= p.next.y) {
|
||||
var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
|
||||
if (x <= hx && x > qx) {
|
||||
qx = x;
|
||||
m = p.x < p.next.x ? p : p.next;
|
||||
}
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== outerNode);
|
||||
|
||||
if (!m) return null;
|
||||
|
||||
if (hole.x === m.x) return m.prev; // hole touches outer segment; pick lower endpoint
|
||||
|
||||
// look for points inside the triangle of hole point, segment intersection and endpoint;
|
||||
// if there are no points found, we have a valid connection;
|
||||
// otherwise choose the point of the minimum angle with the ray as connection point
|
||||
|
||||
var stop = m,
|
||||
tanMin = Infinity,
|
||||
tan;
|
||||
|
||||
p = m.next;
|
||||
|
||||
while (p !== stop) {
|
||||
if (hx >= p.x && p.x >= m.x &&
|
||||
Phaser.EarCut.pointInTriangle(hy < m.y ? hx : qx, hy, m.x, m.y, hy < m.y ? qx : hx, hy, p.x, p.y)) {
|
||||
|
||||
tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
|
||||
|
||||
if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && Phaser.EarCut.locallyInside(p, hole)) {
|
||||
m = p;
|
||||
tanMin = tan;
|
||||
}
|
||||
}
|
||||
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return m;
|
||||
};
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
|
||||
Phaser.EarCut.indexCurve = function (start, minX, minY, size) {
|
||||
var p = start;
|
||||
do {
|
||||
if (p.z === null) p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size);
|
||||
p.prevZ = p.prev;
|
||||
p.nextZ = p.next;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
p.prevZ.nextZ = null;
|
||||
p.prevZ = null;
|
||||
|
||||
Phaser.EarCut.sortLinked(p);
|
||||
};
|
||||
|
||||
// Simon Tatham's linked list merge sort algorithm
|
||||
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
|
||||
|
||||
Phaser.EarCut.sortLinked = function (list) {
|
||||
var i, p, q, e, tail, numMerges, pSize, qSize,
|
||||
inSize = 1;
|
||||
|
||||
do {
|
||||
p = list;
|
||||
list = null;
|
||||
tail = null;
|
||||
numMerges = 0;
|
||||
|
||||
while (p) {
|
||||
numMerges++;
|
||||
q = p;
|
||||
pSize = 0;
|
||||
for (i = 0; i < inSize; i++) {
|
||||
pSize++;
|
||||
q = q.nextZ;
|
||||
if (!q) break;
|
||||
}
|
||||
|
||||
qSize = inSize;
|
||||
|
||||
while (pSize > 0 || (qSize > 0 && q)) {
|
||||
|
||||
if (pSize === 0) {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
} else if (qSize === 0 || !q) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else if (p.z <= q.z) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
}
|
||||
|
||||
if (tail) tail.nextZ = e;
|
||||
else list = e;
|
||||
|
||||
e.prevZ = tail;
|
||||
tail = e;
|
||||
}
|
||||
|
||||
p = q;
|
||||
}
|
||||
|
||||
tail.nextZ = null;
|
||||
inSize *= 2;
|
||||
|
||||
} while (numMerges > 1);
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
// z-order of a point given coords and size of the data bounding box
|
||||
|
||||
Phaser.EarCut.zOrder = function (x, y, minX, minY, size) {
|
||||
// coords are transformed into non-negative 15-bit integer range
|
||||
x = 32767 * (x - minX) / size;
|
||||
y = 32767 * (y - minY) / size;
|
||||
|
||||
x = (x | (x << 8)) & 0x00FF00FF;
|
||||
x = (x | (x << 4)) & 0x0F0F0F0F;
|
||||
x = (x | (x << 2)) & 0x33333333;
|
||||
x = (x | (x << 1)) & 0x55555555;
|
||||
|
||||
y = (y | (y << 8)) & 0x00FF00FF;
|
||||
y = (y | (y << 4)) & 0x0F0F0F0F;
|
||||
y = (y | (y << 2)) & 0x33333333;
|
||||
y = (y | (y << 1)) & 0x55555555;
|
||||
|
||||
return x | (y << 1);
|
||||
};
|
||||
|
||||
// find the leftmost node of a polygon ring
|
||||
|
||||
Phaser.EarCut.getLeftmost = function (start) {
|
||||
var p = start,
|
||||
leftmost = start;
|
||||
do {
|
||||
if (p.x < leftmost.x) leftmost = p;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return leftmost;
|
||||
};
|
||||
|
||||
// check if a point lies within a convex triangle
|
||||
|
||||
Phaser.EarCut.pointInTriangle = function (ax, ay, bx, by, cx, cy, px, py) {
|
||||
return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
|
||||
(ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
|
||||
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
|
||||
};
|
||||
|
||||
// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
|
||||
|
||||
Phaser.EarCut.isValidDiagonal = function (a, b) {
|
||||
return Phaser.EarCut.equals(a, b) || a.next.i !== b.i && a.prev.i !== b.i && !Phaser.EarCut.intersectsPolygon(a, b) &&
|
||||
Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a) && Phaser.EarCut.middleInside(a, b);
|
||||
};
|
||||
|
||||
// signed area of a triangle
|
||||
|
||||
Phaser.EarCut.area = function (p, q, r) {
|
||||
return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
|
||||
};
|
||||
|
||||
// check if two points are equal
|
||||
|
||||
Phaser.EarCut.equals = function (p1, p2) {
|
||||
return p1.x === p2.x && p1.y === p2.y;
|
||||
};
|
||||
|
||||
// check if two segments intersect
|
||||
|
||||
Phaser.EarCut.intersects = function (p1, q1, p2, q2) {
|
||||
return Phaser.EarCut.area(p1, q1, p2) > 0 !== Phaser.EarCut.area(p1, q1, q2) > 0 &&
|
||||
Phaser.EarCut.area(p2, q2, p1) > 0 !== Phaser.EarCut.area(p2, q2, q1) > 0;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal intersects any polygon segments
|
||||
|
||||
Phaser.EarCut.intersectsPolygon = function (a, b) {
|
||||
var p = a;
|
||||
do {
|
||||
if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
|
||||
Phaser.EarCut.intersects(p, p.next, a, b)) return true;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal is locally inside the polygon
|
||||
|
||||
Phaser.EarCut.locallyInside = function (a, b) {
|
||||
return Phaser.EarCut.area(a.prev, a, a.next) < 0 ?
|
||||
Phaser.EarCut.area(a, b, a.next) >= 0 && Phaser.EarCut.area(a, a.prev, b) >= 0 :
|
||||
Phaser.EarCut.area(a, b, a.prev) < 0 || Phaser.EarCut.area(a, a.next, b) < 0;
|
||||
};
|
||||
|
||||
// check if the middle point of a polygon diagonal is inside the polygon
|
||||
|
||||
Phaser.EarCut.middleInside = function (a, b) {
|
||||
var p = a,
|
||||
inside = false,
|
||||
px = (a.x + b.x) / 2,
|
||||
py = (a.y + b.y) / 2;
|
||||
do {
|
||||
if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
|
||||
inside = !inside;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return inside;
|
||||
};
|
||||
|
||||
// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
|
||||
// if one belongs to the outer ring and another to a hole, it merges it into a single ring
|
||||
|
||||
Phaser.EarCut.splitPolygon = function (a, b) {
|
||||
var a2 = new Phaser.EarCut.Node(a.i, a.x, a.y),
|
||||
b2 = new Phaser.EarCut.Node(b.i, b.x, b.y),
|
||||
an = a.next,
|
||||
bp = b.prev;
|
||||
|
||||
a.next = b;
|
||||
b.prev = a;
|
||||
|
||||
a2.next = an;
|
||||
an.prev = a2;
|
||||
|
||||
b2.next = a2;
|
||||
a2.prev = b2;
|
||||
|
||||
bp.next = b2;
|
||||
b2.prev = bp;
|
||||
|
||||
return b2;
|
||||
};
|
||||
|
||||
// create a node and optionally link it with previous one (in a circular doubly linked list)
|
||||
|
||||
Phaser.EarCut.insertNode = function (i, x, y, last) {
|
||||
var p = new Phaser.EarCut.Node(i, x, y);
|
||||
|
||||
if (!last) {
|
||||
p.prev = p;
|
||||
p.next = p;
|
||||
|
||||
} else {
|
||||
p.next = last.next;
|
||||
p.prev = last;
|
||||
last.next.prev = p;
|
||||
last.next = p;
|
||||
}
|
||||
return p;
|
||||
};
|
||||
|
||||
Phaser.EarCut.removeNode = function (p) {
|
||||
p.next.prev = p.prev;
|
||||
p.prev.next = p.next;
|
||||
|
||||
if (p.prevZ) p.prevZ.nextZ = p.nextZ;
|
||||
if (p.nextZ) p.nextZ.prevZ = p.prevZ;
|
||||
};
|
||||
|
||||
Phaser.EarCut.Node = function (i, x, y) {
|
||||
// vertice index in coordinates array
|
||||
this.i = i;
|
||||
|
||||
// vertex coordinates
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
||||
// previous and next vertice nodes in a polygon ring
|
||||
this.prev = null;
|
||||
this.next = null;
|
||||
|
||||
// z-order curve value
|
||||
this.z = null;
|
||||
|
||||
// previous and next nodes in z-order
|
||||
this.prevZ = null;
|
||||
this.nextZ = null;
|
||||
|
||||
// indicates whether this is a steiner point
|
||||
this.steiner = false;
|
||||
};
|
||||
|
||||
/* jshint ignore:end */
|
||||
|
||||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
@ -40601,7 +41232,7 @@ Phaser.RequestAnimationFrame = function(game, forceSetTimeOut) {
|
|||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
|
||||
{
|
||||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -47708,8 +48339,9 @@ Phaser.Animation.prototype = {
|
|||
|
||||
if (frameIndex)
|
||||
{
|
||||
// Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update.
|
||||
this._frameIndex = frameIndex - 1;
|
||||
// Set the current frame index to the found index. Subtract a directional offset so that it animates to the desired frame on update.
|
||||
var directionalOffset = this.isReversed ? -1 : 1;
|
||||
this._frameIndex = frameIndex - directionalOffset;
|
||||
|
||||
// Make the animation update at next update
|
||||
this._timeNextFrame = this.game.time.time;
|
||||
|
@ -48811,6 +49443,10 @@ Phaser.AnimationParser = {
|
|||
*/
|
||||
spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) {
|
||||
|
||||
if (frameMax === undefined) { frameMax = -1; }
|
||||
if (margin === undefined) { margin = 0; }
|
||||
if (spacing === undefined) { spacing = 0; }
|
||||
|
||||
var img = key;
|
||||
|
||||
if (typeof key === 'string')
|
||||
|
@ -49390,7 +50026,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData(),
|
||||
fileFormat: extension
|
||||
|
@ -49443,7 +50079,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData()
|
||||
};
|
||||
|
@ -49656,7 +50292,7 @@ Phaser.Cache.prototype = {
|
|||
url: url,
|
||||
data: data,
|
||||
font: null,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (xSpacing === undefined) { xSpacing = 0; }
|
||||
|
@ -49838,7 +50474,7 @@ Phaser.Cache.prototype = {
|
|||
frameHeight: frameHeight,
|
||||
margin: margin,
|
||||
spacing: spacing,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frameData: Phaser.AnimationParser.spriteSheet(this.game, data, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames)
|
||||
};
|
||||
|
||||
|
@ -49864,7 +50500,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||
|
@ -76148,7 +76784,7 @@ Phaser.TilemapLayer = function (game, tilemap, index, width, height) {
|
|||
*/
|
||||
this.context = this.canvas.getContext('2d');
|
||||
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas)));
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas, null, this.game.resolution)));
|
||||
|
||||
/**
|
||||
* The const type of this object.
|
||||
|
@ -78591,11 +79227,8 @@ Phaser.Particles.prototype = {
|
|||
* @return {Phaser.Emitter} The emitter that was added.
|
||||
*/
|
||||
add: function (emitter) {
|
||||
|
||||
this.emitters[emitter.name] = emitter;
|
||||
|
||||
this.emitters[emitter.id] = emitter;
|
||||
return emitter;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -78604,9 +79237,7 @@ Phaser.Particles.prototype = {
|
|||
* @param {Phaser.Emitter} emitter - The emitter to remove.
|
||||
*/
|
||||
remove: function (emitter) {
|
||||
|
||||
delete this.emitters[emitter.name];
|
||||
|
||||
delete this.emitters[emitter.id];
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -78615,7 +79246,6 @@ Phaser.Particles.prototype = {
|
|||
* @protected
|
||||
*/
|
||||
update: function () {
|
||||
|
||||
for (var key in this.emitters)
|
||||
{
|
||||
if (this.emitters[key].exists)
|
||||
|
@ -78652,7 +79282,7 @@ Phaser.Particles.Arcade = {};
|
|||
* Emitter is a lightweight particle emitter that uses Arcade Physics.
|
||||
* It can be used for one-time explosions or for continuous effects like rain and fire.
|
||||
* All it really does is launch Particle objects out at set intervals, and fixes their positions and velocities accordingly.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Particles.Arcade.Emitter
|
||||
* @constructor
|
||||
* @extends Phaser.Group
|
||||
|
@ -78671,10 +79301,16 @@ Phaser.Particles.Arcade.Emitter = function (game, x, y, maxParticles) {
|
|||
|
||||
Phaser.Group.call(this, game);
|
||||
|
||||
/**
|
||||
* @property {number} _id - Internal ID for this emitter -- only used by the Particle System in most cases
|
||||
* @private
|
||||
*/
|
||||
this._id = this.game.particles.ID++;
|
||||
|
||||
/**
|
||||
* @property {string} name - A handy string name for this emitter. Can be set to anything.
|
||||
*/
|
||||
this.name = 'emitter' + this.game.particles.ID++;
|
||||
this.name = 'emitter' + this.id;
|
||||
|
||||
/**
|
||||
* @property {number} type - Internal Phaser Type value.
|
||||
|
@ -78909,7 +79545,7 @@ Phaser.Particles.Arcade.Emitter.prototype.constructor = Phaser.Particles.Arcade.
|
|||
|
||||
/**
|
||||
* Called automatically by the game loop, decides when to launch particles and when to "die".
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#update
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.update = function () {
|
||||
|
@ -79081,7 +79717,7 @@ Phaser.Particles.Arcade.Emitter.prototype.revive = function () {
|
|||
|
||||
/**
|
||||
* Call this function to emit the given quantity of particles at all once (an explosion)
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#explode
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [quantity=0] - How many particles to launch.
|
||||
|
@ -79103,7 +79739,7 @@ Phaser.Particles.Arcade.Emitter.prototype.explode = function (lifespan, quantity
|
|||
* Each time the flow is run the quantity number of particles will be emitted together.
|
||||
* If you set the total to be 20 and quantity to be 5 then flow will emit 4 times in total (4 x 5 = 20 total)
|
||||
* If you set the total to be -1 then no quantity cap is used and it will keep emitting.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#flow
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [frequency=250] - Frequency is how often to emit the particles, given in ms.
|
||||
|
@ -79146,7 +79782,7 @@ Phaser.Particles.Arcade.Emitter.prototype.flow = function (lifespan, frequency,
|
|||
|
||||
/**
|
||||
* Call this function to start emitting particles.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#start
|
||||
* @param {boolean} [explode=true] - Whether the particles should all burst out at once (true) or at the frequency given (false).
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
|
@ -79324,7 +79960,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function (x, y, key, fr
|
|||
|
||||
/**
|
||||
* Destroys this Emitter, all associated child Particles and then removes itself from the Particle Manager.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#destroy
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
||||
|
@ -79337,7 +79973,7 @@ Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
|||
|
||||
/**
|
||||
* A more compact way of setting the width and height of the emitter.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#setSize
|
||||
* @param {number} width - The desired width of the emitter (particles are spawned randomly within these dimensions).
|
||||
* @param {number} height - The desired height of the emitter.
|
||||
|
@ -79528,6 +80164,16 @@ Phaser.Particles.Arcade.Emitter.prototype.at = function (object) {
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#id
|
||||
* @property {number} id - Gets the internal ID that represents this emitter.
|
||||
*/
|
||||
Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "id", {
|
||||
get: function () {
|
||||
return this._id;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#width
|
||||
* @property {number} width - Gets or sets the width of the Emitter. This is the region in which a particle can be emitted.
|
||||
|
@ -81917,12 +82563,12 @@ Phaser.Video = function (game, key, url) {
|
|||
*/
|
||||
if (this.video && !url)
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source);
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
33
v2-community/build/phaser-creature.min.js
vendored
33
v2-community/build/phaser-creature.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:48:27
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:17
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -20538,8 +20538,9 @@ PIXI.CanvasRenderer.prototype.mapBlendModes = function () {
|
|||
* @constructor
|
||||
* @param source {String|Canvas} the source object (image or canvas)
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
*/
|
||||
PIXI.BaseTexture = function(source, scaleMode)
|
||||
PIXI.BaseTexture = function(source, scaleMode, resolution)
|
||||
{
|
||||
/**
|
||||
* The Resolution of the texture.
|
||||
|
@ -20547,7 +20548,7 @@ PIXI.BaseTexture = function(source, scaleMode)
|
|||
* @property resolution
|
||||
* @type Number
|
||||
*/
|
||||
this.resolution = 1;
|
||||
this.resolution = resolution || 1;
|
||||
|
||||
/**
|
||||
* [read-only] The width of the base texture set when the image has loaded
|
||||
|
@ -20763,9 +20764,10 @@ PIXI.BaseTexture.prototype.unloadFromGPU = function()
|
|||
* @method fromCanvas
|
||||
* @param canvas {Canvas} The canvas element source of the texture
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
* @return {BaseTexture}
|
||||
*/
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode, resolution)
|
||||
{
|
||||
if (canvas.width === 0)
|
||||
{
|
||||
|
@ -20777,7 +20779,9 @@ PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
|||
canvas.height = 1;
|
||||
}
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode);
|
||||
resolution = resolution || 1;
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode, resolution);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -21140,7 +21144,7 @@ var Phaser = Phaser || { // jshint ignore:line
|
|||
* @constant
|
||||
* @type {string}
|
||||
*/
|
||||
VERSION: '2.7.0',
|
||||
VERSION: '2.7.1',
|
||||
|
||||
/**
|
||||
* An array of Phaser game instances.
|
||||
|
@ -42526,7 +42530,7 @@ Phaser.SinglePad.prototype.constructor = Phaser.SinglePad;
|
|||
|
||||
/**
|
||||
* If you need more fine-grained control over the handling of specific keys you can create and use Phaser.Key objects.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Key
|
||||
* @constructor
|
||||
* @param {Phaser.Game} game - Current game instance.
|
||||
|
@ -42650,7 +42654,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#update
|
||||
* @protected
|
||||
*/
|
||||
|
@ -42673,7 +42677,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyDown
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -42710,7 +42714,7 @@ Phaser.Key.prototype = {
|
|||
|
||||
/**
|
||||
* Called automatically by Phaser.Keyboard.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#processKeyUp
|
||||
* @param {KeyboardEvent} event - The DOM event that triggered this.
|
||||
* @protected
|
||||
|
@ -42773,7 +42777,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#downDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just pressed. Given in ms.
|
||||
* @return {boolean} True if the key was pressed down within the given duration.
|
||||
|
@ -42789,7 +42793,7 @@ Phaser.Key.prototype = {
|
|||
/**
|
||||
* Returns `true` if the Key was pressed down within the `duration` value given, or `false` if it either isn't down,
|
||||
* or was pressed down longer ago than then given duration.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Key#upDuration
|
||||
* @param {number} [duration=50] - The duration within which the key is considered as being just released. Given in ms.
|
||||
* @return {boolean} True if the key was released within the given duration.
|
||||
|
@ -42809,7 +42813,8 @@ Phaser.Key.prototype = {
|
|||
* When you check this value it will return `true` if the Key is down, otherwise `false`.
|
||||
* You can only call justDown once per key press. It will only return `true` once, until the Key is released and pressed down again.
|
||||
* This allows you to use it in situations where you want to check if this key is down without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justDown
|
||||
* @property {boolean} justDown
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -42831,7 +42836,8 @@ Object.defineProperty(Phaser.Key.prototype, "justDown", {
|
|||
* When you check this value it will return `true` if the Key is up, otherwise `false`.
|
||||
* You can only call justUp once per key release. It will only return `true` once, until the Key is pressed down and released again.
|
||||
* This allows you to use it in situations where you want to check if this key is up without using a Signal, such as in a core game loop.
|
||||
*
|
||||
*
|
||||
* @name Phaser.Key#justUp
|
||||
* @property {boolean} justUp
|
||||
* @memberof Phaser.Key
|
||||
* @default false
|
||||
|
@ -42851,7 +42857,7 @@ Object.defineProperty(Phaser.Key.prototype, "justUp", {
|
|||
/**
|
||||
* An enabled key processes its update and dispatches events.
|
||||
* A key can be disabled momentarily at runtime instead of deleting it.
|
||||
*
|
||||
* @name Phaser.Key#enabled
|
||||
* @property {boolean} enabled
|
||||
* @memberof Phaser.Key
|
||||
* @default true
|
||||
|
@ -48863,7 +48869,7 @@ Phaser.BitmapData = function (game, key, width, height, skipPool) {
|
|||
* @property {PIXI.BaseTexture} baseTexture - The PIXI.BaseTexture.
|
||||
* @default
|
||||
*/
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.canvas, null, this.game.resolution);
|
||||
|
||||
/**
|
||||
* @property {PIXI.Texture} texture - The PIXI.Texture.
|
||||
|
@ -51185,6 +51191,635 @@ Phaser.BitmapData.getTransform = function (translateX, translateY, scaleX, scale
|
|||
|
||||
Phaser.BitmapData.prototype.constructor = Phaser.BitmapData;
|
||||
|
||||
/* jshint ignore:start */
|
||||
|
||||
/*
|
||||
Copyright (c) 2016, Mapbox
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class EarCut
|
||||
*/
|
||||
Phaser.EarCut = {};
|
||||
|
||||
Phaser.EarCut.Triangulate = function (data, holeIndices, dim) {
|
||||
|
||||
dim = dim || 2;
|
||||
|
||||
var hasHoles = holeIndices && holeIndices.length,
|
||||
outerLen = hasHoles ? holeIndices[0] * dim : data.length,
|
||||
outerNode = Phaser.EarCut.linkedList(data, 0, outerLen, dim, true),
|
||||
triangles = [];
|
||||
|
||||
if (!outerNode) return triangles;
|
||||
|
||||
var minX, minY, maxX, maxY, x, y, size;
|
||||
|
||||
if (hasHoles) outerNode = Phaser.EarCut.eliminateHoles(data, holeIndices, outerNode, dim);
|
||||
|
||||
// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
|
||||
if (data.length > 80 * dim) {
|
||||
minX = maxX = data[0];
|
||||
minY = maxY = data[1];
|
||||
|
||||
for (var i = dim; i < outerLen; i += dim) {
|
||||
x = data[i];
|
||||
y = data[i + 1];
|
||||
if (x < minX) minX = x;
|
||||
if (y < minY) minY = y;
|
||||
if (x > maxX) maxX = x;
|
||||
if (y > maxY) maxY = y;
|
||||
}
|
||||
|
||||
// minX, minY and size are later used to transform coords into integers for z-order calculation
|
||||
size = Math.max(maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
Phaser.EarCut.earcutLinked(outerNode, triangles, dim, minX, minY, size);
|
||||
|
||||
return triangles;
|
||||
};
|
||||
|
||||
// create a circular doubly linked list from polygon points in the specified winding order
|
||||
|
||||
Phaser.EarCut.linkedList = function (data, start, end, dim, clockwise) {
|
||||
var sum = 0,
|
||||
i, j, last;
|
||||
|
||||
// calculate original winding order of a polygon ring
|
||||
for (i = start, j = end - dim; i < end; i += dim) {
|
||||
sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
|
||||
j = i;
|
||||
}
|
||||
|
||||
// link points into circular doubly-linked list in the specified winding order
|
||||
if (clockwise === (sum > 0)) {
|
||||
for (i = start; i < end; i += dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
} else {
|
||||
for (i = end - dim; i >= start; i -= dim) last = Phaser.EarCut.insertNode(i, data[i], data[i + 1], last);
|
||||
}
|
||||
|
||||
return last;
|
||||
};
|
||||
|
||||
// eliminate colinear or duplicate points
|
||||
|
||||
Phaser.EarCut.filterPoints = function (start, end) {
|
||||
if (!start) return start;
|
||||
if (!end) end = start;
|
||||
|
||||
var p = start,
|
||||
again;
|
||||
do {
|
||||
again = false;
|
||||
|
||||
if (!p.steiner && (Phaser.EarCut.equals(p, p.next) || Phaser.EarCut.area(p.prev, p, p.next) === 0)) {
|
||||
Phaser.EarCut.removeNode(p);
|
||||
p = end = p.prev;
|
||||
if (p === p.next) return null;
|
||||
again = true;
|
||||
|
||||
} else {
|
||||
p = p.next;
|
||||
}
|
||||
} while (again || p !== end);
|
||||
|
||||
return end;
|
||||
};
|
||||
|
||||
// main ear slicing loop which triangulates a polygon (given as a linked list)
|
||||
|
||||
Phaser.EarCut.earcutLinked = function (ear, triangles, dim, minX, minY, size, pass) {
|
||||
if (!ear) return;
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
if (!pass && size) Phaser.EarCut.indexCurve(ear, minX, minY, size);
|
||||
|
||||
var stop = ear,
|
||||
prev, next;
|
||||
|
||||
// iterate through ears, slicing them one by one
|
||||
while (ear.prev !== ear.next) {
|
||||
prev = ear.prev;
|
||||
next = ear.next;
|
||||
|
||||
if (size ? Phaser.EarCut.isEarHashed(ear, minX, minY, size) : Phaser.EarCut.isEar(ear)) {
|
||||
// cut off the triangle
|
||||
triangles.push(prev.i / dim);
|
||||
triangles.push(ear.i / dim);
|
||||
triangles.push(next.i / dim);
|
||||
|
||||
Phaser.EarCut.removeNode(ear);
|
||||
|
||||
// skipping the next vertice leads to less sliver triangles
|
||||
ear = next.next;
|
||||
stop = next.next;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
ear = next;
|
||||
|
||||
// if we looped through the whole remaining polygon and can't find any more ears
|
||||
if (ear === stop) {
|
||||
// try filtering points and slicing again
|
||||
if (!pass) {
|
||||
Phaser.EarCut.earcutLinked(Phaser.EarCut.filterPoints(ear), triangles, dim, minX, minY, size, 1);
|
||||
|
||||
// if this didn't work, try curing all small self-intersections locally
|
||||
} else if (pass === 1) {
|
||||
ear = Phaser.EarCut.cureLocalIntersections(ear, triangles, dim);
|
||||
Phaser.EarCut.earcutLinked(ear, triangles, dim, minX, minY, size, 2);
|
||||
|
||||
// as a last resort, try splitting the remaining polygon into two
|
||||
} else if (pass === 2) {
|
||||
Phaser.EarCut.splitEarcut(ear, triangles, dim, minX, minY, size);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// check whether a polygon node forms a valid ear with adjacent nodes
|
||||
|
||||
Phaser.EarCut.isEar = function (ear) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// now make sure we don't have other points inside the potential ear
|
||||
var p = ear.next.next;
|
||||
|
||||
while (p !== ear.prev) {
|
||||
if (Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
Phaser.EarCut.isEarHashed = function (ear, minX, minY, size) {
|
||||
var a = ear.prev,
|
||||
b = ear,
|
||||
c = ear.next;
|
||||
|
||||
if (Phaser.EarCut.area(a, b, c) >= 0) return false; // reflex, can't be an ear
|
||||
|
||||
// triangle bbox; min & max are calculated like this for speed
|
||||
var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
|
||||
minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
|
||||
maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
|
||||
maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
|
||||
|
||||
// z-order range for the current triangle bbox;
|
||||
var minZ = Phaser.EarCut.zOrder(minTX, minTY, minX, minY, size),
|
||||
maxZ = Phaser.EarCut.zOrder(maxTX, maxTY, minX, minY, size);
|
||||
|
||||
// first look for points inside the triangle in increasing z-order
|
||||
var p = ear.nextZ;
|
||||
|
||||
while (p && p.z <= maxZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.nextZ;
|
||||
}
|
||||
|
||||
// then look for points in decreasing z-order
|
||||
p = ear.prevZ;
|
||||
|
||||
while (p && p.z >= minZ) {
|
||||
if (p !== ear.prev && p !== ear.next &&
|
||||
Phaser.EarCut.pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
|
||||
Phaser.EarCut.area(p.prev, p, p.next) >= 0) return false;
|
||||
p = p.prevZ;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// go through all polygon nodes and cure small local self-intersections
|
||||
|
||||
Phaser.EarCut.cureLocalIntersections = function (start, triangles, dim) {
|
||||
var p = start;
|
||||
do {
|
||||
var a = p.prev,
|
||||
b = p.next.next;
|
||||
|
||||
// a self-intersection where edge (v[i-1],v[i]) intersects (v[i+1],v[i+2])
|
||||
if (Phaser.EarCut.intersects(a, p, p.next, b) && Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a)) {
|
||||
|
||||
triangles.push(a.i / dim);
|
||||
triangles.push(p.i / dim);
|
||||
triangles.push(b.i / dim);
|
||||
|
||||
// remove two nodes involved
|
||||
Phaser.EarCut.removeNode(p);
|
||||
Phaser.EarCut.removeNode(p.next);
|
||||
|
||||
p = start = b;
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
// try splitting polygon into two and triangulate them independently
|
||||
|
||||
Phaser.EarCut.splitEarcut = function (start, triangles, dim, minX, minY, size) {
|
||||
// look for a valid diagonal that divides the polygon into two
|
||||
var a = start;
|
||||
do {
|
||||
var b = a.next.next;
|
||||
while (b !== a.prev) {
|
||||
if (a.i !== b.i && Phaser.EarCut.isValidDiagonal(a, b)) {
|
||||
// split the polygon in two by the diagonal
|
||||
var c = Phaser.EarCut.splitPolygon(a, b);
|
||||
|
||||
// filter colinear points around the cuts
|
||||
a = Phaser.EarCut.filterPoints(a, a.next);
|
||||
c = Phaser.EarCut.filterPoints(c, c.next);
|
||||
|
||||
// run earcut on each half
|
||||
Phaser.EarCut.earcutLinked(a, triangles, dim, minX, minY, size);
|
||||
Phaser.EarCut.earcutLinked(c, triangles, dim, minX, minY, size);
|
||||
return;
|
||||
}
|
||||
b = b.next;
|
||||
}
|
||||
a = a.next;
|
||||
} while (a !== start);
|
||||
};
|
||||
|
||||
// link every hole into the outer loop, producing a single-ring polygon without holes
|
||||
|
||||
Phaser.EarCut.eliminateHoles = function (data, holeIndices, outerNode, dim) {
|
||||
var queue = [],
|
||||
i, len, start, end, list;
|
||||
|
||||
for (i = 0, len = holeIndices.length; i < len; i++) {
|
||||
start = holeIndices[i] * dim;
|
||||
end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
|
||||
list = Phaser.EarCut.linkedList(data, start, end, dim, false);
|
||||
if (list === list.next) list.steiner = true;
|
||||
queue.push(Phaser.EarCut.getLeftmost(list));
|
||||
}
|
||||
|
||||
queue.sort(compareX);
|
||||
|
||||
// process holes from left to right
|
||||
for (i = 0; i < queue.length; i++) {
|
||||
Phaser.EarCut.eliminateHole(queue[i], outerNode);
|
||||
outerNode = Phaser.EarCut.filterPoints(outerNode, outerNode.next);
|
||||
}
|
||||
|
||||
return outerNode;
|
||||
};
|
||||
|
||||
Phaser.EarCut.compareX = function (a, b) {
|
||||
return a.x - b.x;
|
||||
};
|
||||
|
||||
// find a bridge between vertices that connects hole with an outer ring and and link it
|
||||
|
||||
Phaser.EarCut.eliminateHole = function (hole, outerNode) {
|
||||
outerNode = Phaser.EarCut.findHoleBridge(hole, outerNode);
|
||||
if (outerNode) {
|
||||
var b = Phaser.EarCut.splitPolygon(outerNode, hole);
|
||||
Phaser.EarCut.filterPoints(b, b.next);
|
||||
}
|
||||
};
|
||||
|
||||
// David Eberly's algorithm for finding a bridge between hole and outer polygon
|
||||
|
||||
Phaser.EarCut.findHoleBridge = function (hole, outerNode) {
|
||||
var p = outerNode,
|
||||
hx = hole.x,
|
||||
hy = hole.y,
|
||||
qx = -Infinity,
|
||||
m;
|
||||
|
||||
// find a segment intersected by a ray from the hole's leftmost point to the left;
|
||||
// segment's endpoint with lesser x will be potential connection point
|
||||
do {
|
||||
if (hy <= p.y && hy >= p.next.y) {
|
||||
var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
|
||||
if (x <= hx && x > qx) {
|
||||
qx = x;
|
||||
m = p.x < p.next.x ? p : p.next;
|
||||
}
|
||||
}
|
||||
p = p.next;
|
||||
} while (p !== outerNode);
|
||||
|
||||
if (!m) return null;
|
||||
|
||||
if (hole.x === m.x) return m.prev; // hole touches outer segment; pick lower endpoint
|
||||
|
||||
// look for points inside the triangle of hole point, segment intersection and endpoint;
|
||||
// if there are no points found, we have a valid connection;
|
||||
// otherwise choose the point of the minimum angle with the ray as connection point
|
||||
|
||||
var stop = m,
|
||||
tanMin = Infinity,
|
||||
tan;
|
||||
|
||||
p = m.next;
|
||||
|
||||
while (p !== stop) {
|
||||
if (hx >= p.x && p.x >= m.x &&
|
||||
Phaser.EarCut.pointInTriangle(hy < m.y ? hx : qx, hy, m.x, m.y, hy < m.y ? qx : hx, hy, p.x, p.y)) {
|
||||
|
||||
tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
|
||||
|
||||
if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && Phaser.EarCut.locallyInside(p, hole)) {
|
||||
m = p;
|
||||
tanMin = tan;
|
||||
}
|
||||
}
|
||||
|
||||
p = p.next;
|
||||
}
|
||||
|
||||
return m;
|
||||
};
|
||||
|
||||
// interlink polygon nodes in z-order
|
||||
|
||||
Phaser.EarCut.indexCurve = function (start, minX, minY, size) {
|
||||
var p = start;
|
||||
do {
|
||||
if (p.z === null) p.z = Phaser.EarCut.zOrder(p.x, p.y, minX, minY, size);
|
||||
p.prevZ = p.prev;
|
||||
p.nextZ = p.next;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
p.prevZ.nextZ = null;
|
||||
p.prevZ = null;
|
||||
|
||||
Phaser.EarCut.sortLinked(p);
|
||||
};
|
||||
|
||||
// Simon Tatham's linked list merge sort algorithm
|
||||
// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
|
||||
|
||||
Phaser.EarCut.sortLinked = function (list) {
|
||||
var i, p, q, e, tail, numMerges, pSize, qSize,
|
||||
inSize = 1;
|
||||
|
||||
do {
|
||||
p = list;
|
||||
list = null;
|
||||
tail = null;
|
||||
numMerges = 0;
|
||||
|
||||
while (p) {
|
||||
numMerges++;
|
||||
q = p;
|
||||
pSize = 0;
|
||||
for (i = 0; i < inSize; i++) {
|
||||
pSize++;
|
||||
q = q.nextZ;
|
||||
if (!q) break;
|
||||
}
|
||||
|
||||
qSize = inSize;
|
||||
|
||||
while (pSize > 0 || (qSize > 0 && q)) {
|
||||
|
||||
if (pSize === 0) {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
} else if (qSize === 0 || !q) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else if (p.z <= q.z) {
|
||||
e = p;
|
||||
p = p.nextZ;
|
||||
pSize--;
|
||||
} else {
|
||||
e = q;
|
||||
q = q.nextZ;
|
||||
qSize--;
|
||||
}
|
||||
|
||||
if (tail) tail.nextZ = e;
|
||||
else list = e;
|
||||
|
||||
e.prevZ = tail;
|
||||
tail = e;
|
||||
}
|
||||
|
||||
p = q;
|
||||
}
|
||||
|
||||
tail.nextZ = null;
|
||||
inSize *= 2;
|
||||
|
||||
} while (numMerges > 1);
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
// z-order of a point given coords and size of the data bounding box
|
||||
|
||||
Phaser.EarCut.zOrder = function (x, y, minX, minY, size) {
|
||||
// coords are transformed into non-negative 15-bit integer range
|
||||
x = 32767 * (x - minX) / size;
|
||||
y = 32767 * (y - minY) / size;
|
||||
|
||||
x = (x | (x << 8)) & 0x00FF00FF;
|
||||
x = (x | (x << 4)) & 0x0F0F0F0F;
|
||||
x = (x | (x << 2)) & 0x33333333;
|
||||
x = (x | (x << 1)) & 0x55555555;
|
||||
|
||||
y = (y | (y << 8)) & 0x00FF00FF;
|
||||
y = (y | (y << 4)) & 0x0F0F0F0F;
|
||||
y = (y | (y << 2)) & 0x33333333;
|
||||
y = (y | (y << 1)) & 0x55555555;
|
||||
|
||||
return x | (y << 1);
|
||||
};
|
||||
|
||||
// find the leftmost node of a polygon ring
|
||||
|
||||
Phaser.EarCut.getLeftmost = function (start) {
|
||||
var p = start,
|
||||
leftmost = start;
|
||||
do {
|
||||
if (p.x < leftmost.x) leftmost = p;
|
||||
p = p.next;
|
||||
} while (p !== start);
|
||||
|
||||
return leftmost;
|
||||
};
|
||||
|
||||
// check if a point lies within a convex triangle
|
||||
|
||||
Phaser.EarCut.pointInTriangle = function (ax, ay, bx, by, cx, cy, px, py) {
|
||||
return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
|
||||
(ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
|
||||
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
|
||||
};
|
||||
|
||||
// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
|
||||
|
||||
Phaser.EarCut.isValidDiagonal = function (a, b) {
|
||||
return Phaser.EarCut.equals(a, b) || a.next.i !== b.i && a.prev.i !== b.i && !Phaser.EarCut.intersectsPolygon(a, b) &&
|
||||
Phaser.EarCut.locallyInside(a, b) && Phaser.EarCut.locallyInside(b, a) && Phaser.EarCut.middleInside(a, b);
|
||||
};
|
||||
|
||||
// signed area of a triangle
|
||||
|
||||
Phaser.EarCut.area = function (p, q, r) {
|
||||
return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
|
||||
};
|
||||
|
||||
// check if two points are equal
|
||||
|
||||
Phaser.EarCut.equals = function (p1, p2) {
|
||||
return p1.x === p2.x && p1.y === p2.y;
|
||||
};
|
||||
|
||||
// check if two segments intersect
|
||||
|
||||
Phaser.EarCut.intersects = function (p1, q1, p2, q2) {
|
||||
return Phaser.EarCut.area(p1, q1, p2) > 0 !== Phaser.EarCut.area(p1, q1, q2) > 0 &&
|
||||
Phaser.EarCut.area(p2, q2, p1) > 0 !== Phaser.EarCut.area(p2, q2, q1) > 0;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal intersects any polygon segments
|
||||
|
||||
Phaser.EarCut.intersectsPolygon = function (a, b) {
|
||||
var p = a;
|
||||
do {
|
||||
if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
|
||||
Phaser.EarCut.intersects(p, p.next, a, b)) return true;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// check if a polygon diagonal is locally inside the polygon
|
||||
|
||||
Phaser.EarCut.locallyInside = function (a, b) {
|
||||
return Phaser.EarCut.area(a.prev, a, a.next) < 0 ?
|
||||
Phaser.EarCut.area(a, b, a.next) >= 0 && Phaser.EarCut.area(a, a.prev, b) >= 0 :
|
||||
Phaser.EarCut.area(a, b, a.prev) < 0 || Phaser.EarCut.area(a, a.next, b) < 0;
|
||||
};
|
||||
|
||||
// check if the middle point of a polygon diagonal is inside the polygon
|
||||
|
||||
Phaser.EarCut.middleInside = function (a, b) {
|
||||
var p = a,
|
||||
inside = false,
|
||||
px = (a.x + b.x) / 2,
|
||||
py = (a.y + b.y) / 2;
|
||||
do {
|
||||
if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
|
||||
inside = !inside;
|
||||
p = p.next;
|
||||
} while (p !== a);
|
||||
|
||||
return inside;
|
||||
};
|
||||
|
||||
// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
|
||||
// if one belongs to the outer ring and another to a hole, it merges it into a single ring
|
||||
|
||||
Phaser.EarCut.splitPolygon = function (a, b) {
|
||||
var a2 = new Phaser.EarCut.Node(a.i, a.x, a.y),
|
||||
b2 = new Phaser.EarCut.Node(b.i, b.x, b.y),
|
||||
an = a.next,
|
||||
bp = b.prev;
|
||||
|
||||
a.next = b;
|
||||
b.prev = a;
|
||||
|
||||
a2.next = an;
|
||||
an.prev = a2;
|
||||
|
||||
b2.next = a2;
|
||||
a2.prev = b2;
|
||||
|
||||
bp.next = b2;
|
||||
b2.prev = bp;
|
||||
|
||||
return b2;
|
||||
};
|
||||
|
||||
// create a node and optionally link it with previous one (in a circular doubly linked list)
|
||||
|
||||
Phaser.EarCut.insertNode = function (i, x, y, last) {
|
||||
var p = new Phaser.EarCut.Node(i, x, y);
|
||||
|
||||
if (!last) {
|
||||
p.prev = p;
|
||||
p.next = p;
|
||||
|
||||
} else {
|
||||
p.next = last.next;
|
||||
p.prev = last;
|
||||
last.next.prev = p;
|
||||
last.next = p;
|
||||
}
|
||||
return p;
|
||||
};
|
||||
|
||||
Phaser.EarCut.removeNode = function (p) {
|
||||
p.next.prev = p.prev;
|
||||
p.prev.next = p.next;
|
||||
|
||||
if (p.prevZ) p.prevZ.nextZ = p.nextZ;
|
||||
if (p.nextZ) p.nextZ.prevZ = p.prevZ;
|
||||
};
|
||||
|
||||
Phaser.EarCut.Node = function (i, x, y) {
|
||||
// vertice index in coordinates array
|
||||
this.i = i;
|
||||
|
||||
// vertex coordinates
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
||||
// previous and next vertice nodes in a polygon ring
|
||||
this.prev = null;
|
||||
this.next = null;
|
||||
|
||||
// z-order curve value
|
||||
this.z = null;
|
||||
|
||||
// previous and next nodes in z-order
|
||||
this.prevZ = null;
|
||||
this.nextZ = null;
|
||||
|
||||
// indicates whether this is a steiner point
|
||||
this.steiner = false;
|
||||
};
|
||||
|
||||
/* jshint ignore:end */
|
||||
|
||||
/**
|
||||
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||||
*/
|
||||
|
@ -61688,7 +62323,7 @@ Phaser.RequestAnimationFrame = function(game, forceSetTimeOut) {
|
|||
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; x++)
|
||||
{
|
||||
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -68795,8 +69430,9 @@ Phaser.Animation.prototype = {
|
|||
|
||||
if (frameIndex)
|
||||
{
|
||||
// Set the current frame index to the found index. Subtract 1 so that it animates to the desired frame on update.
|
||||
this._frameIndex = frameIndex - 1;
|
||||
// Set the current frame index to the found index. Subtract a directional offset so that it animates to the desired frame on update.
|
||||
var directionalOffset = this.isReversed ? -1 : 1;
|
||||
this._frameIndex = frameIndex - directionalOffset;
|
||||
|
||||
// Make the animation update at next update
|
||||
this._timeNextFrame = this.game.time.time;
|
||||
|
@ -69898,6 +70534,10 @@ Phaser.AnimationParser = {
|
|||
*/
|
||||
spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames) {
|
||||
|
||||
if (frameMax === undefined) { frameMax = -1; }
|
||||
if (margin === undefined) { margin = 0; }
|
||||
if (spacing === undefined) { spacing = 0; }
|
||||
|
||||
var img = key;
|
||||
|
||||
if (typeof key === 'string')
|
||||
|
@ -70477,7 +71117,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData(),
|
||||
fileFormat: extension
|
||||
|
@ -70530,7 +71170,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||
frameData: new Phaser.FrameData()
|
||||
};
|
||||
|
@ -70743,7 +71383,7 @@ Phaser.Cache.prototype = {
|
|||
url: url,
|
||||
data: data,
|
||||
font: null,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (xSpacing === undefined) { xSpacing = 0; }
|
||||
|
@ -70925,7 +71565,7 @@ Phaser.Cache.prototype = {
|
|||
frameHeight: frameHeight,
|
||||
margin: margin,
|
||||
spacing: spacing,
|
||||
base: new PIXI.BaseTexture(data),
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution),
|
||||
frameData: Phaser.AnimationParser.spriteSheet(this.game, data, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames)
|
||||
};
|
||||
|
||||
|
@ -70951,7 +71591,7 @@ Phaser.Cache.prototype = {
|
|||
key: key,
|
||||
url: url,
|
||||
data: data,
|
||||
base: new PIXI.BaseTexture(data)
|
||||
base: new PIXI.BaseTexture(data, null, this.game.resolution)
|
||||
};
|
||||
|
||||
if (format === Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||
|
@ -97235,7 +97875,7 @@ Phaser.TilemapLayer = function (game, tilemap, index, width, height) {
|
|||
*/
|
||||
this.context = this.canvas.getContext('2d');
|
||||
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas)));
|
||||
this.setTexture(new PIXI.Texture(new PIXI.BaseTexture(this.canvas, null, this.game.resolution)));
|
||||
|
||||
/**
|
||||
* The const type of this object.
|
||||
|
@ -99678,11 +100318,8 @@ Phaser.Particles.prototype = {
|
|||
* @return {Phaser.Emitter} The emitter that was added.
|
||||
*/
|
||||
add: function (emitter) {
|
||||
|
||||
this.emitters[emitter.name] = emitter;
|
||||
|
||||
this.emitters[emitter.id] = emitter;
|
||||
return emitter;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -99691,9 +100328,7 @@ Phaser.Particles.prototype = {
|
|||
* @param {Phaser.Emitter} emitter - The emitter to remove.
|
||||
*/
|
||||
remove: function (emitter) {
|
||||
|
||||
delete this.emitters[emitter.name];
|
||||
|
||||
delete this.emitters[emitter.id];
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -99702,7 +100337,6 @@ Phaser.Particles.prototype = {
|
|||
* @protected
|
||||
*/
|
||||
update: function () {
|
||||
|
||||
for (var key in this.emitters)
|
||||
{
|
||||
if (this.emitters[key].exists)
|
||||
|
@ -99739,7 +100373,7 @@ Phaser.Particles.Arcade = {};
|
|||
* Emitter is a lightweight particle emitter that uses Arcade Physics.
|
||||
* It can be used for one-time explosions or for continuous effects like rain and fire.
|
||||
* All it really does is launch Particle objects out at set intervals, and fixes their positions and velocities accordingly.
|
||||
*
|
||||
*
|
||||
* @class Phaser.Particles.Arcade.Emitter
|
||||
* @constructor
|
||||
* @extends Phaser.Group
|
||||
|
@ -99758,10 +100392,16 @@ Phaser.Particles.Arcade.Emitter = function (game, x, y, maxParticles) {
|
|||
|
||||
Phaser.Group.call(this, game);
|
||||
|
||||
/**
|
||||
* @property {number} _id - Internal ID for this emitter -- only used by the Particle System in most cases
|
||||
* @private
|
||||
*/
|
||||
this._id = this.game.particles.ID++;
|
||||
|
||||
/**
|
||||
* @property {string} name - A handy string name for this emitter. Can be set to anything.
|
||||
*/
|
||||
this.name = 'emitter' + this.game.particles.ID++;
|
||||
this.name = 'emitter' + this.id;
|
||||
|
||||
/**
|
||||
* @property {number} type - Internal Phaser Type value.
|
||||
|
@ -99996,7 +100636,7 @@ Phaser.Particles.Arcade.Emitter.prototype.constructor = Phaser.Particles.Arcade.
|
|||
|
||||
/**
|
||||
* Called automatically by the game loop, decides when to launch particles and when to "die".
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#update
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.update = function () {
|
||||
|
@ -100168,7 +100808,7 @@ Phaser.Particles.Arcade.Emitter.prototype.revive = function () {
|
|||
|
||||
/**
|
||||
* Call this function to emit the given quantity of particles at all once (an explosion)
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#explode
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [quantity=0] - How many particles to launch.
|
||||
|
@ -100190,7 +100830,7 @@ Phaser.Particles.Arcade.Emitter.prototype.explode = function (lifespan, quantity
|
|||
* Each time the flow is run the quantity number of particles will be emitted together.
|
||||
* If you set the total to be 20 and quantity to be 5 then flow will emit 4 times in total (4 x 5 = 20 total)
|
||||
* If you set the total to be -1 then no quantity cap is used and it will keep emitting.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#flow
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
* @param {number} [frequency=250] - Frequency is how often to emit the particles, given in ms.
|
||||
|
@ -100233,7 +100873,7 @@ Phaser.Particles.Arcade.Emitter.prototype.flow = function (lifespan, frequency,
|
|||
|
||||
/**
|
||||
* Call this function to start emitting particles.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#start
|
||||
* @param {boolean} [explode=true] - Whether the particles should all burst out at once (true) or at the frequency given (false).
|
||||
* @param {number} [lifespan=0] - How long each particle lives once emitted in ms. 0 = forever.
|
||||
|
@ -100411,7 +101051,7 @@ Phaser.Particles.Arcade.Emitter.prototype.emitParticle = function (x, y, key, fr
|
|||
|
||||
/**
|
||||
* Destroys this Emitter, all associated child Particles and then removes itself from the Particle Manager.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#destroy
|
||||
*/
|
||||
Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
||||
|
@ -100424,7 +101064,7 @@ Phaser.Particles.Arcade.Emitter.prototype.destroy = function () {
|
|||
|
||||
/**
|
||||
* A more compact way of setting the width and height of the emitter.
|
||||
*
|
||||
*
|
||||
* @method Phaser.Particles.Arcade.Emitter#setSize
|
||||
* @param {number} width - The desired width of the emitter (particles are spawned randomly within these dimensions).
|
||||
* @param {number} height - The desired height of the emitter.
|
||||
|
@ -100615,6 +101255,16 @@ Phaser.Particles.Arcade.Emitter.prototype.at = function (object) {
|
|||
|
||||
};
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#id
|
||||
* @property {number} id - Gets the internal ID that represents this emitter.
|
||||
*/
|
||||
Object.defineProperty(Phaser.Particles.Arcade.Emitter.prototype, "id", {
|
||||
get: function () {
|
||||
return this._id;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @name Phaser.Particles.Arcade.Emitter#width
|
||||
* @property {number} width - Gets or sets the width of the Emitter. This is the region in which a particle can be emitted.
|
||||
|
@ -102522,12 +103172,12 @@ Phaser.Video = function (game, key, url) {
|
|||
*/
|
||||
if (this.video && !url)
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video);
|
||||
this.baseTexture = new PIXI.BaseTexture(this.video, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source);
|
||||
this.baseTexture = new PIXI.BaseTexture(Phaser.Cache.DEFAULT.baseTexture.source, null, this.game.resolution);
|
||||
this.baseTexture.forceLoaded(this.width, this.height);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
31
v2-community/build/phaser.min.js
vendored
31
v2-community/build/phaser.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Phaser - http://phaser.io
|
||||
*
|
||||
* v2.7.0 "World's End" - Built: Wed Nov 23 2016 00:49:00
|
||||
* v2.7.1 "2016-11-28" - Built: Mon Nov 28 2016 18:47:39
|
||||
*
|
||||
* By Richard Davey http://www.photonstorm.com @photonstorm
|
||||
*
|
||||
|
@ -6900,8 +6900,9 @@ PIXI.CanvasRenderer.prototype.mapBlendModes = function () {
|
|||
* @constructor
|
||||
* @param source {String|Canvas} the source object (image or canvas)
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
*/
|
||||
PIXI.BaseTexture = function(source, scaleMode)
|
||||
PIXI.BaseTexture = function(source, scaleMode, resolution)
|
||||
{
|
||||
/**
|
||||
* The Resolution of the texture.
|
||||
|
@ -6909,7 +6910,7 @@ PIXI.BaseTexture = function(source, scaleMode)
|
|||
* @property resolution
|
||||
* @type Number
|
||||
*/
|
||||
this.resolution = 1;
|
||||
this.resolution = resolution || 1;
|
||||
|
||||
/**
|
||||
* [read-only] The width of the base texture set when the image has loaded
|
||||
|
@ -7125,9 +7126,10 @@ PIXI.BaseTexture.prototype.unloadFromGPU = function()
|
|||
* @method fromCanvas
|
||||
* @param canvas {Canvas} The canvas element source of the texture
|
||||
* @param scaleMode {Number} See {{#crossLink "PIXI/scaleModes:property"}}PIXI.scaleModes{{/crossLink}} for possible values
|
||||
* @param [resolution] {Number} the resolution of the texture (for HiDPI displays)
|
||||
* @return {BaseTexture}
|
||||
*/
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
||||
PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode, resolution)
|
||||
{
|
||||
if (canvas.width === 0)
|
||||
{
|
||||
|
@ -7139,7 +7141,9 @@ PIXI.BaseTexture.fromCanvas = function(canvas, scaleMode)
|
|||
canvas.height = 1;
|
||||
}
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode);
|
||||
resolution = resolution || 1;
|
||||
|
||||
return new PIXI.BaseTexture(canvas, scaleMode, resolution);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
File diff suppressed because one or more lines are too long
4
v2-community/build/pixi.min.js
vendored
4
v2-community/build/pixi.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1450,7 +1450,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1783,7 +1783,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1539,7 +1539,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1350,7 +1350,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<dt>
|
||||
<h4 class="name "
|
||||
id="BaseTexture"><span class="type-signature"></span>new BaseTexture<span class="signature">(source, scaleMode)</span><span class="type-signature"></span></h4>
|
||||
id="BaseTexture"><span class="type-signature"></span>new BaseTexture<span class="signature">(source, scaleMode, <span class="optional">resolution</span>)</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
|
@ -1381,6 +1381,8 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
<th>Type</th>
|
||||
|
||||
|
||||
<th>Argument</th>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1409,6 +1411,14 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1432,6 +1442,14 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1439,6 +1457,39 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class="name"><code>resolution</code></td>
|
||||
|
||||
|
||||
<td class="type">
|
||||
|
||||
|
||||
<span class="param-type">Number</span>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
<optional><br>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
<td class="description last"><p>the resolution of the texture (for HiDPI displays)</p></td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
@ -1548,7 +1599,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-51">line 51</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-52">line 52</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1604,7 +1655,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-33">line 33</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-34">line 34</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1660,7 +1711,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-86">line 86</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-87">line 87</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1719,7 +1770,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-68">line 68</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-69">line 69</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1775,7 +1826,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-16">line 16</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-17">line 17</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1834,7 +1885,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-42">line 42</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-43">line 43</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1891,7 +1942,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-122">line 122</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-123">line 123</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1947,7 +1998,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-60">line 60</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-61">line 61</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2003,7 +2054,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-95">line 95</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-96">line 96</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2059,7 +2110,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-24">line 24</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-25">line 25</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2084,7 +2135,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<dt>
|
||||
<h4 class="name "
|
||||
id=".fromCanvas"><span class="type-signature"><static> </span>fromCanvas<span class="signature">(canvas, scaleMode)</span><span class="type-signature"> → {<a href="PIXI.BaseTexture.html">PIXI.BaseTexture</a>}</span></h4>
|
||||
id=".fromCanvas"><span class="type-signature"><static> </span>fromCanvas<span class="signature">(canvas, scaleMode, <span class="optional">resolution</span>)</span><span class="type-signature"> → {<a href="PIXI.BaseTexture.html">PIXI.BaseTexture</a>}</span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
|
@ -2115,6 +2166,8 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
<th>Type</th>
|
||||
|
||||
|
||||
<th>Argument</th>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -2140,6 +2193,14 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -2163,6 +2224,14 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -2170,6 +2239,39 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td class="name"><code>resolution</code></td>
|
||||
|
||||
|
||||
<td class="type">
|
||||
|
||||
|
||||
<span class="param-type">Number</span>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
<td class="attributes">
|
||||
|
||||
<optional><br>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
|
||||
<td class="description last"><p>the resolution of the texture (for HiDPI displays)</p></td>
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
@ -2219,7 +2321,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-231">line 231</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-232">line 232</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2289,7 +2391,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-161">line 161</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-162">line 162</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2359,7 +2461,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-190">line 190</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-191">line 191</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2505,7 +2607,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-144">line 144</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-145">line 145</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2575,7 +2677,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-203">line 203</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-204">line 204</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2705,7 +2807,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-178">line 178</a>
|
||||
<a href="src_pixi_textures_BaseTexture.js.html">pixi/textures/BaseTexture.js</a>, <a href="src_pixi_textures_BaseTexture.js.html#sunlight-1-line-179">line 179</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2754,7 +2856,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1972,7 +1972,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1456,7 +1456,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1721,7 +1721,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2702,7 +2702,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1952,7 +1952,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1869,7 +1869,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3372,7 +3372,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2016,7 +2016,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2677,7 +2677,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1471,7 +1471,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1655,7 +1655,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1925,7 +1925,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2192,7 +2192,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1869,7 +1869,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -4049,7 +4049,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1925,7 +1925,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:04 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2692,7 +2692,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:04 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1869,7 +1869,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:04 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2999,7 +2999,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:04 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2390,7 +2390,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:04 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3666,7 +3666,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:32 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:04 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1596,7 +1596,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:31 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:48:03 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1872,7 +1872,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-800">line 800</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-801">line 801</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1928,7 +1928,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-739">line 739</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-740">line 740</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1984,7 +1984,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-726">line 726</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-727">line 727</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2781,7 +2781,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-672">line 672</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-673">line 673</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2837,7 +2837,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-706">line 706</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-707">line 707</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2893,7 +2893,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-777">line 777</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-778">line 778</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3194,7 +3194,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-828">line 828</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-829">line 829</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3264,7 +3264,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-642">line 642</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-643">line 643</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3334,7 +3334,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-608">line 608</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-609">line 609</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3473,7 +3473,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-531">line 531</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-532">line 532</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3543,7 +3543,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-365">line 365</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-366">line 366</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3613,7 +3613,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-379">line 379</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-380">line 380</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -3991,7 +3991,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-563">line 563</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-564">line 564</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -4598,7 +4598,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-334">line 334</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-335">line 335</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -4668,7 +4668,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-393">line 393</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-394">line 394</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -4787,7 +4787,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-595">line 595</a>
|
||||
<a href="src_animation_Animation.js.html">animation/Animation.js</a>, <a href="src_animation_Animation.js.html#sunlight-1-line-596">line 596</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -4836,7 +4836,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3798,7 +3798,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1573,7 +1573,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-109">line 109</a>
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-113">line 113</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1735,7 +1735,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-225">line 225</a>
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-229">line 229</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -1897,7 +1897,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-168">line 168</a>
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-172">line 172</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2478,7 +2478,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-287">line 287</a>
|
||||
<a href="src_animation_AnimationParser.js.html">animation/AnimationParser.js</a>, <a href="src_animation_AnimationParser.js.html#sunlight-1-line-291">line 291</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
@ -2527,7 +2527,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3057,7 +3057,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:20 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3289,7 +3289,7 @@ Phaser.ArrayUtils.numberArrayStep(0);
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2346,7 +2346,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -16142,7 +16142,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -9052,7 +9052,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -8023,76 +8023,6 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name "
|
||||
id="kill"><span class="type-signature"></span>kill<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<div class="description">
|
||||
<p>Kills the Bullet, freeing it up for re-use by the Weapon bullet pool.<br>Also dispatches the <code>Weapon.onKill</code> signal.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_plugins_weapon_Bullet.js.html">plugins/weapon/Bullet.js</a>, <a href="src_plugins_weapon_Bullet.js.html#sunlight-1-line-41">line 41</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
@ -8163,6 +8093,76 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
||||
<dt>
|
||||
<h4 class="name "
|
||||
id="kill"><span class="type-signature"></span>kill<span class="signature">()</span><span class="type-signature"></span></h4>
|
||||
|
||||
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<div class="description">
|
||||
<p>Kills the Bullet, freeing it up for re-use by the Weapon bullet pool.<br>Also dispatches the <code>Weapon.onKill</code> signal.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="details">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dt class="tag-source">Source -
|
||||
<a href="src_plugins_weapon_Bullet.js.html">plugins/weapon/Bullet.js</a>, <a href="src_plugins_weapon_Bullet.js.html#sunlight-1-line-41">line 41</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
|
||||
|
||||
|
@ -11373,7 +11373,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:54 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -13616,7 +13616,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -16352,7 +16352,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -5581,7 +5581,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3678,7 +3678,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2213,7 +2213,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -5078,7 +5078,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -12564,7 +12564,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1519,7 +1519,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1734,7 +1734,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:21 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1573,7 +1573,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2510,7 +2510,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1824,7 +1824,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2711,7 +2711,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1767,7 +1767,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1630,7 +1630,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1700,7 +1700,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1652,7 +1652,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1748,7 +1748,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1518,7 +1518,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1763,7 +1763,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1591,7 +1591,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1908,7 +1908,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2172,7 +2172,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:55 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1613,7 +1613,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1796,7 +1796,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1692,7 +1692,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1898,7 +1898,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1518,7 +1518,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2695,7 +2695,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -7645,7 +7645,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -2926,7 +2926,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:23 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -6791,7 +6791,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:22 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -3442,7 +3442,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:23 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1877,7 +1877,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:23 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1877,7 +1877,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:23 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
|
@ -1877,7 +1877,7 @@ return {number} The total number of PathPoints in this Path.</a>
|
|||
|
||||
<span class="jsdoc-message">
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
||||
on Wed Nov 23 2016 00:49:23 GMT+0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
on Mon Nov 28 2016 18:47:56 GMT+0200 (EET) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue