11321 lines
468 KiB
JavaScript
11321 lines
468 KiB
JavaScript
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
switch (op[0]) {
|
|
case 0: case 1: t = op; break;
|
|
case 4: _.label++; return { value: op[1], done: false };
|
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
if (t[2]) _.ops.pop();
|
|
_.trys.pop(); continue;
|
|
}
|
|
op = body.call(thisArg, _);
|
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
}
|
|
};
|
|
Array.prototype.findIndex = function (predicate) {
|
|
function findIndex(array, predicate) {
|
|
for (var i = 0, len = array.length; i < len; i++) {
|
|
if (predicate.call(arguments[2], array[i], i, array)) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
return findIndex(this, predicate);
|
|
};
|
|
Array.prototype.any = function (predicate) {
|
|
function any(array, predicate) {
|
|
return array.findIndex(predicate) > -1;
|
|
}
|
|
return any(this, predicate);
|
|
};
|
|
Array.prototype.firstOrDefault = function (predicate) {
|
|
function firstOrDefault(array, predicate) {
|
|
var index = array.findIndex(predicate);
|
|
return index == -1 ? null : array[index];
|
|
}
|
|
return firstOrDefault(this, predicate);
|
|
};
|
|
Array.prototype.find = function (predicate) {
|
|
function find(array, predicate) {
|
|
return array.firstOrDefault(predicate);
|
|
}
|
|
return find(this, predicate);
|
|
};
|
|
Array.prototype.where = function (predicate) {
|
|
function where(array, predicate) {
|
|
if (typeof (array.reduce) === "function") {
|
|
return array.reduce(function (ret, element, index) {
|
|
if (predicate.call(arguments[2], element, index, array)) {
|
|
ret.push(element);
|
|
}
|
|
return ret;
|
|
}, []);
|
|
}
|
|
else {
|
|
var ret = [];
|
|
for (var i = 0, len = array.length; i < len; i++) {
|
|
var element = array[i];
|
|
if (predicate.call(arguments[2], element, i, array)) {
|
|
ret.push(element);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
}
|
|
return where(this, predicate);
|
|
};
|
|
Array.prototype.count = function (predicate) {
|
|
function count(array, predicate) {
|
|
return array.where(predicate).length;
|
|
}
|
|
return count(this, predicate);
|
|
};
|
|
Array.prototype.findAll = function (predicate) {
|
|
function findAll(array, predicate) {
|
|
return array.where(predicate);
|
|
}
|
|
return findAll(this, predicate);
|
|
};
|
|
Array.prototype.contains = function (value) {
|
|
function contains(array, value) {
|
|
for (var i = 0, len = array.length; i < len; i++) {
|
|
if (array[i] instanceof egret.HashObject && value instanceof egret.HashObject) {
|
|
if (array[i].hashCode == value.hashCode)
|
|
return true;
|
|
}
|
|
if (array[i] == value) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
return contains(this, value);
|
|
};
|
|
Array.prototype.removeAll = function (predicate) {
|
|
function removeAll(array, predicate) {
|
|
var index;
|
|
do {
|
|
index = array.findIndex(predicate);
|
|
if (index >= 0) {
|
|
array.splice(index, 1);
|
|
}
|
|
} while (index >= 0);
|
|
}
|
|
removeAll(this, predicate);
|
|
};
|
|
Array.prototype.remove = function (element) {
|
|
function remove(array, element) {
|
|
var index = array.findIndex(function (x) {
|
|
return x === element;
|
|
});
|
|
if (index >= 0) {
|
|
array.splice(index, 1);
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
return remove(this, element);
|
|
};
|
|
Array.prototype.removeAt = function (index) {
|
|
function removeAt(array, index) {
|
|
array.splice(index, 1);
|
|
}
|
|
return removeAt(this, index);
|
|
};
|
|
Array.prototype.removeRange = function (index, count) {
|
|
function removeRange(array, index, count) {
|
|
array.splice(index, count);
|
|
}
|
|
return removeRange(this, index, count);
|
|
};
|
|
Array.prototype.select = function (selector) {
|
|
function select(array, selector) {
|
|
if (typeof (array.reduce) === "function") {
|
|
return array.reduce(function (ret, element, index) {
|
|
ret.push(selector.call(arguments[2], element, index, array));
|
|
return ret;
|
|
}, []);
|
|
}
|
|
else {
|
|
var ret = [];
|
|
for (var i = 0, len = array.length; i < len; i++) {
|
|
ret.push(selector.call(arguments[2], array[i], i, array));
|
|
}
|
|
return ret;
|
|
}
|
|
}
|
|
return select(this, selector);
|
|
};
|
|
Array.prototype.orderBy = function (keySelector, comparer) {
|
|
function orderBy(array, keySelector, comparer) {
|
|
array.sort(function (x, y) {
|
|
var v1 = keySelector(x);
|
|
var v2 = keySelector(y);
|
|
if (comparer) {
|
|
return comparer(v1, v2);
|
|
}
|
|
else {
|
|
return (v1 > v2) ? 1 : -1;
|
|
}
|
|
});
|
|
return array;
|
|
}
|
|
return orderBy(this, keySelector, comparer);
|
|
};
|
|
Array.prototype.orderByDescending = function (keySelector, comparer) {
|
|
function orderByDescending(array, keySelector, comparer) {
|
|
array.sort(function (x, y) {
|
|
var v1 = keySelector(x);
|
|
var v2 = keySelector(y);
|
|
if (comparer) {
|
|
return -comparer(v1, v2);
|
|
}
|
|
else {
|
|
return (v1 < v2) ? 1 : -1;
|
|
}
|
|
});
|
|
return array;
|
|
}
|
|
return orderByDescending(this, keySelector, comparer);
|
|
};
|
|
Array.prototype.groupBy = function (keySelector) {
|
|
function groupBy(array, keySelector) {
|
|
if (typeof (array.reduce) === "function") {
|
|
var keys_1 = [];
|
|
return array.reduce(function (groups, element, index) {
|
|
var key = JSON.stringify(keySelector.call(arguments[1], element, index, array));
|
|
var index2 = keys_1.findIndex(function (x) {
|
|
return x === key;
|
|
});
|
|
if (index2 < 0) {
|
|
index2 = keys_1.push(key) - 1;
|
|
}
|
|
if (!groups[index2]) {
|
|
groups[index2] = [];
|
|
}
|
|
groups[index2].push(element);
|
|
return groups;
|
|
}, []);
|
|
}
|
|
else {
|
|
var groups = [];
|
|
var keys = [];
|
|
var _loop_1 = function (i, len) {
|
|
var key = JSON.stringify(keySelector.call(arguments_1[1], array[i], i, array));
|
|
var index = keys.findIndex(function (x) {
|
|
return x === key;
|
|
});
|
|
if (index < 0) {
|
|
index = keys.push(key) - 1;
|
|
}
|
|
if (!groups[index]) {
|
|
groups[index] = [];
|
|
}
|
|
groups[index].push(array[i]);
|
|
};
|
|
var arguments_1 = arguments;
|
|
for (var i = 0, len = array.length; i < len; i++) {
|
|
_loop_1(i, len);
|
|
}
|
|
return groups;
|
|
}
|
|
}
|
|
return groupBy(this, keySelector);
|
|
};
|
|
Array.prototype.sum = function (selector) {
|
|
function sum(array, selector) {
|
|
var ret;
|
|
for (var i = 0, len = array.length; i < len; i++) {
|
|
if (i == 0) {
|
|
if (selector) {
|
|
ret = selector.call(arguments[2], array[i], i, array);
|
|
}
|
|
else {
|
|
ret = array[i];
|
|
}
|
|
}
|
|
else {
|
|
if (selector) {
|
|
ret += selector.call(arguments[2], array[i], i, array);
|
|
}
|
|
else {
|
|
ret += array[i];
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
return sum(this, selector);
|
|
};
|
|
var es;
|
|
(function (es) {
|
|
var PriorityQueueNode = (function () {
|
|
function PriorityQueueNode() {
|
|
this.priority = 0;
|
|
this.insertionIndex = 0;
|
|
this.queueIndex = 0;
|
|
}
|
|
return PriorityQueueNode;
|
|
}());
|
|
es.PriorityQueueNode = PriorityQueueNode;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var AStarPathfinder = (function () {
|
|
function AStarPathfinder() {
|
|
}
|
|
AStarPathfinder.search = function (graph, start, goal) {
|
|
var _this = this;
|
|
var foundPath = false;
|
|
var cameFrom = new Map();
|
|
cameFrom.set(start, start);
|
|
var costSoFar = new Map();
|
|
var frontier = new es.PriorityQueue(1000);
|
|
frontier.enqueue(new AStarNode(start), 0);
|
|
costSoFar.set(start, 0);
|
|
var _loop_2 = function () {
|
|
var current = frontier.dequeue();
|
|
if (JSON.stringify(current.data) == JSON.stringify(goal)) {
|
|
foundPath = true;
|
|
return "break";
|
|
}
|
|
graph.getNeighbors(current.data).forEach(function (next) {
|
|
var newCost = costSoFar.get(current.data) + graph.cost(current.data, next);
|
|
if (!_this.hasKey(costSoFar, next) || newCost < costSoFar.get(next)) {
|
|
costSoFar.set(next, newCost);
|
|
var priority = newCost + graph.heuristic(next, goal);
|
|
frontier.enqueue(new AStarNode(next), priority);
|
|
cameFrom.set(next, current.data);
|
|
}
|
|
});
|
|
};
|
|
while (frontier.count > 0) {
|
|
var state_1 = _loop_2();
|
|
if (state_1 === "break")
|
|
break;
|
|
}
|
|
return foundPath ? this.recontructPath(cameFrom, start, goal) : null;
|
|
};
|
|
AStarPathfinder.recontructPath = function (cameFrom, start, goal) {
|
|
var path = [];
|
|
var current = goal;
|
|
path.push(goal);
|
|
while (current != start) {
|
|
current = this.getKey(cameFrom, current);
|
|
path.push(current);
|
|
}
|
|
path.reverse();
|
|
return path;
|
|
};
|
|
AStarPathfinder.hasKey = function (map, compareKey) {
|
|
var iterator = map.keys();
|
|
var r;
|
|
while (r = iterator.next(), !r.done) {
|
|
if (JSON.stringify(r.value) == JSON.stringify(compareKey))
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
AStarPathfinder.getKey = function (map, compareKey) {
|
|
var iterator = map.keys();
|
|
var valueIterator = map.values();
|
|
var r;
|
|
var v;
|
|
while (r = iterator.next(), v = valueIterator.next(), !r.done) {
|
|
if (JSON.stringify(r.value) == JSON.stringify(compareKey))
|
|
return v.value;
|
|
}
|
|
return null;
|
|
};
|
|
return AStarPathfinder;
|
|
}());
|
|
es.AStarPathfinder = AStarPathfinder;
|
|
var AStarNode = (function (_super) {
|
|
__extends(AStarNode, _super);
|
|
function AStarNode(data) {
|
|
var _this = _super.call(this) || this;
|
|
_this.data = data;
|
|
return _this;
|
|
}
|
|
return AStarNode;
|
|
}(es.PriorityQueueNode));
|
|
es.AStarNode = AStarNode;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var AstarGridGraph = (function () {
|
|
function AstarGridGraph(width, height) {
|
|
this.dirs = [
|
|
new es.Vector2(1, 0),
|
|
new es.Vector2(0, -1),
|
|
new es.Vector2(-1, 0),
|
|
new es.Vector2(0, 1)
|
|
];
|
|
this.walls = [];
|
|
this.weightedNodes = [];
|
|
this.defaultWeight = 1;
|
|
this.weightedNodeWeight = 5;
|
|
this._neighbors = new Array(4);
|
|
this._width = width;
|
|
this._height = height;
|
|
}
|
|
AstarGridGraph.prototype.isNodeInBounds = function (node) {
|
|
return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;
|
|
};
|
|
AstarGridGraph.prototype.isNodePassable = function (node) {
|
|
return !this.walls.firstOrDefault(function (wall) { return JSON.stringify(wall) == JSON.stringify(node); });
|
|
};
|
|
AstarGridGraph.prototype.search = function (start, goal) {
|
|
return es.AStarPathfinder.search(this, start, goal);
|
|
};
|
|
AstarGridGraph.prototype.getNeighbors = function (node) {
|
|
var _this = this;
|
|
this._neighbors.length = 0;
|
|
this.dirs.forEach(function (dir) {
|
|
var next = new es.Vector2(node.x + dir.x, node.y + dir.y);
|
|
if (_this.isNodeInBounds(next) && _this.isNodePassable(next))
|
|
_this._neighbors.push(next);
|
|
});
|
|
return this._neighbors;
|
|
};
|
|
AstarGridGraph.prototype.cost = function (from, to) {
|
|
return this.weightedNodes.find(function (p) { return JSON.stringify(p) == JSON.stringify(to); }) ? this.weightedNodeWeight : this.defaultWeight;
|
|
};
|
|
AstarGridGraph.prototype.heuristic = function (node, goal) {
|
|
return Math.abs(node.x - goal.x) + Math.abs(node.y - goal.y);
|
|
};
|
|
return AstarGridGraph;
|
|
}());
|
|
es.AstarGridGraph = AstarGridGraph;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PriorityQueue = (function () {
|
|
function PriorityQueue(maxNodes) {
|
|
this._numNodes = 0;
|
|
this._nodes = new Array(maxNodes + 1);
|
|
this._numNodesEverEnqueued = 0;
|
|
}
|
|
Object.defineProperty(PriorityQueue.prototype, "count", {
|
|
get: function () {
|
|
return this._numNodes;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(PriorityQueue.prototype, "maxSize", {
|
|
get: function () {
|
|
return this._nodes.length - 1;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
PriorityQueue.prototype.clear = function () {
|
|
this._nodes.splice(1, this._numNodes);
|
|
this._numNodes = 0;
|
|
};
|
|
PriorityQueue.prototype.contains = function (node) {
|
|
if (!node) {
|
|
console.error("node cannot be null");
|
|
return false;
|
|
}
|
|
if (node.queueIndex < 0 || node.queueIndex >= this._nodes.length) {
|
|
console.error("node.QueueIndex has been corrupted. Did you change it manually? Or add this node to another queue?");
|
|
return false;
|
|
}
|
|
return (this._nodes[node.queueIndex] == node);
|
|
};
|
|
PriorityQueue.prototype.enqueue = function (node, priority) {
|
|
node.priority = priority;
|
|
this._numNodes++;
|
|
this._nodes[this._numNodes] = node;
|
|
node.queueIndex = this._numNodes;
|
|
node.insertionIndex = this._numNodesEverEnqueued++;
|
|
this.cascadeUp(this._nodes[this._numNodes]);
|
|
};
|
|
PriorityQueue.prototype.dequeue = function () {
|
|
var returnMe = this._nodes[1];
|
|
this.remove(returnMe);
|
|
return returnMe;
|
|
};
|
|
PriorityQueue.prototype.remove = function (node) {
|
|
if (node.queueIndex == this._numNodes) {
|
|
this._nodes[this._numNodes] = null;
|
|
this._numNodes--;
|
|
return;
|
|
}
|
|
var formerLastNode = this._nodes[this._numNodes];
|
|
this.swap(node, formerLastNode);
|
|
delete this._nodes[this._numNodes];
|
|
this._numNodes--;
|
|
this.onNodeUpdated(formerLastNode);
|
|
};
|
|
PriorityQueue.prototype.isValidQueue = function () {
|
|
for (var i = 1; i < this._nodes.length; i++) {
|
|
if (this._nodes[i]) {
|
|
var childLeftIndex = 2 * i;
|
|
if (childLeftIndex < this._nodes.length && this._nodes[childLeftIndex] &&
|
|
this.hasHigherPriority(this._nodes[childLeftIndex], this._nodes[i]))
|
|
return false;
|
|
var childRightIndex = childLeftIndex + 1;
|
|
if (childRightIndex < this._nodes.length && this._nodes[childRightIndex] &&
|
|
this.hasHigherPriority(this._nodes[childRightIndex], this._nodes[i]))
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
PriorityQueue.prototype.onNodeUpdated = function (node) {
|
|
var parentIndex = Math.floor(node.queueIndex / 2);
|
|
var parentNode = this._nodes[parentIndex];
|
|
if (parentIndex > 0 && this.hasHigherPriority(node, parentNode)) {
|
|
this.cascadeUp(node);
|
|
}
|
|
else {
|
|
this.cascadeDown(node);
|
|
}
|
|
};
|
|
PriorityQueue.prototype.cascadeDown = function (node) {
|
|
var newParent;
|
|
var finalQueueIndex = node.queueIndex;
|
|
while (true) {
|
|
newParent = node;
|
|
var childLeftIndex = 2 * finalQueueIndex;
|
|
if (childLeftIndex > this._numNodes) {
|
|
node.queueIndex = finalQueueIndex;
|
|
this._nodes[finalQueueIndex] = node;
|
|
break;
|
|
}
|
|
var childLeft = this._nodes[childLeftIndex];
|
|
if (this.hasHigherPriority(childLeft, newParent)) {
|
|
newParent = childLeft;
|
|
}
|
|
var childRightIndex = childLeftIndex + 1;
|
|
if (childRightIndex <= this._numNodes) {
|
|
var childRight = this._nodes[childRightIndex];
|
|
if (this.hasHigherPriority(childRight, newParent)) {
|
|
newParent = childRight;
|
|
}
|
|
}
|
|
if (newParent != node) {
|
|
this._nodes[finalQueueIndex] = newParent;
|
|
var temp = newParent.queueIndex;
|
|
newParent.queueIndex = finalQueueIndex;
|
|
finalQueueIndex = temp;
|
|
}
|
|
else {
|
|
node.queueIndex = finalQueueIndex;
|
|
this._nodes[finalQueueIndex] = node;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
PriorityQueue.prototype.cascadeUp = function (node) {
|
|
var parent = Math.floor(node.queueIndex / 2);
|
|
while (parent >= 1) {
|
|
var parentNode = this._nodes[parent];
|
|
if (this.hasHigherPriority(parentNode, node))
|
|
break;
|
|
this.swap(node, parentNode);
|
|
parent = Math.floor(node.queueIndex / 2);
|
|
}
|
|
};
|
|
PriorityQueue.prototype.swap = function (node1, node2) {
|
|
this._nodes[node1.queueIndex] = node2;
|
|
this._nodes[node2.queueIndex] = node1;
|
|
var temp = node1.queueIndex;
|
|
node1.queueIndex = node2.queueIndex;
|
|
node2.queueIndex = temp;
|
|
};
|
|
PriorityQueue.prototype.hasHigherPriority = function (higher, lower) {
|
|
return (higher.priority < lower.priority ||
|
|
(higher.priority == lower.priority && higher.insertionIndex < lower.insertionIndex));
|
|
};
|
|
return PriorityQueue;
|
|
}());
|
|
es.PriorityQueue = PriorityQueue;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var BreadthFirstPathfinder = (function () {
|
|
function BreadthFirstPathfinder() {
|
|
}
|
|
BreadthFirstPathfinder.search = function (graph, start, goal) {
|
|
var _this = this;
|
|
var foundPath = false;
|
|
var frontier = [];
|
|
frontier.unshift(start);
|
|
var cameFrom = new Map();
|
|
cameFrom.set(start, start);
|
|
var _loop_3 = function () {
|
|
var current = frontier.shift();
|
|
if (JSON.stringify(current) == JSON.stringify(goal)) {
|
|
foundPath = true;
|
|
return "break";
|
|
}
|
|
graph.getNeighbors(current).forEach(function (next) {
|
|
if (!_this.hasKey(cameFrom, next)) {
|
|
frontier.unshift(next);
|
|
cameFrom.set(next, current);
|
|
}
|
|
});
|
|
};
|
|
while (frontier.length > 0) {
|
|
var state_2 = _loop_3();
|
|
if (state_2 === "break")
|
|
break;
|
|
}
|
|
return foundPath ? es.AStarPathfinder.recontructPath(cameFrom, start, goal) : null;
|
|
};
|
|
BreadthFirstPathfinder.hasKey = function (map, compareKey) {
|
|
var iterator = map.keys();
|
|
var r;
|
|
while (r = iterator.next(), !r.done) {
|
|
if (JSON.stringify(r.value) == JSON.stringify(compareKey))
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
return BreadthFirstPathfinder;
|
|
}());
|
|
es.BreadthFirstPathfinder = BreadthFirstPathfinder;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var UnweightedGraph = (function () {
|
|
function UnweightedGraph() {
|
|
this.edges = new Map();
|
|
}
|
|
UnweightedGraph.prototype.addEdgesForNode = function (node, edges) {
|
|
this.edges.set(node, edges);
|
|
return this;
|
|
};
|
|
UnweightedGraph.prototype.getNeighbors = function (node) {
|
|
return this.edges.get(node);
|
|
};
|
|
return UnweightedGraph;
|
|
}());
|
|
es.UnweightedGraph = UnweightedGraph;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Vector2 = (function () {
|
|
function Vector2(x, y) {
|
|
this.x = 0;
|
|
this.y = 0;
|
|
this.x = x ? x : 0;
|
|
this.y = y != undefined ? y : this.x;
|
|
}
|
|
Object.defineProperty(Vector2, "zero", {
|
|
get: function () {
|
|
return Vector2.zeroVector2;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Vector2, "one", {
|
|
get: function () {
|
|
return Vector2.unitVector2;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Vector2, "unitX", {
|
|
get: function () {
|
|
return Vector2.unitXVector;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Vector2, "unitY", {
|
|
get: function () {
|
|
return Vector2.unitYVector;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Vector2.add = function (value1, value2) {
|
|
var result = new Vector2(0, 0);
|
|
result.x = value1.x + value2.x;
|
|
result.y = value1.y + value2.y;
|
|
return result;
|
|
};
|
|
Vector2.divide = function (value1, value2) {
|
|
var result = new Vector2(0, 0);
|
|
result.x = value1.x / value2.x;
|
|
result.y = value1.y / value2.y;
|
|
return result;
|
|
};
|
|
Vector2.multiply = function (value1, value2) {
|
|
var result = new Vector2(0, 0);
|
|
result.x = value1.x * value2.x;
|
|
result.y = value1.y * value2.y;
|
|
return result;
|
|
};
|
|
Vector2.subtract = function (value1, value2) {
|
|
var result = new Vector2(0, 0);
|
|
result.x = value1.x - value2.x;
|
|
result.y = value1.y - value2.y;
|
|
return result;
|
|
};
|
|
Vector2.normalize = function (value) {
|
|
var val = 1 / Math.sqrt((value.x * value.x) + (value.y * value.y));
|
|
value.x *= val;
|
|
value.y *= val;
|
|
return value;
|
|
};
|
|
Vector2.dot = function (value1, value2) {
|
|
return (value1.x * value2.x) + (value1.y * value2.y);
|
|
};
|
|
Vector2.distanceSquared = function (value1, value2) {
|
|
var v1 = value1.x - value2.x, v2 = value1.y - value2.y;
|
|
return (v1 * v1) + (v2 * v2);
|
|
};
|
|
Vector2.clamp = function (value1, min, max) {
|
|
return new Vector2(es.MathHelper.clamp(value1.x, min.x, max.x), es.MathHelper.clamp(value1.y, min.y, max.y));
|
|
};
|
|
Vector2.lerp = function (value1, value2, amount) {
|
|
return new Vector2(es.MathHelper.lerp(value1.x, value2.x, amount), es.MathHelper.lerp(value1.y, value2.y, amount));
|
|
};
|
|
Vector2.transform = function (position, matrix) {
|
|
return new Vector2((position.x * matrix.m11) + (position.y * matrix.m21) + matrix.m31, (position.x * matrix.m12) + (position.y * matrix.m22) + matrix.m32);
|
|
};
|
|
Vector2.distance = function (value1, value2) {
|
|
var v1 = value1.x - value2.x, v2 = value1.y - value2.y;
|
|
return Math.sqrt((v1 * v1) + (v2 * v2));
|
|
};
|
|
Vector2.angle = function (from, to) {
|
|
from = Vector2.normalize(from);
|
|
to = Vector2.normalize(to);
|
|
return Math.acos(es.MathHelper.clamp(Vector2.dot(from, to), -1, 1)) * es.MathHelper.Rad2Deg;
|
|
};
|
|
Vector2.negate = function (value) {
|
|
var result = new Vector2();
|
|
result.x = -value.x;
|
|
result.y = -value.y;
|
|
return result;
|
|
};
|
|
Vector2.prototype.add = function (value) {
|
|
this.x += value.x;
|
|
this.y += value.y;
|
|
return this;
|
|
};
|
|
Vector2.prototype.divide = function (value) {
|
|
this.x /= value.x;
|
|
this.y /= value.y;
|
|
return this;
|
|
};
|
|
Vector2.prototype.multiply = function (value) {
|
|
this.x *= value.x;
|
|
this.y *= value.y;
|
|
return this;
|
|
};
|
|
Vector2.prototype.subtract = function (value) {
|
|
this.x -= value.x;
|
|
this.y -= value.y;
|
|
return this;
|
|
};
|
|
Vector2.prototype.normalize = function () {
|
|
var val = 1 / Math.sqrt((this.x * this.x) + (this.y * this.y));
|
|
this.x *= val;
|
|
this.y *= val;
|
|
return this;
|
|
};
|
|
Vector2.prototype.length = function () {
|
|
return Math.sqrt((this.x * this.x) + (this.y * this.y));
|
|
};
|
|
Vector2.prototype.lengthSquared = function () {
|
|
return (this.x * this.x) + (this.y * this.y);
|
|
};
|
|
Vector2.prototype.round = function () {
|
|
return new Vector2(Math.round(this.x), Math.round(this.y));
|
|
};
|
|
Vector2.prototype.equals = function (other) {
|
|
return other.x == this.x && other.y == this.y;
|
|
};
|
|
Vector2.unitYVector = new Vector2(0, 1);
|
|
Vector2.unitXVector = new Vector2(1, 0);
|
|
Vector2.unitVector2 = new Vector2(1, 1);
|
|
Vector2.zeroVector2 = new Vector2(0, 0);
|
|
return Vector2;
|
|
}());
|
|
es.Vector2 = Vector2;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var UnweightedGridGraph = (function () {
|
|
function UnweightedGridGraph(width, height, allowDiagonalSearch) {
|
|
if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }
|
|
this.walls = [];
|
|
this._neighbors = new Array(4);
|
|
this._width = width;
|
|
this._hegiht = height;
|
|
this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;
|
|
}
|
|
UnweightedGridGraph.prototype.isNodeInBounds = function (node) {
|
|
return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._hegiht;
|
|
};
|
|
UnweightedGridGraph.prototype.isNodePassable = function (node) {
|
|
return !this.walls.firstOrDefault(function (wall) { return JSON.stringify(wall) == JSON.stringify(node); });
|
|
};
|
|
UnweightedGridGraph.prototype.getNeighbors = function (node) {
|
|
var _this = this;
|
|
this._neighbors.length = 0;
|
|
this._dirs.forEach(function (dir) {
|
|
var next = new es.Vector2(node.x + dir.x, node.y + dir.y);
|
|
if (_this.isNodeInBounds(next) && _this.isNodePassable(next))
|
|
_this._neighbors.push(next);
|
|
});
|
|
return this._neighbors;
|
|
};
|
|
UnweightedGridGraph.prototype.search = function (start, goal) {
|
|
return es.BreadthFirstPathfinder.search(this, start, goal);
|
|
};
|
|
UnweightedGridGraph.CARDINAL_DIRS = [
|
|
new es.Vector2(1, 0),
|
|
new es.Vector2(0, -1),
|
|
new es.Vector2(-1, 0),
|
|
new es.Vector2(0, -1)
|
|
];
|
|
UnweightedGridGraph.COMPASS_DIRS = [
|
|
new es.Vector2(1, 0),
|
|
new es.Vector2(1, -1),
|
|
new es.Vector2(0, -1),
|
|
new es.Vector2(-1, -1),
|
|
new es.Vector2(-1, 0),
|
|
new es.Vector2(-1, 1),
|
|
new es.Vector2(0, 1),
|
|
new es.Vector2(1, 1),
|
|
];
|
|
return UnweightedGridGraph;
|
|
}());
|
|
es.UnweightedGridGraph = UnweightedGridGraph;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var WeightedGridGraph = (function () {
|
|
function WeightedGridGraph(width, height, allowDiagonalSearch) {
|
|
if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }
|
|
this.walls = [];
|
|
this.weightedNodes = [];
|
|
this.defaultWeight = 1;
|
|
this.weightedNodeWeight = 5;
|
|
this._neighbors = new Array(4);
|
|
this._width = width;
|
|
this._height = height;
|
|
this._dirs = allowDiagonalSearch ? WeightedGridGraph.COMPASS_DIRS : WeightedGridGraph.CARDINAL_DIRS;
|
|
}
|
|
WeightedGridGraph.prototype.isNodeInBounds = function (node) {
|
|
return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;
|
|
};
|
|
WeightedGridGraph.prototype.isNodePassable = function (node) {
|
|
return !this.walls.firstOrDefault(function (wall) { return JSON.stringify(wall) == JSON.stringify(node); });
|
|
};
|
|
WeightedGridGraph.prototype.search = function (start, goal) {
|
|
return es.WeightedPathfinder.search(this, start, goal);
|
|
};
|
|
WeightedGridGraph.prototype.getNeighbors = function (node) {
|
|
var _this = this;
|
|
this._neighbors.length = 0;
|
|
this._dirs.forEach(function (dir) {
|
|
var next = new es.Vector2(node.x + dir.x, node.y + dir.y);
|
|
if (_this.isNodeInBounds(next) && _this.isNodePassable(next))
|
|
_this._neighbors.push(next);
|
|
});
|
|
return this._neighbors;
|
|
};
|
|
WeightedGridGraph.prototype.cost = function (from, to) {
|
|
return this.weightedNodes.find(function (t) { return JSON.stringify(t) == JSON.stringify(to); }) ? this.weightedNodeWeight : this.defaultWeight;
|
|
};
|
|
WeightedGridGraph.CARDINAL_DIRS = [
|
|
new es.Vector2(1, 0),
|
|
new es.Vector2(0, -1),
|
|
new es.Vector2(-1, 0),
|
|
new es.Vector2(0, 1)
|
|
];
|
|
WeightedGridGraph.COMPASS_DIRS = [
|
|
new es.Vector2(1, 0),
|
|
new es.Vector2(1, -1),
|
|
new es.Vector2(0, -1),
|
|
new es.Vector2(-1, -1),
|
|
new es.Vector2(-1, 0),
|
|
new es.Vector2(-1, 1),
|
|
new es.Vector2(0, 1),
|
|
new es.Vector2(1, 1),
|
|
];
|
|
return WeightedGridGraph;
|
|
}());
|
|
es.WeightedGridGraph = WeightedGridGraph;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var WeightedNode = (function (_super) {
|
|
__extends(WeightedNode, _super);
|
|
function WeightedNode(data) {
|
|
var _this = _super.call(this) || this;
|
|
_this.data = data;
|
|
return _this;
|
|
}
|
|
return WeightedNode;
|
|
}(es.PriorityQueueNode));
|
|
es.WeightedNode = WeightedNode;
|
|
var WeightedPathfinder = (function () {
|
|
function WeightedPathfinder() {
|
|
}
|
|
WeightedPathfinder.search = function (graph, start, goal) {
|
|
var _this = this;
|
|
var foundPath = false;
|
|
var cameFrom = new Map();
|
|
cameFrom.set(start, start);
|
|
var costSoFar = new Map();
|
|
var frontier = new es.PriorityQueue(1000);
|
|
frontier.enqueue(new WeightedNode(start), 0);
|
|
costSoFar.set(start, 0);
|
|
var _loop_4 = function () {
|
|
var current = frontier.dequeue();
|
|
if (JSON.stringify(current.data) == JSON.stringify(goal)) {
|
|
foundPath = true;
|
|
return "break";
|
|
}
|
|
graph.getNeighbors(current.data).forEach(function (next) {
|
|
var newCost = costSoFar.get(current.data) + graph.cost(current.data, next);
|
|
if (!_this.hasKey(costSoFar, next) || newCost < costSoFar.get(next)) {
|
|
costSoFar.set(next, newCost);
|
|
var priprity = newCost;
|
|
frontier.enqueue(new WeightedNode(next), priprity);
|
|
cameFrom.set(next, current.data);
|
|
}
|
|
});
|
|
};
|
|
while (frontier.count > 0) {
|
|
var state_3 = _loop_4();
|
|
if (state_3 === "break")
|
|
break;
|
|
}
|
|
return foundPath ? this.recontructPath(cameFrom, start, goal) : null;
|
|
};
|
|
WeightedPathfinder.recontructPath = function (cameFrom, start, goal) {
|
|
var path = [];
|
|
var current = goal;
|
|
path.push(goal);
|
|
while (current != start) {
|
|
current = this.getKey(cameFrom, current);
|
|
path.push(current);
|
|
}
|
|
path.reverse();
|
|
return path;
|
|
};
|
|
WeightedPathfinder.hasKey = function (map, compareKey) {
|
|
var iterator = map.keys();
|
|
var r;
|
|
while (r = iterator.next(), !r.done) {
|
|
if (JSON.stringify(r.value) == JSON.stringify(compareKey))
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
WeightedPathfinder.getKey = function (map, compareKey) {
|
|
var iterator = map.keys();
|
|
var valueIterator = map.values();
|
|
var r;
|
|
var v;
|
|
while (r = iterator.next(), v = valueIterator.next(), !r.done) {
|
|
if (JSON.stringify(r.value) == JSON.stringify(compareKey))
|
|
return v.value;
|
|
}
|
|
return null;
|
|
};
|
|
return WeightedPathfinder;
|
|
}());
|
|
es.WeightedPathfinder = WeightedPathfinder;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Debug = (function () {
|
|
function Debug() {
|
|
}
|
|
Debug.drawHollowRect = function (rectanle, color, duration) {
|
|
if (duration === void 0) { duration = 0; }
|
|
this._debugDrawItems.push(new es.DebugDrawItem(rectanle, color, duration));
|
|
};
|
|
Debug.render = function () {
|
|
if (this._debugDrawItems.length > 0) {
|
|
var debugShape = new egret.Shape();
|
|
if (es.Core.scene) {
|
|
es.Core.scene.addChild(debugShape);
|
|
}
|
|
for (var i = this._debugDrawItems.length - 1; i >= 0; i--) {
|
|
var item = this._debugDrawItems[i];
|
|
if (item.draw(debugShape))
|
|
this._debugDrawItems.removeAt(i);
|
|
}
|
|
}
|
|
};
|
|
Debug._debugDrawItems = [];
|
|
return Debug;
|
|
}());
|
|
es.Debug = Debug;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var DebugDefaults = (function () {
|
|
function DebugDefaults() {
|
|
}
|
|
DebugDefaults.verletParticle = 0xDC345E;
|
|
DebugDefaults.verletConstraintEdge = 0x433E36;
|
|
return DebugDefaults;
|
|
}());
|
|
es.DebugDefaults = DebugDefaults;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var DebugDrawType;
|
|
(function (DebugDrawType) {
|
|
DebugDrawType[DebugDrawType["line"] = 0] = "line";
|
|
DebugDrawType[DebugDrawType["hollowRectangle"] = 1] = "hollowRectangle";
|
|
DebugDrawType[DebugDrawType["pixel"] = 2] = "pixel";
|
|
DebugDrawType[DebugDrawType["text"] = 3] = "text";
|
|
})(DebugDrawType = es.DebugDrawType || (es.DebugDrawType = {}));
|
|
var DebugDrawItem = (function () {
|
|
function DebugDrawItem(rectangle, color, duration) {
|
|
this.rectangle = rectangle;
|
|
this.color = color;
|
|
this.duration = duration;
|
|
this.drawType = DebugDrawType.hollowRectangle;
|
|
}
|
|
DebugDrawItem.prototype.draw = function (shape) {
|
|
switch (this.drawType) {
|
|
case DebugDrawType.line:
|
|
break;
|
|
case DebugDrawType.hollowRectangle:
|
|
break;
|
|
case DebugDrawType.pixel:
|
|
break;
|
|
case DebugDrawType.text:
|
|
break;
|
|
}
|
|
this.duration -= es.Time.deltaTime;
|
|
return this.duration < 0;
|
|
};
|
|
return DebugDrawItem;
|
|
}());
|
|
es.DebugDrawItem = DebugDrawItem;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Component = (function (_super) {
|
|
__extends(Component, _super);
|
|
function Component() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.updateInterval = 1;
|
|
_this._enabled = true;
|
|
_this._updateOrder = 0;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Component.prototype, "transform", {
|
|
get: function () {
|
|
return this.entity.transform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Component.prototype, "enabled", {
|
|
get: function () {
|
|
return this.entity ? this.entity.enabled && this._enabled : this._enabled;
|
|
},
|
|
set: function (value) {
|
|
this.setEnabled(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Component.prototype, "updateOrder", {
|
|
get: function () {
|
|
return this._updateOrder;
|
|
},
|
|
set: function (value) {
|
|
this.setUpdateOrder(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Component.prototype.initialize = function () {
|
|
};
|
|
Component.prototype.onAddedToEntity = function () {
|
|
};
|
|
Component.prototype.onRemovedFromEntity = function () {
|
|
};
|
|
Component.prototype.onEntityTransformChanged = function (comp) {
|
|
};
|
|
Component.prototype.debugRender = function () {
|
|
};
|
|
Component.prototype.onEnabled = function () {
|
|
};
|
|
Component.prototype.onDisabled = function () {
|
|
};
|
|
Component.prototype.update = function () {
|
|
};
|
|
Component.prototype.setEnabled = function (isEnabled) {
|
|
if (this._enabled != isEnabled) {
|
|
this._enabled = isEnabled;
|
|
if (this._enabled) {
|
|
this.onEnabled();
|
|
}
|
|
else {
|
|
this.onDisabled();
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
Component.prototype.setUpdateOrder = function (updateOrder) {
|
|
if (this._updateOrder != updateOrder) {
|
|
this._updateOrder = updateOrder;
|
|
}
|
|
return this;
|
|
};
|
|
Component.prototype.clone = function () {
|
|
var component = ObjectUtils.clone(this);
|
|
component.entity = null;
|
|
return component;
|
|
};
|
|
return Component;
|
|
}(egret.HashObject));
|
|
es.Component = Component;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Core = (function (_super) {
|
|
__extends(Core, _super);
|
|
function Core() {
|
|
var _this = _super.call(this) || this;
|
|
_this._globalManagers = [];
|
|
Core._instance = _this;
|
|
Core.emitter = new es.Emitter();
|
|
Core.content = new es.ContentManager();
|
|
_this.addEventListener(egret.Event.ADDED_TO_STAGE, _this.onAddToStage, _this);
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Core, "Instance", {
|
|
get: function () {
|
|
return this._instance;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Core, "scene", {
|
|
get: function () {
|
|
if (!this._instance)
|
|
return null;
|
|
return this._instance._scene;
|
|
},
|
|
set: function (value) {
|
|
if (!value) {
|
|
console.error("场景不能为空");
|
|
return;
|
|
}
|
|
if (this._instance._scene == null) {
|
|
this._instance._scene = value;
|
|
this._instance.addChild(value);
|
|
this._instance._scene.begin();
|
|
Core.Instance.onSceneChanged();
|
|
}
|
|
else {
|
|
this._instance._nextScene = value;
|
|
}
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Core.startSceneTransition = function (sceneTransition) {
|
|
if (this._instance._sceneTransition) {
|
|
console.warn("在前一个场景完成之前,不能开始一个新的场景转换。");
|
|
return;
|
|
}
|
|
this._instance._sceneTransition = sceneTransition;
|
|
return sceneTransition;
|
|
};
|
|
Core.registerGlobalManager = function (manager) {
|
|
this._instance._globalManagers.push(manager);
|
|
manager.enabled = true;
|
|
};
|
|
Core.unregisterGlobalManager = function (manager) {
|
|
this._instance._globalManagers.remove(manager);
|
|
manager.enabled = false;
|
|
};
|
|
Core.getGlobalManager = function (type) {
|
|
for (var i = 0; i < this._instance._globalManagers.length; i++) {
|
|
if (this._instance._globalManagers[i] instanceof type)
|
|
return this._instance._globalManagers[i];
|
|
}
|
|
return null;
|
|
};
|
|
Core.prototype.onOrientationChanged = function () {
|
|
Core.emitter.emit(es.CoreEvents.OrientationChanged);
|
|
};
|
|
Core.prototype.draw = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!this._sceneTransition) return [3, 4];
|
|
this._sceneTransition.preRender();
|
|
if (!(this._scene && !this._sceneTransition.hasPreviousSceneRender)) return [3, 2];
|
|
this._scene.render();
|
|
this._scene.postRender();
|
|
return [4, this._sceneTransition.onBeginTransition()];
|
|
case 1:
|
|
_a.sent();
|
|
return [3, 3];
|
|
case 2:
|
|
if (this._sceneTransition) {
|
|
if (this._scene && this._sceneTransition.isNewSceneLoaded) {
|
|
this._scene.render();
|
|
this._scene.postRender();
|
|
}
|
|
this._sceneTransition.render();
|
|
}
|
|
_a.label = 3;
|
|
case 3: return [3, 5];
|
|
case 4:
|
|
if (this._scene) {
|
|
this._scene.render();
|
|
es.Debug.render();
|
|
this._scene.postRender();
|
|
}
|
|
_a.label = 5;
|
|
case 5: return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
Core.prototype.startDebugUpdate = function () {
|
|
es.TimeRuler.Instance.startFrame();
|
|
es.TimeRuler.Instance.beginMark("update", 0x00FF00);
|
|
};
|
|
Core.prototype.endDebugUpdate = function () {
|
|
es.TimeRuler.Instance.endMark("update");
|
|
};
|
|
Core.prototype.onSceneChanged = function () {
|
|
Core.emitter.emit(es.CoreEvents.SceneChanged);
|
|
es.Time.sceneChanged();
|
|
};
|
|
Core.prototype.onGraphicsDeviceReset = function () {
|
|
Core.emitter.emit(es.CoreEvents.GraphicsDeviceReset);
|
|
};
|
|
Core.prototype.initialize = function () {
|
|
};
|
|
Core.prototype.update = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var i;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
es.Time.update(egret.getTimer());
|
|
if (!this._scene) return [3, 2];
|
|
for (i = this._globalManagers.length - 1; i >= 0; i--) {
|
|
if (this._globalManagers[i].enabled)
|
|
this._globalManagers[i].update();
|
|
}
|
|
if (!this._sceneTransition ||
|
|
(this._sceneTransition && (!this._sceneTransition.loadsNewScene || this._sceneTransition.isNewSceneLoaded))) {
|
|
this._scene.update();
|
|
}
|
|
if (!this._nextScene) return [3, 2];
|
|
if (this._scene.parent)
|
|
this._scene.parent.removeChild(this._scene);
|
|
this._scene.end();
|
|
this._scene = this._nextScene;
|
|
this._nextScene = null;
|
|
this.onSceneChanged();
|
|
this.addChild(this._scene);
|
|
return [4, this._scene.begin()];
|
|
case 1:
|
|
_a.sent();
|
|
_a.label = 2;
|
|
case 2: return [4, this.draw()];
|
|
case 3:
|
|
_a.sent();
|
|
return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
Core.prototype.onAddToStage = function () {
|
|
Core.graphicsDevice = new es.GraphicsDevice();
|
|
this.addEventListener(egret.Event.RESIZE, this.onGraphicsDeviceReset, this);
|
|
this.addEventListener(egret.StageOrientationEvent.ORIENTATION_CHANGE, this.onOrientationChanged, this);
|
|
this.addEventListener(egret.Event.ENTER_FRAME, this.update, this);
|
|
es.Input.initialize();
|
|
KeyboardUtils.init();
|
|
this.initialize();
|
|
};
|
|
Core.debugRenderEndabled = false;
|
|
return Core;
|
|
}(egret.DisplayObjectContainer));
|
|
es.Core = Core;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var CoreEvents;
|
|
(function (CoreEvents) {
|
|
CoreEvents[CoreEvents["GraphicsDeviceReset"] = 0] = "GraphicsDeviceReset";
|
|
CoreEvents[CoreEvents["SceneChanged"] = 1] = "SceneChanged";
|
|
CoreEvents[CoreEvents["OrientationChanged"] = 2] = "OrientationChanged";
|
|
})(CoreEvents = es.CoreEvents || (es.CoreEvents = {}));
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Entity = (function () {
|
|
function Entity(name) {
|
|
this.updateInterval = 1;
|
|
this._tag = 0;
|
|
this._enabled = true;
|
|
this._updateOrder = 0;
|
|
this.components = new es.ComponentList(this);
|
|
this.transform = new es.Transform(this);
|
|
this.name = name;
|
|
this.id = Entity._idGenerator++;
|
|
this.componentBits = new es.BitSet();
|
|
}
|
|
Object.defineProperty(Entity.prototype, "isDestroyed", {
|
|
get: function () {
|
|
return this._isDestroyed;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "tag", {
|
|
get: function () {
|
|
return this._tag;
|
|
},
|
|
set: function (value) {
|
|
this.setTag(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "enabled", {
|
|
get: function () {
|
|
return this._enabled;
|
|
},
|
|
set: function (value) {
|
|
this.setEnabled(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "updateOrder", {
|
|
get: function () {
|
|
return this._updateOrder;
|
|
},
|
|
set: function (value) {
|
|
this.setUpdateOrder(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "parent", {
|
|
get: function () {
|
|
return this.transform.parent;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setParent(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "childCount", {
|
|
get: function () {
|
|
return this.transform.childCount;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "position", {
|
|
get: function () {
|
|
return this.transform.position;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setPosition(value.x, value.y);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "localPosition", {
|
|
get: function () {
|
|
return this.transform.localPosition;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setLocalPosition(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "rotation", {
|
|
get: function () {
|
|
return this.transform.rotation;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setRotation(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "rotationDegrees", {
|
|
get: function () {
|
|
return this.transform.rotationDegrees;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setRotationDegrees(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "localRotation", {
|
|
get: function () {
|
|
return this.transform.localRotation;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setLocalRotation(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "localRotationDegrees", {
|
|
get: function () {
|
|
return this.transform.localRotationDegrees;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setLocalRotationDegrees(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "scale", {
|
|
get: function () {
|
|
return this.transform.scale;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setScale(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "localScale", {
|
|
get: function () {
|
|
return this.transform.localScale;
|
|
},
|
|
set: function (value) {
|
|
this.transform.setLocalScale(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "worldInverseTransform", {
|
|
get: function () {
|
|
return this.transform.worldInverseTransform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "localToWorldTransform", {
|
|
get: function () {
|
|
return this.transform.localToWorldTransform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Entity.prototype, "worldToLocalTransform", {
|
|
get: function () {
|
|
return this.transform.worldToLocalTransform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Entity.prototype.onTransformChanged = function (comp) {
|
|
this.components.onEntityTransformChanged(comp);
|
|
};
|
|
Entity.prototype.setTag = function (tag) {
|
|
if (this._tag != tag) {
|
|
if (this.scene)
|
|
this.scene.entities.removeFromTagList(this);
|
|
this._tag = tag;
|
|
if (this.scene)
|
|
this.scene.entities.addToTagList(this);
|
|
}
|
|
return this;
|
|
};
|
|
Entity.prototype.setEnabled = function (isEnabled) {
|
|
if (this._enabled != isEnabled) {
|
|
this._enabled = isEnabled;
|
|
if (this._enabled)
|
|
this.components.onEntityEnabled();
|
|
else
|
|
this.components.onEntityDisabled();
|
|
}
|
|
return this;
|
|
};
|
|
Entity.prototype.setUpdateOrder = function (updateOrder) {
|
|
if (this._updateOrder != updateOrder) {
|
|
this._updateOrder = updateOrder;
|
|
if (this.scene) {
|
|
this.scene.entities.markEntityListUnsorted();
|
|
this.scene.entities.markTagUnsorted(this.tag);
|
|
}
|
|
return this;
|
|
}
|
|
};
|
|
Entity.prototype.destroy = function () {
|
|
this._isDestroyed = true;
|
|
this.scene.entities.remove(this);
|
|
this.transform.parent = null;
|
|
for (var i = this.transform.childCount - 1; i >= 0; i--) {
|
|
var child = this.transform.getChild(i);
|
|
child.entity.destroy();
|
|
}
|
|
};
|
|
Entity.prototype.detachFromScene = function () {
|
|
this.scene.entities.remove(this);
|
|
this.components.deregisterAllComponents();
|
|
for (var i = 0; i < this.transform.childCount; i++)
|
|
this.transform.getChild(i).entity.detachFromScene();
|
|
};
|
|
Entity.prototype.attachToScene = function (newScene) {
|
|
this.scene = newScene;
|
|
newScene.entities.add(this);
|
|
this.components.registerAllComponents();
|
|
for (var i = 0; i < this.transform.childCount; i++) {
|
|
this.transform.getChild(i).entity.attachToScene(newScene);
|
|
}
|
|
};
|
|
Entity.prototype.clone = function (position) {
|
|
if (position === void 0) { position = new es.Vector2(); }
|
|
var entity = new Entity(this.name + "(clone)");
|
|
entity.copyFrom(this);
|
|
entity.transform.position = position;
|
|
return entity;
|
|
};
|
|
Entity.prototype.onAddedToScene = function () {
|
|
};
|
|
Entity.prototype.onRemovedFromScene = function () {
|
|
if (this._isDestroyed)
|
|
this.components.removeAllComponents();
|
|
};
|
|
Entity.prototype.update = function () {
|
|
this.components.update();
|
|
};
|
|
Entity.prototype.debugRender = function () {
|
|
this.components.debugRender();
|
|
};
|
|
Entity.prototype.addComponent = function (component) {
|
|
component.entity = this;
|
|
this.components.add(component);
|
|
component.initialize();
|
|
return component;
|
|
};
|
|
Entity.prototype.getComponent = function (type) {
|
|
return this.components.getComponent(type, false);
|
|
};
|
|
Entity.prototype.hasComponent = function (type) {
|
|
return this.components.getComponent(type, false) != null;
|
|
};
|
|
Entity.prototype.getOrCreateComponent = function (type) {
|
|
var comp = this.components.getComponent(type, true);
|
|
if (!comp) {
|
|
comp = this.addComponent(type);
|
|
}
|
|
return comp;
|
|
};
|
|
Entity.prototype.getComponents = function (typeName, componentList) {
|
|
return this.components.getComponents(typeName, componentList);
|
|
};
|
|
Entity.prototype.removeComponent = function (component) {
|
|
this.components.remove(component);
|
|
};
|
|
Entity.prototype.removeComponentForType = function (type) {
|
|
var comp = this.getComponent(type);
|
|
if (comp) {
|
|
this.removeComponent(comp);
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
Entity.prototype.removeAllComponents = function () {
|
|
for (var i = 0; i < this.components.count; i++) {
|
|
this.removeComponent(this.components.buffer[i]);
|
|
}
|
|
};
|
|
Entity.prototype.compareTo = function (other) {
|
|
var compare = this._updateOrder - other._updateOrder;
|
|
if (compare == 0)
|
|
compare = this.id - other.id;
|
|
return compare;
|
|
};
|
|
Entity.prototype.toString = function () {
|
|
return "[Entity: name: " + this.name + ", tag: " + this.tag + ", enabled: " + this.enabled + ", depth: " + this.updateOrder + "]";
|
|
};
|
|
Entity.prototype.copyFrom = function (entity) {
|
|
this.tag = entity.tag;
|
|
this.updateInterval = entity.updateInterval;
|
|
this.updateOrder = entity.updateOrder;
|
|
this.enabled = entity.enabled;
|
|
this.transform.scale = entity.transform.scale;
|
|
this.transform.rotation = entity.transform.rotation;
|
|
for (var i = 0; i < entity.components.count; i++)
|
|
this.addComponent(entity.components.buffer[i].clone());
|
|
for (var i = 0; i < entity.components._componentsToAdd.length; i++)
|
|
this.addComponent(entity.components._componentsToAdd[i].clone());
|
|
for (var i = 0; i < entity.transform.childCount; i++) {
|
|
var child = entity.transform.getChild(i).entity;
|
|
var childClone = child.clone();
|
|
childClone.transform.copyFrom(child.transform);
|
|
childClone.transform.parent = this.transform;
|
|
}
|
|
};
|
|
Entity._idGenerator = 0;
|
|
return Entity;
|
|
}());
|
|
es.Entity = Entity;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Scene = (function (_super) {
|
|
__extends(Scene, _super);
|
|
function Scene() {
|
|
var _this = _super.call(this) || this;
|
|
_this.enablePostProcessing = true;
|
|
_this._sceneComponents = [];
|
|
_this._renderers = [];
|
|
_this._postProcessors = [];
|
|
_this.entities = new es.EntityList(_this);
|
|
_this.renderableComponents = new es.RenderableComponentList();
|
|
_this.content = new es.ContentManager();
|
|
_this.entityProcessors = new es.EntityProcessorList();
|
|
_this.initialize();
|
|
return _this;
|
|
}
|
|
Scene.createWithDefaultRenderer = function () {
|
|
var scene = new Scene();
|
|
scene.addRenderer(new es.DefaultRenderer());
|
|
return scene;
|
|
};
|
|
Scene.prototype.initialize = function () {
|
|
};
|
|
Scene.prototype.onStart = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
return [2];
|
|
});
|
|
});
|
|
};
|
|
Scene.prototype.unload = function () {
|
|
};
|
|
Scene.prototype.onActive = function () {
|
|
};
|
|
Scene.prototype.onDeactive = function () {
|
|
};
|
|
Scene.prototype.begin = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
if (this._renderers.length == 0) {
|
|
this.addRenderer(new es.DefaultRenderer());
|
|
console.warn("场景开始时没有渲染器 自动添加DefaultRenderer以保证能够正常渲染");
|
|
}
|
|
this.camera = this.createEntity("camera").getOrCreateComponent(new es.Camera());
|
|
es.Physics.reset();
|
|
if (this.entityProcessors)
|
|
this.entityProcessors.begin();
|
|
this.addEventListener(egret.Event.ACTIVATE, this.onActive, this);
|
|
this.addEventListener(egret.Event.DEACTIVATE, this.onDeactive, this);
|
|
this.camera.onSceneSizeChanged(this.stage.stageWidth, this.stage.stageHeight);
|
|
this._didSceneBegin = true;
|
|
this.onStart();
|
|
return [2];
|
|
});
|
|
});
|
|
};
|
|
Scene.prototype.end = function () {
|
|
this._didSceneBegin = false;
|
|
this.removeEventListener(egret.Event.DEACTIVATE, this.onDeactive, this);
|
|
this.removeEventListener(egret.Event.ACTIVATE, this.onActive, this);
|
|
for (var i = 0; i < this._renderers.length; i++) {
|
|
this._renderers[i].unload();
|
|
}
|
|
for (var i = 0; i < this._postProcessors.length; i++) {
|
|
this._postProcessors[i].unload();
|
|
}
|
|
this.entities.removeAllEntities();
|
|
this.removeChildren();
|
|
for (var i = 0; i < this._sceneComponents.length; i++) {
|
|
this._sceneComponents[i].onRemovedFromScene();
|
|
}
|
|
this._sceneComponents.length = 0;
|
|
this.camera = null;
|
|
this.content.dispose();
|
|
if (this.entityProcessors)
|
|
this.entityProcessors.end();
|
|
if (this.parent)
|
|
this.parent.removeChild(this);
|
|
this.unload();
|
|
};
|
|
Scene.prototype.update = function () {
|
|
this.entities.updateLists();
|
|
for (var i = this._sceneComponents.length - 1; i >= 0; i--) {
|
|
if (this._sceneComponents[i].enabled)
|
|
this._sceneComponents[i].update();
|
|
}
|
|
if (this.entityProcessors)
|
|
this.entityProcessors.update();
|
|
this.entities.update();
|
|
if (this.entityProcessors)
|
|
this.entityProcessors.lateUpdate();
|
|
this.renderableComponents.updateList();
|
|
};
|
|
Scene.prototype.render = function () {
|
|
if (this._renderers.length == 0) {
|
|
console.error("场景中没有渲染器!");
|
|
return;
|
|
}
|
|
for (var i = 0; i < this._renderers.length; i++) {
|
|
this._renderers[i].render(this);
|
|
}
|
|
};
|
|
Scene.prototype.postRender = function () {
|
|
if (this.enablePostProcessing) {
|
|
for (var i = 0; i < this._postProcessors.length; i++) {
|
|
if (this._postProcessors[i].enabled) {
|
|
this._postProcessors[i].process();
|
|
}
|
|
}
|
|
}
|
|
if (this._screenshotRequestCallback) {
|
|
var tex = new egret.RenderTexture();
|
|
tex.drawToTexture(this, new es.Rectangle(0, 0, this.stage.stageWidth, this.stage.stageHeight));
|
|
this._screenshotRequestCallback(tex);
|
|
this._screenshotRequestCallback = null;
|
|
}
|
|
};
|
|
Scene.prototype.requestScreenshot = function (callback) {
|
|
this._screenshotRequestCallback = callback;
|
|
};
|
|
Scene.prototype.addSceneComponent = function (component) {
|
|
component.scene = this;
|
|
component.onEnabled();
|
|
this._sceneComponents.push(component);
|
|
this._sceneComponents.sort(component.compareTo);
|
|
return component;
|
|
};
|
|
Scene.prototype.getSceneComponent = function (type) {
|
|
for (var i = 0; i < this._sceneComponents.length; i++) {
|
|
var component = this._sceneComponents[i];
|
|
if (component instanceof type)
|
|
return component;
|
|
}
|
|
return null;
|
|
};
|
|
Scene.prototype.getOrCreateSceneComponent = function (type) {
|
|
var comp = this.getSceneComponent(type);
|
|
if (comp == null)
|
|
comp = this.addSceneComponent(new type());
|
|
return comp;
|
|
};
|
|
Scene.prototype.removeSceneComponent = function (component) {
|
|
if (!this._sceneComponents.contains(component)) {
|
|
console.warn("SceneComponent" + component + "\u4E0D\u5728SceneComponents\u5217\u8868\u4E2D!");
|
|
return;
|
|
}
|
|
this._sceneComponents.remove(component);
|
|
component.onRemovedFromScene();
|
|
};
|
|
Scene.prototype.addRenderer = function (renderer) {
|
|
this._renderers.push(renderer);
|
|
this._renderers.sort();
|
|
renderer.onAddedToScene(this);
|
|
return renderer;
|
|
};
|
|
Scene.prototype.getRenderer = function (type) {
|
|
for (var i = 0; i < this._renderers.length; i++) {
|
|
if (this._renderers[i] instanceof type)
|
|
return this._renderers[i];
|
|
}
|
|
return null;
|
|
};
|
|
Scene.prototype.removeRenderer = function (renderer) {
|
|
if (!this._renderers.contains(renderer))
|
|
return;
|
|
this._renderers.remove(renderer);
|
|
renderer.unload();
|
|
};
|
|
Scene.prototype.addPostProcessor = function (postProcessor) {
|
|
this._postProcessors.push(postProcessor);
|
|
this._postProcessors.sort();
|
|
postProcessor.onAddedToScene(this);
|
|
if (this._didSceneBegin) {
|
|
postProcessor.onSceneBackBufferSizeChanged(this.stage.stageWidth, this.stage.stageHeight);
|
|
}
|
|
return postProcessor;
|
|
};
|
|
Scene.prototype.getPostProcessor = function (type) {
|
|
for (var i = 0; i < this._postProcessors.length; i++) {
|
|
if (this._postProcessors[i] instanceof type)
|
|
return this._postProcessors[i];
|
|
}
|
|
return null;
|
|
};
|
|
Scene.prototype.removePostProcessor = function (postProcessor) {
|
|
if (!this._postProcessors.contains(postProcessor))
|
|
return;
|
|
this._postProcessors.remove(postProcessor);
|
|
postProcessor.unload();
|
|
};
|
|
Scene.prototype.createEntity = function (name) {
|
|
var entity = new es.Entity(name);
|
|
return this.addEntity(entity);
|
|
};
|
|
Scene.prototype.createEntityAsync = function (name) {
|
|
var _this = this;
|
|
return new Promise(function (resolve) {
|
|
resolve(_this.createEntity(name));
|
|
});
|
|
};
|
|
Scene.prototype.addEntity = function (entity) {
|
|
if (this.entities.buffer.contains(entity))
|
|
console.warn("\u60A8\u8BD5\u56FE\u5C06\u540C\u4E00\u5B9E\u4F53\u6DFB\u52A0\u5230\u573A\u666F\u4E24\u6B21: " + entity);
|
|
this.entities.add(entity);
|
|
entity.scene = this;
|
|
for (var i = 0; i < entity.transform.childCount; i++)
|
|
this.addEntity(entity.transform.getChild(i).entity);
|
|
return entity;
|
|
};
|
|
Scene.prototype.destroyAllEntities = function () {
|
|
for (var i = 0; i < this.entities.count; i++) {
|
|
this.entities.buffer[i].destroy();
|
|
}
|
|
};
|
|
Scene.prototype.findEntity = function (name) {
|
|
return this.entities.findEntity(name);
|
|
};
|
|
Scene.prototype.findEntitiesWithTag = function (tag) {
|
|
return this.entities.entitiesWithTag(tag);
|
|
};
|
|
Scene.prototype.entitiesOfType = function (type) {
|
|
return this.entities.entitiesOfType(type);
|
|
};
|
|
Scene.prototype.findComponentOfType = function (type) {
|
|
return this.entities.findComponentOfType(type);
|
|
};
|
|
Scene.prototype.findComponentsOfType = function (type) {
|
|
return this.entities.findComponentsOfType(type);
|
|
};
|
|
Scene.prototype.addEntityProcessor = function (processor) {
|
|
processor.scene = this;
|
|
this.entityProcessors.add(processor);
|
|
return processor;
|
|
};
|
|
Scene.prototype.removeEntityProcessor = function (processor) {
|
|
this.entityProcessors.remove(processor);
|
|
};
|
|
Scene.prototype.getEntityProcessor = function () {
|
|
return this.entityProcessors.getProcessor();
|
|
};
|
|
return Scene;
|
|
}(egret.DisplayObjectContainer));
|
|
es.Scene = Scene;
|
|
})(es || (es = {}));
|
|
var transform;
|
|
(function (transform) {
|
|
var Component;
|
|
(function (Component) {
|
|
Component[Component["position"] = 0] = "position";
|
|
Component[Component["scale"] = 1] = "scale";
|
|
Component[Component["rotation"] = 2] = "rotation";
|
|
})(Component = transform.Component || (transform.Component = {}));
|
|
})(transform || (transform = {}));
|
|
var es;
|
|
(function (es) {
|
|
var HashObject = egret.HashObject;
|
|
var DirtyType;
|
|
(function (DirtyType) {
|
|
DirtyType[DirtyType["clean"] = 0] = "clean";
|
|
DirtyType[DirtyType["positionDirty"] = 1] = "positionDirty";
|
|
DirtyType[DirtyType["scaleDirty"] = 2] = "scaleDirty";
|
|
DirtyType[DirtyType["rotationDirty"] = 3] = "rotationDirty";
|
|
})(DirtyType = es.DirtyType || (es.DirtyType = {}));
|
|
var Transform = (function (_super) {
|
|
__extends(Transform, _super);
|
|
function Transform(entity) {
|
|
var _this = _super.call(this) || this;
|
|
_this._localTransform = es.Matrix2D.create();
|
|
_this._worldTransform = es.Matrix2D.create().identity();
|
|
_this._rotationMatrix = es.Matrix2D.create();
|
|
_this._translationMatrix = es.Matrix2D.create();
|
|
_this._scaleMatrix = es.Matrix2D.create();
|
|
_this._worldToLocalTransform = es.Matrix2D.create().identity();
|
|
_this._worldInverseTransform = es.Matrix2D.create().identity();
|
|
_this._position = es.Vector2.zero;
|
|
_this._scale = es.Vector2.one;
|
|
_this._rotation = 0;
|
|
_this._localPosition = es.Vector2.zero;
|
|
_this._localScale = es.Vector2.one;
|
|
_this._localRotation = 0;
|
|
_this.entity = entity;
|
|
_this.scale = es.Vector2.one;
|
|
_this._children = [];
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Transform.prototype, "childCount", {
|
|
get: function () {
|
|
return this._children.length;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "rotationDegrees", {
|
|
get: function () {
|
|
return es.MathHelper.toDegrees(this._rotation);
|
|
},
|
|
set: function (value) {
|
|
this.setRotation(es.MathHelper.toRadians(value));
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "localRotationDegrees", {
|
|
get: function () {
|
|
return es.MathHelper.toDegrees(this._localRotation);
|
|
},
|
|
set: function (value) {
|
|
this.localRotation = es.MathHelper.toRadians(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "localToWorldTransform", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
return this._worldTransform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "parent", {
|
|
get: function () {
|
|
return this._parent;
|
|
},
|
|
set: function (value) {
|
|
this.setParent(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "worldToLocalTransform", {
|
|
get: function () {
|
|
if (this._worldToLocalDirty) {
|
|
if (!this.parent) {
|
|
this._worldToLocalTransform = es.Matrix2D.create().identity();
|
|
}
|
|
else {
|
|
this.parent.updateTransform();
|
|
this._worldToLocalTransform = this.parent._worldTransform.invert();
|
|
}
|
|
this._worldToLocalDirty = false;
|
|
}
|
|
return this._worldToLocalTransform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "worldInverseTransform", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
if (this._worldInverseDirty) {
|
|
this._worldInverseTransform = this._worldTransform.invert();
|
|
this._worldInverseDirty = false;
|
|
}
|
|
return this._worldInverseTransform;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "position", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
if (this._positionDirty) {
|
|
if (!this.parent) {
|
|
this._position = this._localPosition;
|
|
}
|
|
else {
|
|
this.parent.updateTransform();
|
|
this._position = es.Vector2Ext.transformR(this._localPosition, this.parent._worldTransform);
|
|
}
|
|
this._positionDirty = false;
|
|
}
|
|
return this._position;
|
|
},
|
|
set: function (value) {
|
|
this.setPosition(value.x, value.y);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "scale", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
return this._scale;
|
|
},
|
|
set: function (value) {
|
|
this.setScale(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "rotation", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
return this._rotation;
|
|
},
|
|
set: function (value) {
|
|
this.setRotation(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "localPosition", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
return this._localPosition;
|
|
},
|
|
set: function (value) {
|
|
this.setLocalPosition(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "localScale", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
return this._localScale;
|
|
},
|
|
set: function (value) {
|
|
this.setLocalScale(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Transform.prototype, "localRotation", {
|
|
get: function () {
|
|
this.updateTransform();
|
|
return this._localRotation;
|
|
},
|
|
set: function (value) {
|
|
this.setLocalRotation(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Transform.prototype.getChild = function (index) {
|
|
return this._children[index];
|
|
};
|
|
Transform.prototype.setParent = function (parent) {
|
|
if (this._parent.equals(parent))
|
|
return this;
|
|
if (!this._parent) {
|
|
this._parent._children.remove(this);
|
|
this._parent._children.push(this);
|
|
}
|
|
this._parent = parent;
|
|
this.setDirty(DirtyType.positionDirty);
|
|
return this;
|
|
};
|
|
Transform.prototype.setPosition = function (x, y) {
|
|
var position = new es.Vector2(x, y);
|
|
if (position.equals(this._position))
|
|
return this;
|
|
this._position = position;
|
|
if (this.parent) {
|
|
this.localPosition = es.Vector2Ext.transformR(this._position, this._worldToLocalTransform);
|
|
}
|
|
else {
|
|
this.localPosition = position;
|
|
}
|
|
this._positionDirty = false;
|
|
return this;
|
|
};
|
|
Transform.prototype.setLocalPosition = function (localPosition) {
|
|
if (localPosition.equals(this._localPosition))
|
|
return this;
|
|
this._localPosition = localPosition;
|
|
this._localDirty = this._positionDirty = this._localPositionDirty = this._localRotationDirty = this._localScaleDirty = true;
|
|
this.setDirty(DirtyType.positionDirty);
|
|
return this;
|
|
};
|
|
Transform.prototype.setRotation = function (radians) {
|
|
this._rotation = radians;
|
|
if (this.parent) {
|
|
this.localRotation = this.parent.rotation + radians;
|
|
}
|
|
else {
|
|
this.localRotation = radians;
|
|
}
|
|
return this;
|
|
};
|
|
Transform.prototype.setRotationDegrees = function (degrees) {
|
|
return this.setRotation(es.MathHelper.toRadians(degrees));
|
|
};
|
|
Transform.prototype.lookAt = function (pos) {
|
|
var sign = this.position.x > pos.x ? -1 : 1;
|
|
var vectorToAlignTo = es.Vector2.normalize(es.Vector2.subtract(this.position, pos));
|
|
this.rotation = sign * Math.acos(es.Vector2.dot(vectorToAlignTo, es.Vector2.unitY));
|
|
};
|
|
Transform.prototype.setLocalRotation = function (radians) {
|
|
this._localRotation = radians;
|
|
this._localDirty = this._positionDirty = this._localPositionDirty = this._localRotationDirty = this._localScaleDirty = true;
|
|
this.setDirty(DirtyType.rotationDirty);
|
|
return this;
|
|
};
|
|
Transform.prototype.setLocalRotationDegrees = function (degrees) {
|
|
return this.setLocalRotation(es.MathHelper.toRadians(degrees));
|
|
};
|
|
Transform.prototype.setScale = function (scale) {
|
|
this._scale = scale;
|
|
if (this.parent) {
|
|
this.localScale = es.Vector2.divide(scale, this.parent._scale);
|
|
}
|
|
else {
|
|
this.localScale = scale;
|
|
}
|
|
return this;
|
|
};
|
|
Transform.prototype.setLocalScale = function (scale) {
|
|
this._localScale = scale;
|
|
this._localDirty = this._positionDirty = this._localScaleDirty = true;
|
|
this.setDirty(DirtyType.scaleDirty);
|
|
return this;
|
|
};
|
|
Transform.prototype.roundPosition = function () {
|
|
this.position = this._position.round();
|
|
};
|
|
Transform.prototype.updateTransform = function () {
|
|
if (this.hierarchyDirty != DirtyType.clean) {
|
|
if (this.parent)
|
|
this.parent.updateTransform();
|
|
if (this._localDirty) {
|
|
if (this._localPositionDirty) {
|
|
this._translationMatrix = es.Matrix2D.create().translate(this._localPosition.x, this._localPosition.y);
|
|
this._localPositionDirty = false;
|
|
}
|
|
if (this._localRotationDirty) {
|
|
this._rotationMatrix = es.Matrix2D.create().rotate(this._localRotation);
|
|
this._localRotationDirty = false;
|
|
}
|
|
if (this._localScaleDirty) {
|
|
this._scaleMatrix = es.Matrix2D.create().scale(this._localScale.x, this._localScale.y);
|
|
this._localScaleDirty = false;
|
|
}
|
|
this._localTransform = this._scaleMatrix.multiply(this._rotationMatrix);
|
|
this._localTransform = this._localTransform.multiply(this._translationMatrix);
|
|
if (!this.parent) {
|
|
this._worldTransform = this._localTransform;
|
|
this._rotation = this._localRotation;
|
|
this._scale = this._localScale;
|
|
this._worldInverseDirty = true;
|
|
}
|
|
this._localDirty = false;
|
|
}
|
|
if (this.parent) {
|
|
this._worldTransform = this._localTransform.multiply(this.parent._worldTransform);
|
|
this._rotation = this._localRotation + this.parent._rotation;
|
|
this._scale = es.Vector2.multiply(this.parent._scale, this._localScale);
|
|
this._worldInverseDirty = true;
|
|
}
|
|
this._worldToLocalDirty = true;
|
|
this._positionDirty = true;
|
|
this.hierarchyDirty = DirtyType.clean;
|
|
}
|
|
};
|
|
Transform.prototype.setDirty = function (dirtyFlagType) {
|
|
if ((this.hierarchyDirty & dirtyFlagType) == 0) {
|
|
this.hierarchyDirty |= dirtyFlagType;
|
|
switch (dirtyFlagType) {
|
|
case es.DirtyType.positionDirty:
|
|
this.entity.onTransformChanged(transform.Component.position);
|
|
break;
|
|
case es.DirtyType.rotationDirty:
|
|
this.entity.onTransformChanged(transform.Component.rotation);
|
|
break;
|
|
case es.DirtyType.scaleDirty:
|
|
this.entity.onTransformChanged(transform.Component.scale);
|
|
break;
|
|
}
|
|
if (!this._children)
|
|
this._children = [];
|
|
for (var i = 0; i < this._children.length; i++)
|
|
this._children[i].setDirty(dirtyFlagType);
|
|
}
|
|
};
|
|
Transform.prototype.copyFrom = function (transform) {
|
|
this._position = transform.position;
|
|
this._localPosition = transform._localPosition;
|
|
this._rotation = transform._rotation;
|
|
this._localRotation = transform._localRotation;
|
|
this._scale = transform._scale;
|
|
this._localScale = transform._localScale;
|
|
this.setDirty(DirtyType.positionDirty);
|
|
this.setDirty(DirtyType.rotationDirty);
|
|
this.setDirty(DirtyType.scaleDirty);
|
|
};
|
|
Transform.prototype.toString = function () {
|
|
return "[Transform: parent: " + this.parent + ", position: " + this.position + ", rotation: " + this.rotation + ",\n scale: " + this.scale + ", localPosition: " + this._localPosition + ", localRotation: " + this._localRotation + ",\n localScale: " + this._localScale + "]";
|
|
};
|
|
Transform.prototype.equals = function (other) {
|
|
return other.hashCode == this.hashCode;
|
|
};
|
|
return Transform;
|
|
}(HashObject));
|
|
es.Transform = Transform;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var CameraStyle;
|
|
(function (CameraStyle) {
|
|
CameraStyle[CameraStyle["lockOn"] = 0] = "lockOn";
|
|
CameraStyle[CameraStyle["cameraWindow"] = 1] = "cameraWindow";
|
|
})(CameraStyle = es.CameraStyle || (es.CameraStyle = {}));
|
|
var CameraInset = (function () {
|
|
function CameraInset() {
|
|
this.left = 0;
|
|
this.right = 0;
|
|
this.top = 0;
|
|
this.bottom = 0;
|
|
}
|
|
return CameraInset;
|
|
}());
|
|
es.CameraInset = CameraInset;
|
|
var Camera = (function (_super) {
|
|
__extends(Camera, _super);
|
|
function Camera(targetEntity, cameraStyle) {
|
|
if (targetEntity === void 0) { targetEntity = null; }
|
|
if (cameraStyle === void 0) { cameraStyle = CameraStyle.lockOn; }
|
|
var _this = _super.call(this) || this;
|
|
_this._inset = new CameraInset();
|
|
_this._areMatrixedDirty = true;
|
|
_this._areBoundsDirty = true;
|
|
_this._isProjectionMatrixDirty = true;
|
|
_this.followLerp = 0.1;
|
|
_this.deadzone = new es.Rectangle();
|
|
_this.focusOffset = es.Vector2.zero;
|
|
_this.mapLockEnabled = false;
|
|
_this.mapSize = new es.Rectangle();
|
|
_this._desiredPositionDelta = new es.Vector2();
|
|
_this._worldSpaceDeadZone = new es.Rectangle();
|
|
_this._minimumZoom = 0.3;
|
|
_this._maximumZoom = 3;
|
|
_this._bounds = new es.Rectangle();
|
|
_this._transformMatrix = new es.Matrix2D().identity();
|
|
_this._inverseTransformMatrix = new es.Matrix2D().identity();
|
|
_this._origin = es.Vector2.zero;
|
|
_this._targetEntity = targetEntity;
|
|
_this._cameraStyle = cameraStyle;
|
|
_this.setZoom(0);
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Camera.prototype, "position", {
|
|
get: function () {
|
|
return this.entity.transform.position;
|
|
},
|
|
set: function (value) {
|
|
this.entity.transform.position = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "rotation", {
|
|
get: function () {
|
|
return this.entity.transform.rotation;
|
|
},
|
|
set: function (value) {
|
|
this.entity.transform.rotation = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "zoom", {
|
|
get: function () {
|
|
if (this._zoom == 0)
|
|
return 1;
|
|
if (this._zoom < 1)
|
|
return es.MathHelper.map(this._zoom, this._minimumZoom, 1, -1, 0);
|
|
return es.MathHelper.map(this._zoom, 1, this._maximumZoom, 0, 1);
|
|
},
|
|
set: function (value) {
|
|
this.setZoom(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "minimumZoom", {
|
|
get: function () {
|
|
return this._minimumZoom;
|
|
},
|
|
set: function (value) {
|
|
this.setMinimumZoom(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "maximumZoom", {
|
|
get: function () {
|
|
return this._maximumZoom;
|
|
},
|
|
set: function (value) {
|
|
this.setMaximumZoom(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "bounds", {
|
|
get: function () {
|
|
if (this._areMatrixedDirty)
|
|
this.updateMatrixes();
|
|
if (this._areBoundsDirty) {
|
|
var topLeft = this.screenToWorldPoint(new es.Vector2(this._inset.left, this._inset.top));
|
|
var bottomRight = this.screenToWorldPoint(new es.Vector2(es.Core.graphicsDevice.viewport.width - this._inset.right, es.Core.graphicsDevice.viewport.height - this._inset.bottom));
|
|
if (this.entity.transform.rotation != 0) {
|
|
var topRight = this.screenToWorldPoint(new es.Vector2(es.Core.graphicsDevice.viewport.width - this._inset.right, this._inset.top));
|
|
var bottomLeft = this.screenToWorldPoint(new es.Vector2(this._inset.left, es.Core.graphicsDevice.viewport.height - this._inset.bottom));
|
|
var minX = Math.min(topLeft.x, bottomRight.x, topRight.x, bottomLeft.x);
|
|
var maxX = Math.max(topLeft.x, bottomRight.x, topRight.x, bottomLeft.x);
|
|
var minY = Math.min(topLeft.y, bottomRight.y, topRight.y, bottomLeft.y);
|
|
var maxY = Math.max(topLeft.y, bottomRight.y, topRight.y, bottomLeft.y);
|
|
this._bounds.location = new es.Vector2(minX, minY);
|
|
this._bounds.width = maxX - minX;
|
|
this._bounds.height = maxY - minY;
|
|
}
|
|
else {
|
|
this._bounds.location = topLeft;
|
|
this._bounds.width = bottomRight.x - topLeft.x;
|
|
this._bounds.height = bottomRight.y - topLeft.y;
|
|
}
|
|
this._areBoundsDirty = false;
|
|
}
|
|
return this._bounds;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "transformMatrix", {
|
|
get: function () {
|
|
if (this._areMatrixedDirty)
|
|
this.updateMatrixes();
|
|
return this._transformMatrix;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "inverseTransformMatrix", {
|
|
get: function () {
|
|
if (this._areMatrixedDirty)
|
|
this.updateMatrixes();
|
|
return this._inverseTransformMatrix;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Camera.prototype, "origin", {
|
|
get: function () {
|
|
return this._origin;
|
|
},
|
|
set: function (value) {
|
|
if (this._origin != value) {
|
|
this._origin = value;
|
|
this._areMatrixedDirty = true;
|
|
}
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Camera.prototype.onSceneSizeChanged = function (newWidth, newHeight) {
|
|
var oldOrigin = this._origin;
|
|
this.origin = new es.Vector2(newWidth / 2, newHeight / 2);
|
|
this.entity.transform.position = es.Vector2.add(this.entity.transform.position, es.Vector2.subtract(this._origin, oldOrigin));
|
|
};
|
|
Camera.prototype.setInset = function (left, right, top, bottom) {
|
|
this._inset = new CameraInset();
|
|
this._inset.left = left;
|
|
this._inset.right = right;
|
|
this._inset.top = top;
|
|
this._inset.bottom = bottom;
|
|
this._areBoundsDirty = true;
|
|
return this;
|
|
};
|
|
Camera.prototype.setPosition = function (position) {
|
|
this.entity.transform.setPosition(position.x, position.y);
|
|
return this;
|
|
};
|
|
Camera.prototype.setRotation = function (rotation) {
|
|
this.entity.transform.setRotation(rotation);
|
|
return this;
|
|
};
|
|
Camera.prototype.setZoom = function (zoom) {
|
|
var newZoom = es.MathHelper.clamp(zoom, -1, 1);
|
|
if (newZoom == 0) {
|
|
this._zoom = 1;
|
|
}
|
|
else if (newZoom < 0) {
|
|
this._zoom = es.MathHelper.map(newZoom, -1, 0, this._minimumZoom, 1);
|
|
}
|
|
else {
|
|
this._zoom = es.MathHelper.map(newZoom, 0, 1, 1, this._maximumZoom);
|
|
}
|
|
this._areMatrixedDirty = true;
|
|
return this;
|
|
};
|
|
Camera.prototype.setMinimumZoom = function (minZoom) {
|
|
if (minZoom <= 0) {
|
|
console.error("minimumZoom must be greater than zero");
|
|
return;
|
|
}
|
|
if (this._zoom < minZoom)
|
|
this._zoom = this.minimumZoom;
|
|
this._minimumZoom = minZoom;
|
|
return this;
|
|
};
|
|
Camera.prototype.setMaximumZoom = function (maxZoom) {
|
|
if (maxZoom <= 0) {
|
|
console.error("maximumZoom must be greater than zero");
|
|
return;
|
|
}
|
|
if (this._zoom > maxZoom)
|
|
this._zoom = maxZoom;
|
|
this._maximumZoom = maxZoom;
|
|
return this;
|
|
};
|
|
Camera.prototype.onEntityTransformChanged = function (comp) {
|
|
this._areMatrixedDirty = true;
|
|
};
|
|
Camera.prototype.zoomIn = function (deltaZoom) {
|
|
this.zoom += deltaZoom;
|
|
};
|
|
Camera.prototype.zoomOut = function (deltaZoom) {
|
|
this.zoom -= deltaZoom;
|
|
};
|
|
Camera.prototype.worldToScreenPoint = function (worldPosition) {
|
|
this.updateMatrixes();
|
|
worldPosition = es.Vector2.transform(worldPosition, this._transformMatrix);
|
|
return worldPosition;
|
|
};
|
|
Camera.prototype.screenToWorldPoint = function (screenPosition) {
|
|
this.updateMatrixes();
|
|
screenPosition = es.Vector2.transform(screenPosition, this._inverseTransformMatrix);
|
|
return screenPosition;
|
|
};
|
|
Camera.prototype.mouseToWorldPoint = function () {
|
|
return this.screenToWorldPoint(es.Input.touchPosition);
|
|
};
|
|
Camera.prototype.onAddedToEntity = function () {
|
|
this.follow(this._targetEntity, this._cameraStyle);
|
|
};
|
|
Camera.prototype.update = function () {
|
|
var halfScreen = es.Vector2.multiply(new es.Vector2(this.bounds.width, this.bounds.height), new es.Vector2(0.5));
|
|
this._worldSpaceDeadZone.x = this.position.x - halfScreen.x * es.Core.scene.scaleX + this.deadzone.x + this.focusOffset.x;
|
|
this._worldSpaceDeadZone.y = this.position.y - halfScreen.y * es.Core.scene.scaleY + this.deadzone.y + this.focusOffset.y;
|
|
this._worldSpaceDeadZone.width = this.deadzone.width;
|
|
this._worldSpaceDeadZone.height = this.deadzone.height;
|
|
if (this._targetEntity)
|
|
this.updateFollow();
|
|
this.position = es.Vector2.lerp(this.position, es.Vector2.add(this.position, this._desiredPositionDelta), this.followLerp);
|
|
this.entity.transform.roundPosition();
|
|
if (this.mapLockEnabled) {
|
|
this.position = this.clampToMapSize(this.position);
|
|
this.entity.transform.roundPosition();
|
|
}
|
|
};
|
|
Camera.prototype.clampToMapSize = function (position) {
|
|
var halfScreen = es.Vector2.multiply(new es.Vector2(this.bounds.width, this.bounds.height), new es.Vector2(0.5)).add(new es.Vector2(this.mapSize.x, this.mapSize.y));
|
|
var cameraMax = new es.Vector2(this.mapSize.width - halfScreen.x, this.mapSize.height - halfScreen.y);
|
|
return es.Vector2.clamp(position, halfScreen, cameraMax);
|
|
};
|
|
Camera.prototype.updateFollow = function () {
|
|
this._desiredPositionDelta.x = this._desiredPositionDelta.y = 0;
|
|
if (this._cameraStyle == CameraStyle.lockOn) {
|
|
var targetX = this._targetEntity.transform.position.x;
|
|
var targetY = this._targetEntity.transform.position.y;
|
|
if (this._worldSpaceDeadZone.x > targetX)
|
|
this._desiredPositionDelta.x = targetX - this._worldSpaceDeadZone.x;
|
|
else if (this._worldSpaceDeadZone.x < targetX)
|
|
this._desiredPositionDelta.x = targetX - this._worldSpaceDeadZone.x;
|
|
if (this._worldSpaceDeadZone.y < targetY)
|
|
this._desiredPositionDelta.y = targetY - this._worldSpaceDeadZone.y;
|
|
else if (this._worldSpaceDeadZone.y > targetY)
|
|
this._desiredPositionDelta.y = targetY - this._worldSpaceDeadZone.y;
|
|
}
|
|
else {
|
|
if (!this._targetCollider) {
|
|
this._targetCollider = this._targetEntity.getComponent(es.Collider);
|
|
if (!this._targetCollider)
|
|
return;
|
|
}
|
|
var targetBounds = this._targetEntity.getComponent(es.Collider).bounds;
|
|
if (!this._worldSpaceDeadZone.containsRect(targetBounds)) {
|
|
if (this._worldSpaceDeadZone.left > targetBounds.left)
|
|
this._desiredPositionDelta.x = targetBounds.left - this._worldSpaceDeadZone.left;
|
|
else if (this._worldSpaceDeadZone.right < targetBounds.right)
|
|
this._desiredPositionDelta.x = targetBounds.right - this._worldSpaceDeadZone.right;
|
|
if (this._worldSpaceDeadZone.bottom < targetBounds.bottom)
|
|
this._desiredPositionDelta.y = targetBounds.bottom - this._worldSpaceDeadZone.bottom;
|
|
else if (this._worldSpaceDeadZone.top > targetBounds.top)
|
|
this._desiredPositionDelta.y = targetBounds.top - this._worldSpaceDeadZone.top;
|
|
}
|
|
}
|
|
};
|
|
Camera.prototype.follow = function (targetEntity, cameraStyle) {
|
|
if (cameraStyle === void 0) { cameraStyle = CameraStyle.cameraWindow; }
|
|
this._targetEntity = targetEntity;
|
|
this._cameraStyle = cameraStyle;
|
|
switch (this._cameraStyle) {
|
|
case CameraStyle.cameraWindow:
|
|
var w = this.bounds.width / 6;
|
|
var h = this.bounds.height / 3;
|
|
this.deadzone = new es.Rectangle((this.bounds.width - w) / 2, (this.bounds.height - h) / 2, w, h);
|
|
break;
|
|
case CameraStyle.lockOn:
|
|
this.deadzone = new es.Rectangle(this.bounds.width / 2, this.bounds.height / 2, 10, 10);
|
|
break;
|
|
}
|
|
};
|
|
Camera.prototype.setCenteredDeadzone = function (width, height) {
|
|
this.deadzone = new es.Rectangle((this.bounds.width - width) / 2, (this.bounds.height - height) / 2, width, height);
|
|
};
|
|
Camera.prototype.updateMatrixes = function () {
|
|
if (!this._areMatrixedDirty)
|
|
return;
|
|
var tempMat;
|
|
this._transformMatrix = es.Matrix2D.create().translate(-this.entity.transform.position.x, -this.entity.transform.position.y);
|
|
if (this._zoom != 1) {
|
|
tempMat = es.Matrix2D.create().scale(this._zoom, this._zoom);
|
|
this._transformMatrix = this._transformMatrix.multiply(tempMat);
|
|
}
|
|
if (this.entity.transform.rotation != 0) {
|
|
tempMat = es.Matrix2D.create().rotate(this.entity.transform.rotation);
|
|
this._transformMatrix = this._transformMatrix.multiply(tempMat);
|
|
}
|
|
tempMat = es.Matrix2D.create().translate(this._origin.x, this._origin.y);
|
|
this._transformMatrix = this._transformMatrix.multiply(tempMat);
|
|
this._inverseTransformMatrix = this._transformMatrix.invert();
|
|
this._areBoundsDirty = true;
|
|
this._areMatrixedDirty = false;
|
|
};
|
|
return Camera;
|
|
}(es.Component));
|
|
es.Camera = Camera;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var CameraShake = (function (_super) {
|
|
__extends(CameraShake, _super);
|
|
function CameraShake() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this._shakeDirection = es.Vector2.zero;
|
|
_this._shakeOffset = es.Vector2.zero;
|
|
_this._shakeIntensity = 0;
|
|
_this._shakeDegredation = 0.95;
|
|
return _this;
|
|
}
|
|
CameraShake.prototype.shake = function (shakeIntensify, shakeDegredation, shakeDirection) {
|
|
if (shakeIntensify === void 0) { shakeIntensify = 15; }
|
|
if (shakeDegredation === void 0) { shakeDegredation = 0.9; }
|
|
if (shakeDirection === void 0) { shakeDirection = es.Vector2.zero; }
|
|
this.enabled = true;
|
|
if (this._shakeIntensity < shakeIntensify) {
|
|
this._shakeDirection = shakeDirection;
|
|
this._shakeIntensity = shakeIntensify;
|
|
if (shakeDegredation < 0 || shakeDegredation >= 1) {
|
|
shakeDegredation = 0.95;
|
|
}
|
|
this._shakeDegredation = shakeDegredation;
|
|
}
|
|
};
|
|
CameraShake.prototype.update = function () {
|
|
if (Math.abs(this._shakeIntensity) > 0) {
|
|
this._shakeOffset = this._shakeDirection;
|
|
if (this._shakeOffset.x != 0 || this._shakeOffset.y != 0) {
|
|
this._shakeOffset.normalize();
|
|
}
|
|
else {
|
|
this._shakeOffset.x = this._shakeOffset.x + Math.random() - 0.5;
|
|
this._shakeOffset.y = this._shakeOffset.y + Math.random() - 0.5;
|
|
}
|
|
this._shakeOffset.multiply(new es.Vector2(this._shakeIntensity));
|
|
this._shakeIntensity *= -this._shakeDegredation;
|
|
if (Math.abs(this._shakeIntensity) <= 0.01) {
|
|
this._shakeIntensity = 0;
|
|
this.enabled = false;
|
|
}
|
|
}
|
|
this.entity.scene.camera.position.add(this._shakeOffset);
|
|
};
|
|
return CameraShake;
|
|
}(es.Component));
|
|
es.CameraShake = CameraShake;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ComponentPool = (function () {
|
|
function ComponentPool(typeClass) {
|
|
this._type = typeClass;
|
|
this._cache = [];
|
|
}
|
|
ComponentPool.prototype.obtain = function () {
|
|
try {
|
|
return this._cache.length > 0 ? this._cache.shift() : new this._type();
|
|
}
|
|
catch (err) {
|
|
throw new Error(this._type + err);
|
|
}
|
|
};
|
|
ComponentPool.prototype.free = function (component) {
|
|
component.reset();
|
|
this._cache.push(component);
|
|
};
|
|
return ComponentPool;
|
|
}());
|
|
es.ComponentPool = ComponentPool;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var IUpdatableComparer = (function () {
|
|
function IUpdatableComparer() {
|
|
}
|
|
IUpdatableComparer.prototype.compare = function (a, b) {
|
|
return a.updateOrder - b.updateOrder;
|
|
};
|
|
return IUpdatableComparer;
|
|
}());
|
|
es.IUpdatableComparer = IUpdatableComparer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PooledComponent = (function (_super) {
|
|
__extends(PooledComponent, _super);
|
|
function PooledComponent() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
return PooledComponent;
|
|
}(es.Component));
|
|
es.PooledComponent = PooledComponent;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var RenderableComponent = (function (_super) {
|
|
__extends(RenderableComponent, _super);
|
|
function RenderableComponent() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.displayObject = new egret.DisplayObject();
|
|
_this.color = 0x000000;
|
|
_this._areBoundsDirty = true;
|
|
_this._localOffset = es.Vector2.zero;
|
|
_this._renderLayer = 0;
|
|
_this._bounds = new es.Rectangle();
|
|
return _this;
|
|
}
|
|
Object.defineProperty(RenderableComponent.prototype, "width", {
|
|
get: function () {
|
|
return this.bounds.width;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RenderableComponent.prototype, "height", {
|
|
get: function () {
|
|
return this.bounds.height;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RenderableComponent.prototype, "localOffset", {
|
|
get: function () {
|
|
return this._localOffset;
|
|
},
|
|
set: function (value) {
|
|
this.setLocalOffset(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RenderableComponent.prototype, "renderLayer", {
|
|
get: function () {
|
|
return this._renderLayer;
|
|
},
|
|
set: function (value) {
|
|
this.setRenderLayer(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RenderableComponent.prototype, "bounds", {
|
|
get: function () {
|
|
if (this._areBoundsDirty) {
|
|
this._bounds.calculateBounds(this.entity.transform.position, this._localOffset, es.Vector2.zero, this.entity.transform.scale, this.entity.transform.rotation, this.width, this.height);
|
|
this._areBoundsDirty = false;
|
|
}
|
|
return this._bounds;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RenderableComponent.prototype, "isVisible", {
|
|
get: function () {
|
|
return this._isVisible;
|
|
},
|
|
set: function (value) {
|
|
if (this._isVisible != value) {
|
|
this._isVisible = value;
|
|
if (this._isVisible)
|
|
this.onBecameVisible();
|
|
else
|
|
this.onBecameInvisible();
|
|
}
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
RenderableComponent.prototype.onEntityTransformChanged = function (comp) {
|
|
this._areBoundsDirty = true;
|
|
};
|
|
RenderableComponent.prototype.isVisibleFromCamera = function (camera) {
|
|
if (!camera)
|
|
return false;
|
|
this.isVisible = camera.bounds.intersects(this.displayObject.getBounds().union(this.bounds));
|
|
return this.isVisible;
|
|
};
|
|
RenderableComponent.prototype.setRenderLayer = function (renderLayer) {
|
|
if (renderLayer != this._renderLayer) {
|
|
var oldRenderLayer = this._renderLayer;
|
|
this._renderLayer = renderLayer;
|
|
if (this.entity && this.entity.scene)
|
|
this.entity.scene.renderableComponents.updateRenderableRenderLayer(this, oldRenderLayer, this._renderLayer);
|
|
}
|
|
return this;
|
|
};
|
|
RenderableComponent.prototype.setColor = function (color) {
|
|
this.color = color;
|
|
return this;
|
|
};
|
|
RenderableComponent.prototype.setLocalOffset = function (offset) {
|
|
if (this._localOffset != offset) {
|
|
this._localOffset = offset;
|
|
}
|
|
return this;
|
|
};
|
|
RenderableComponent.prototype.sync = function (camera) {
|
|
var afterPos = new es.Vector2(this.entity.position.x + this.localOffset.x - camera.position.x + camera.origin.x, this.entity.position.y + this.localOffset.y - camera.position.y + camera.origin.y);
|
|
if (this.displayObject.x != afterPos.x)
|
|
this.displayObject.x = afterPos.x;
|
|
if (this.displayObject.y != afterPos.y)
|
|
this.displayObject.y = afterPos.y;
|
|
if (this.displayObject.scaleX != this.entity.scale.x)
|
|
this.displayObject.scaleX = this.entity.scale.x;
|
|
if (this.displayObject.scaleY != this.entity.scale.y)
|
|
this.displayObject.scaleY = this.entity.scale.y;
|
|
if (this.displayObject.rotation != this.entity.rotation)
|
|
this.displayObject.rotation = this.entity.rotation;
|
|
};
|
|
RenderableComponent.prototype.toString = function () {
|
|
return "[RenderableComponent] renderLayer: " + this.renderLayer;
|
|
};
|
|
RenderableComponent.prototype.onBecameVisible = function () {
|
|
this.displayObject.visible = this.isVisible;
|
|
};
|
|
RenderableComponent.prototype.onBecameInvisible = function () {
|
|
this.displayObject.visible = this.isVisible;
|
|
};
|
|
return RenderableComponent;
|
|
}(es.Component));
|
|
es.RenderableComponent = RenderableComponent;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SceneComponent = (function () {
|
|
function SceneComponent() {
|
|
this.updateOrder = 0;
|
|
this._enabled = true;
|
|
}
|
|
Object.defineProperty(SceneComponent.prototype, "enabled", {
|
|
get: function () {
|
|
return this._enabled;
|
|
},
|
|
set: function (value) {
|
|
this.setEnabled(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
SceneComponent.prototype.onEnabled = function () {
|
|
};
|
|
SceneComponent.prototype.onDisabled = function () {
|
|
};
|
|
SceneComponent.prototype.onRemovedFromScene = function () {
|
|
};
|
|
SceneComponent.prototype.update = function () {
|
|
};
|
|
SceneComponent.prototype.setEnabled = function (isEnabled) {
|
|
if (this._enabled != isEnabled) {
|
|
this._enabled = isEnabled;
|
|
if (this._enabled) {
|
|
}
|
|
else {
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
SceneComponent.prototype.setUpdateOrder = function (updateOrder) {
|
|
if (this.updateOrder != updateOrder) {
|
|
this.updateOrder = updateOrder;
|
|
es.Core.scene._sceneComponents.sort(this.compareTo);
|
|
}
|
|
return this;
|
|
};
|
|
SceneComponent.prototype.compareTo = function (other) {
|
|
return this.updateOrder - other.updateOrder;
|
|
};
|
|
return SceneComponent;
|
|
}());
|
|
es.SceneComponent = SceneComponent;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Bitmap = egret.Bitmap;
|
|
var SpriteRenderer = (function (_super) {
|
|
__extends(SpriteRenderer, _super);
|
|
function SpriteRenderer(sprite) {
|
|
if (sprite === void 0) { sprite = null; }
|
|
var _this = _super.call(this) || this;
|
|
if (sprite instanceof es.Sprite)
|
|
_this.setSprite(sprite);
|
|
else if (sprite instanceof egret.Texture)
|
|
_this.setSprite(new es.Sprite(sprite));
|
|
return _this;
|
|
}
|
|
Object.defineProperty(SpriteRenderer.prototype, "bounds", {
|
|
get: function () {
|
|
if (this._areBoundsDirty) {
|
|
if (this._sprite) {
|
|
this._bounds.calculateBounds(this.entity.transform.position, this._localOffset, this._origin, this.entity.transform.scale, this.entity.transform.rotation, this._sprite.sourceRect.width, this._sprite.sourceRect.height);
|
|
this._areBoundsDirty = false;
|
|
}
|
|
}
|
|
return this._bounds;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(SpriteRenderer.prototype, "originNormalized", {
|
|
get: function () {
|
|
return new es.Vector2(this._origin.x / this.width * this.entity.transform.scale.x, this._origin.y / this.height * this.entity.transform.scale.y);
|
|
},
|
|
set: function (value) {
|
|
this.setOrigin(new es.Vector2(value.x * this.width / this.entity.transform.scale.x, value.y * this.height / this.entity.transform.scale.y));
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(SpriteRenderer.prototype, "origin", {
|
|
get: function () {
|
|
return this._origin;
|
|
},
|
|
set: function (value) {
|
|
this.setOrigin(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(SpriteRenderer.prototype, "sprite", {
|
|
get: function () {
|
|
return this._sprite;
|
|
},
|
|
set: function (value) {
|
|
this.setSprite(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
SpriteRenderer.prototype.setSprite = function (sprite) {
|
|
this._sprite = sprite;
|
|
if (this._sprite) {
|
|
this._origin = this._sprite.origin;
|
|
this.displayObject.anchorOffsetX = this._origin.x;
|
|
this.displayObject.anchorOffsetY = this._origin.y;
|
|
}
|
|
this.displayObject = new Bitmap(sprite.texture2D);
|
|
return this;
|
|
};
|
|
SpriteRenderer.prototype.setOrigin = function (origin) {
|
|
if (this._origin != origin) {
|
|
this._origin = origin;
|
|
this.displayObject.anchorOffsetX = this._origin.x;
|
|
this.displayObject.anchorOffsetY = this._origin.y;
|
|
this._areBoundsDirty = true;
|
|
}
|
|
return this;
|
|
};
|
|
SpriteRenderer.prototype.setOriginNormalized = function (value) {
|
|
this.setOrigin(new es.Vector2(value.x * this.width / this.entity.transform.scale.x, value.y * this.height / this.entity.transform.scale.y));
|
|
return this;
|
|
};
|
|
SpriteRenderer.prototype.render = function (camera) {
|
|
this.sync(camera);
|
|
var afterPos = new es.Vector2(this.entity.position.x + this.localOffset.x - camera.position.x + camera.origin.x, this.entity.position.y + this.localOffset.y - camera.position.y + camera.origin.y);
|
|
if (this.displayObject.x != afterPos.x)
|
|
this.displayObject.x = afterPos.x;
|
|
if (this.displayObject.y != afterPos.y)
|
|
this.displayObject.y = afterPos.y;
|
|
};
|
|
return SpriteRenderer;
|
|
}(es.RenderableComponent));
|
|
es.SpriteRenderer = SpriteRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Bitmap = egret.Bitmap;
|
|
var RenderTexture = egret.RenderTexture;
|
|
var TiledSpriteRenderer = (function (_super) {
|
|
__extends(TiledSpriteRenderer, _super);
|
|
function TiledSpriteRenderer(sprite) {
|
|
var _this = _super.call(this, sprite) || this;
|
|
_this._textureScale = es.Vector2.one;
|
|
_this._inverseTexScale = es.Vector2.one;
|
|
_this._gapX = 0;
|
|
_this._gapY = 0;
|
|
_this._sourceRect = sprite.sourceRect;
|
|
var bitmap = _this.displayObject;
|
|
bitmap.$fillMode = egret.BitmapFillMode.REPEAT;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "bounds", {
|
|
get: function () {
|
|
if (this._areBoundsDirty) {
|
|
if (this._sprite) {
|
|
this._bounds.calculateBounds(this.entity.transform.position, this._localOffset, this._origin, this.entity.transform.scale, this.entity.transform.rotation, this.width, this.height);
|
|
this._areBoundsDirty = false;
|
|
}
|
|
}
|
|
return this._bounds;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "scrollX", {
|
|
get: function () {
|
|
return this._sourceRect.x;
|
|
},
|
|
set: function (value) {
|
|
this._sourceRect.x = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "scrollY", {
|
|
get: function () {
|
|
return this._sourceRect.y;
|
|
},
|
|
set: function (value) {
|
|
this._sourceRect.y = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "textureScale", {
|
|
get: function () {
|
|
return this._textureScale;
|
|
},
|
|
set: function (value) {
|
|
this._textureScale = value;
|
|
this._inverseTexScale = new es.Vector2(1 / this._textureScale.x, 1 / this._textureScale.y);
|
|
this._sourceRect.width = this._sprite.sourceRect.width * this._inverseTexScale.x;
|
|
this._sourceRect.height = this._sprite.sourceRect.height * this._inverseTexScale.y;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "width", {
|
|
get: function () {
|
|
return this._sourceRect.width;
|
|
},
|
|
set: function (value) {
|
|
this._areBoundsDirty = true;
|
|
this._sourceRect.width = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "height", {
|
|
get: function () {
|
|
return this._sourceRect.height;
|
|
},
|
|
set: function (value) {
|
|
this._areBoundsDirty = true;
|
|
this._sourceRect.height = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledSpriteRenderer.prototype, "gapXY", {
|
|
get: function () {
|
|
return new es.Vector2(this._gapX, this._gapY);
|
|
},
|
|
set: function (value) {
|
|
this._gapX = value.x;
|
|
this._gapY = value.y;
|
|
var renderTexture = new RenderTexture();
|
|
var newRectangle = this.sprite.sourceRect;
|
|
newRectangle.x = 0;
|
|
newRectangle.y = 0;
|
|
newRectangle.width += this._gapX;
|
|
newRectangle.height += this._gapY;
|
|
renderTexture.drawToTexture(this.displayObject, newRectangle);
|
|
if (!this.displayObject) {
|
|
this.displayObject = new Bitmap(renderTexture);
|
|
}
|
|
else {
|
|
this.displayObject.texture = renderTexture;
|
|
}
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TiledSpriteRenderer.prototype.setGapXY = function (value) {
|
|
this.gapXY = value;
|
|
return this;
|
|
};
|
|
TiledSpriteRenderer.prototype.render = function (camera) {
|
|
_super.prototype.render.call(this, camera);
|
|
var bitmap = this.displayObject;
|
|
bitmap.width = this.width;
|
|
bitmap.height = this.height;
|
|
bitmap.scrollRect = this._sourceRect;
|
|
};
|
|
return TiledSpriteRenderer;
|
|
}(es.SpriteRenderer));
|
|
es.TiledSpriteRenderer = TiledSpriteRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ScrollingSpriteRenderer = (function (_super) {
|
|
__extends(ScrollingSpriteRenderer, _super);
|
|
function ScrollingSpriteRenderer(sprite) {
|
|
var _this = _super.call(this, sprite) || this;
|
|
_this.scrollSpeedX = 15;
|
|
_this.scroolSpeedY = 0;
|
|
_this._scrollX = 0;
|
|
_this._scrollY = 0;
|
|
_this._scrollWidth = 0;
|
|
_this._scrollHeight = 0;
|
|
_this._scrollWidth = _this.width;
|
|
_this._scrollHeight = _this.height;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(ScrollingSpriteRenderer.prototype, "textureScale", {
|
|
get: function () {
|
|
return this._textureScale;
|
|
},
|
|
set: function (value) {
|
|
this._textureScale = value;
|
|
this._inverseTexScale = new es.Vector2(1 / this._textureScale.x, 1 / this._textureScale.y);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(ScrollingSpriteRenderer.prototype, "scrollWidth", {
|
|
get: function () {
|
|
return this._scrollWidth;
|
|
},
|
|
set: function (value) {
|
|
this._scrollWidth = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(ScrollingSpriteRenderer.prototype, "scrollHeight", {
|
|
get: function () {
|
|
return this._scrollHeight;
|
|
},
|
|
set: function (value) {
|
|
this._scrollHeight = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
ScrollingSpriteRenderer.prototype.update = function () {
|
|
if (!this.sprite)
|
|
return;
|
|
this._scrollX += this.scrollSpeedX * es.Time.deltaTime;
|
|
this._scrollY += this.scroolSpeedY * es.Time.deltaTime;
|
|
this._sourceRect.x = this._scrollX;
|
|
this._sourceRect.y = this._scrollY;
|
|
this._sourceRect.width = this._scrollWidth + Math.abs(this._scrollX);
|
|
this._sourceRect.height = this._scrollHeight + Math.abs(this._scrollY);
|
|
};
|
|
return ScrollingSpriteRenderer;
|
|
}(es.TiledSpriteRenderer));
|
|
es.ScrollingSpriteRenderer = ScrollingSpriteRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SpriteSheet = egret.SpriteSheet;
|
|
var Sprite = (function () {
|
|
function Sprite(texture, sourceRect, origin) {
|
|
if (sourceRect === void 0) { sourceRect = new es.Rectangle(0, 0, texture.textureWidth, texture.textureHeight); }
|
|
if (origin === void 0) { origin = sourceRect.getHalfSize(); }
|
|
this.uvs = new es.Rectangle();
|
|
this.texture2D = texture;
|
|
this.sourceRect = sourceRect;
|
|
this.center = new es.Vector2(sourceRect.width * 0.5, sourceRect.height * 0.5);
|
|
this.origin = origin;
|
|
var inverseTexW = 1 / texture.textureWidth;
|
|
var inverseTexH = 1 / texture.textureHeight;
|
|
this.uvs.x = sourceRect.x * inverseTexW;
|
|
this.uvs.y = sourceRect.y * inverseTexH;
|
|
this.uvs.width = sourceRect.width * inverseTexW;
|
|
this.uvs.height = sourceRect.height * inverseTexH;
|
|
}
|
|
Sprite.spritesFromAtlas = function (texture, cellWidth, cellHeight, cellOffset, maxCellsToInclude) {
|
|
if (cellOffset === void 0) { cellOffset = 0; }
|
|
if (maxCellsToInclude === void 0) { maxCellsToInclude = Number.MAX_VALUE; }
|
|
var sprites = [];
|
|
var cols = texture.textureWidth / cellWidth;
|
|
var rows = texture.textureHeight / cellHeight;
|
|
var i = 0;
|
|
var spriteSheet = new SpriteSheet(texture);
|
|
for (var y = 0; y < rows; y++) {
|
|
for (var x = 0; x < cols; x++) {
|
|
if (i++ < cellOffset)
|
|
continue;
|
|
var texture_1 = spriteSheet.getTexture(y + "_" + x);
|
|
if (!texture_1)
|
|
texture_1 = spriteSheet.createTexture(y + "_" + x, x * cellWidth, y * cellHeight, cellWidth, cellHeight);
|
|
sprites.push(new Sprite(texture_1));
|
|
if (sprites.length == maxCellsToInclude)
|
|
return sprites;
|
|
}
|
|
}
|
|
return sprites;
|
|
};
|
|
return Sprite;
|
|
}());
|
|
es.Sprite = Sprite;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SpriteAnimation = (function () {
|
|
function SpriteAnimation(sprites, frameRate) {
|
|
this.sprites = sprites;
|
|
this.frameRate = frameRate;
|
|
}
|
|
return SpriteAnimation;
|
|
}());
|
|
es.SpriteAnimation = SpriteAnimation;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var LoopMode;
|
|
(function (LoopMode) {
|
|
LoopMode[LoopMode["loop"] = 0] = "loop";
|
|
LoopMode[LoopMode["once"] = 1] = "once";
|
|
LoopMode[LoopMode["clampForever"] = 2] = "clampForever";
|
|
LoopMode[LoopMode["pingPong"] = 3] = "pingPong";
|
|
LoopMode[LoopMode["pingPongOnce"] = 4] = "pingPongOnce";
|
|
})(LoopMode = es.LoopMode || (es.LoopMode = {}));
|
|
var State;
|
|
(function (State) {
|
|
State[State["none"] = 0] = "none";
|
|
State[State["running"] = 1] = "running";
|
|
State[State["paused"] = 2] = "paused";
|
|
State[State["completed"] = 3] = "completed";
|
|
})(State = es.State || (es.State = {}));
|
|
var SpriteAnimator = (function (_super) {
|
|
__extends(SpriteAnimator, _super);
|
|
function SpriteAnimator(sprite) {
|
|
var _this = _super.call(this, sprite) || this;
|
|
_this.speed = 1;
|
|
_this.animationState = State.none;
|
|
_this._elapsedTime = 0;
|
|
_this._animations = new Map();
|
|
return _this;
|
|
}
|
|
Object.defineProperty(SpriteAnimator.prototype, "isRunning", {
|
|
get: function () {
|
|
return this.animationState == State.running;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(SpriteAnimator.prototype, "animations", {
|
|
get: function () {
|
|
return this._animations;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
SpriteAnimator.prototype.update = function () {
|
|
if (this.animationState != State.running || !this.currentAnimation)
|
|
return;
|
|
var animation = this.currentAnimation;
|
|
var secondsPerFrame = 1 / (animation.frameRate * this.speed);
|
|
var iterationDuration = secondsPerFrame * animation.sprites.length;
|
|
this._elapsedTime += es.Time.deltaTime;
|
|
var time = Math.abs(this._elapsedTime);
|
|
if (this._loopMode == LoopMode.once && time > iterationDuration ||
|
|
this._loopMode == LoopMode.pingPongOnce && time > iterationDuration * 2) {
|
|
this.animationState = State.completed;
|
|
this._elapsedTime = 0;
|
|
this.currentFrame = 0;
|
|
this.displayObject.texture = animation.sprites[this.currentFrame].texture2D;
|
|
return;
|
|
}
|
|
var i = Math.floor(time / secondsPerFrame);
|
|
var n = animation.sprites.length;
|
|
if (n > 2 && (this._loopMode == LoopMode.pingPong || this._loopMode == LoopMode.pingPongOnce)) {
|
|
var maxIndex = n - 1;
|
|
this.currentFrame = maxIndex - Math.abs(maxIndex - i % (maxIndex * 2));
|
|
}
|
|
else {
|
|
this.currentFrame = i % n;
|
|
}
|
|
this.displayObject.texture = animation.sprites[this.currentFrame].texture2D;
|
|
};
|
|
SpriteAnimator.prototype.addAnimation = function (name, animation) {
|
|
if (!this.sprite && animation.sprites.length > 0)
|
|
this.setSprite(animation.sprites[0]);
|
|
this._animations[name] = animation;
|
|
return this;
|
|
};
|
|
SpriteAnimator.prototype.play = function (name, loopMode) {
|
|
if (loopMode === void 0) { loopMode = null; }
|
|
this.currentAnimation = this._animations[name];
|
|
this.currentAnimationName = name;
|
|
this.currentFrame = 0;
|
|
this.animationState = State.running;
|
|
this.displayObject.texture = this.currentAnimation.sprites[0].texture2D;
|
|
this._elapsedTime = 0;
|
|
this._loopMode = loopMode ? loopMode : LoopMode.loop;
|
|
};
|
|
SpriteAnimator.prototype.isAnimationActive = function (name) {
|
|
return this.currentAnimation && this.currentAnimationName == name;
|
|
};
|
|
SpriteAnimator.prototype.pause = function () {
|
|
this.animationState = State.paused;
|
|
};
|
|
SpriteAnimator.prototype.unPause = function () {
|
|
this.animationState = State.running;
|
|
};
|
|
SpriteAnimator.prototype.stop = function () {
|
|
this.currentAnimation = null;
|
|
this.currentAnimationName = null;
|
|
this.currentFrame = 0;
|
|
this.animationState = State.none;
|
|
};
|
|
return SpriteAnimator;
|
|
}(es.SpriteRenderer));
|
|
es.SpriteAnimator = SpriteAnimator;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var CollisionState = (function () {
|
|
function CollisionState() {
|
|
}
|
|
Object.defineProperty(CollisionState.prototype, "hasCollision", {
|
|
get: function () {
|
|
return this.below || this.right || this.left || this.above;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
CollisionState.prototype.reset = function () {
|
|
this.becameGroundedThisFrame = this.isGroundedOnOnewayPlatform = this.right = this.left = this.above = this.below = false;
|
|
this.slopAngle = 0;
|
|
};
|
|
CollisionState.prototype.toString = function () {
|
|
return "[CollisionState] r: " + this.right + ", l: " + this.left + ", a: " + this.above + ", b: " + this.below + ", angle: " + this.slopAngle + ", wasGroundedLastFrame: " + this.wasGroundedLastFrame + ", becameGroundedThisFrame: " + this.becameGroundedThisFrame;
|
|
};
|
|
return CollisionState;
|
|
}());
|
|
es.CollisionState = CollisionState;
|
|
var TiledMapMover = (function (_super) {
|
|
__extends(TiledMapMover, _super);
|
|
function TiledMapMover() {
|
|
var _this = _super.call(this) || this;
|
|
_this.colliderHorizontalInset = 2;
|
|
_this.colliderVerticalInset = 6;
|
|
return _this;
|
|
}
|
|
TiledMapMover.prototype.testCollisions = function (motion, boxColliderBounds, collisionState) {
|
|
this._boxColliderBounds = boxColliderBounds;
|
|
collisionState.wasGroundedLastFrame = collisionState.below;
|
|
collisionState.reset();
|
|
var motionX = motion.x;
|
|
var motionY = motion.y;
|
|
if (motionX != 0) {
|
|
var direction = motionX > 0 ? es.Edge.right : es.Edge.left;
|
|
var sweptBounds = this.collisionRectForSide(direction, motionX);
|
|
var collisionResponse = 0;
|
|
if (this.testMapCollision(sweptBounds, direction, collisionState, collisionResponse)) {
|
|
motion.x = collisionResponse - es.RectangleExt.getSide(boxColliderBounds, direction);
|
|
collisionState.left = direction == es.Edge.left;
|
|
collisionState.right = direction == es.Edge.right;
|
|
collisionState._movementRemainderX.reset();
|
|
}
|
|
else {
|
|
collisionState.left = false;
|
|
collisionState.right = false;
|
|
}
|
|
}
|
|
};
|
|
TiledMapMover.prototype.testMapCollision = function (collisionRect, direction, collisionState, collisionResponse) {
|
|
var side = es.EdgeExt.oppositeEdge(direction);
|
|
var perpindicularPosition = es.EdgeExt.isVertical(side) ? collisionRect.center.x : collisionRect.center.y;
|
|
var leadingPosition = es.RectangleExt.getSide(collisionRect, direction);
|
|
var shouldTestSlopes = es.EdgeExt.isVertical(side);
|
|
};
|
|
TiledMapMover.prototype.collisionRectForSide = function (side, motion) {
|
|
var bounds;
|
|
if (es.EdgeExt.isHorizontal(side)) {
|
|
bounds = es.RectangleExt.getRectEdgePortion(this._boxColliderBounds, side);
|
|
}
|
|
else {
|
|
bounds = es.RectangleExt.getHalfRect(this._boxColliderBounds, side);
|
|
}
|
|
if (es.EdgeExt.isVertical(side)) {
|
|
es.RectangleExt.contract(bounds, this.colliderHorizontalInset, 0);
|
|
}
|
|
else {
|
|
es.RectangleExt.contract(bounds, 0, this.colliderVerticalInset);
|
|
}
|
|
es.RectangleExt.expandSide(bounds, side, motion);
|
|
return bounds;
|
|
};
|
|
return TiledMapMover;
|
|
}(es.Component));
|
|
es.TiledMapMover = TiledMapMover;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TiledMapRenderer = (function (_super) {
|
|
__extends(TiledMapRenderer, _super);
|
|
function TiledMapRenderer(tiledMap, collisionLayerName, shouldCreateColliders) {
|
|
if (collisionLayerName === void 0) { collisionLayerName = null; }
|
|
if (shouldCreateColliders === void 0) { shouldCreateColliders = true; }
|
|
var _this = _super.call(this) || this;
|
|
_this.physicsLayer = 1 << 0;
|
|
_this.toContainer = false;
|
|
_this.tiledMap = tiledMap;
|
|
_this._shouldCreateColliders = shouldCreateColliders;
|
|
_this.displayObject = new egret.DisplayObjectContainer();
|
|
if (collisionLayerName) {
|
|
_this.collisionLayer = tiledMap.tileLayers[collisionLayerName];
|
|
}
|
|
return _this;
|
|
}
|
|
Object.defineProperty(TiledMapRenderer.prototype, "width", {
|
|
get: function () {
|
|
return this.tiledMap.width * this.tiledMap.tileWidth;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TiledMapRenderer.prototype, "height", {
|
|
get: function () {
|
|
return this.tiledMap.height * this.tiledMap.tileHeight;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TiledMapRenderer.prototype.setLayerToRender = function (layerName) {
|
|
this.layerIndicesToRender = [];
|
|
this.layerIndicesToRender[0] = this.getLayerIndex(layerName);
|
|
};
|
|
TiledMapRenderer.prototype.setLayersToRender = function () {
|
|
var layerNames = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
layerNames[_i] = arguments[_i];
|
|
}
|
|
this.layerIndicesToRender = [];
|
|
for (var i = 0; i < layerNames.length; i++)
|
|
this.layerIndicesToRender[i] = this.getLayerIndex(layerNames[i]);
|
|
};
|
|
TiledMapRenderer.prototype.getLayerIndex = function (layerName) {
|
|
var index = 0;
|
|
var layerType = this.tiledMap.getLayer(layerName);
|
|
for (var layer in this.tiledMap.layers) {
|
|
if (this.tiledMap.layers.hasOwnProperty(layer) &&
|
|
this.tiledMap.layers[layer] == layerType) {
|
|
return index;
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
TiledMapRenderer.prototype.getRowAtWorldPosition = function (yPos) {
|
|
yPos -= this.entity.transform.position.y + this._localOffset.y;
|
|
return this.tiledMap.worldToTilePositionY(yPos);
|
|
};
|
|
TiledMapRenderer.prototype.getColumnAtWorldPosition = function (xPos) {
|
|
xPos -= this.entity.transform.position.x + this._localOffset.x;
|
|
return this.tiledMap.worldToTilePositionX(xPos);
|
|
};
|
|
TiledMapRenderer.prototype.onEntityTransformChanged = function (comp) {
|
|
if (this._shouldCreateColliders && comp == transform.Component.position) {
|
|
this.removeColliders();
|
|
this.addColliders();
|
|
}
|
|
};
|
|
TiledMapRenderer.prototype.onAddedToEntity = function () {
|
|
this.addColliders();
|
|
};
|
|
TiledMapRenderer.prototype.onRemovedFromEntity = function () {
|
|
this.removeColliders();
|
|
};
|
|
TiledMapRenderer.prototype.update = function () {
|
|
this.tiledMap.update();
|
|
};
|
|
TiledMapRenderer.prototype.render = function (camera) {
|
|
this.sync(camera);
|
|
if (!this.layerIndicesToRender) {
|
|
es.TiledRendering.renderMap(this.tiledMap, !this.toContainer ? this.displayObject : null, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer);
|
|
}
|
|
else {
|
|
for (var i = 0; i < this.tiledMap.layers.length; i++) {
|
|
if (this.tiledMap.layers[i].visible && this.layerIndicesToRender.contains(i))
|
|
es.TiledRendering.renderLayerRenderCamera(this.tiledMap.layers[i], !this.toContainer ? this.displayObject : null, es.Vector2.add(this.entity.transform.position, this._localOffset), this.transform.scale, this.renderLayer, camera.bounds);
|
|
}
|
|
}
|
|
if (!this.toContainer) {
|
|
this.displayObject.cacheAsBitmap = true;
|
|
this.toContainer = true;
|
|
}
|
|
};
|
|
TiledMapRenderer.prototype.addColliders = function () {
|
|
if (!this.collisionLayer || !this._shouldCreateColliders)
|
|
return;
|
|
var collisionRects = this.collisionLayer.getCollisionRectangles();
|
|
this._colliders = [];
|
|
for (var i = 0; i < collisionRects.length; i++) {
|
|
var collider = new es.BoxCollider().createBoxRect(collisionRects[i].x + this._localOffset.x, collisionRects[i].y + this._localOffset.y, collisionRects[i].width, collisionRects[i].height);
|
|
collider.physicsLayer = this.physicsLayer;
|
|
collider.entity = this.entity;
|
|
this._colliders[i] = collider;
|
|
es.Physics.addCollider(collider);
|
|
}
|
|
};
|
|
TiledMapRenderer.prototype.removeColliders = function () {
|
|
if (this._colliders == null)
|
|
return;
|
|
for (var _i = 0, _a = this._colliders; _i < _a.length; _i++) {
|
|
var collider = _a[_i];
|
|
es.Physics.removeCollider(collider);
|
|
}
|
|
this._colliders = null;
|
|
};
|
|
return TiledMapRenderer;
|
|
}(es.RenderableComponent));
|
|
es.TiledMapRenderer = TiledMapRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Mover = (function (_super) {
|
|
__extends(Mover, _super);
|
|
function Mover() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Mover.prototype.onAddedToEntity = function () {
|
|
this._triggerHelper = new es.ColliderTriggerHelper(this.entity);
|
|
};
|
|
Mover.prototype.calculateMovement = function (motion, collisionResult) {
|
|
if (!this.entity.getComponent(es.Collider) || !this._triggerHelper) {
|
|
return false;
|
|
}
|
|
var colliders = this.entity.getComponents(es.Collider);
|
|
for (var i = 0; i < colliders.length; i++) {
|
|
var collider = colliders[i];
|
|
if (collider.isTrigger)
|
|
continue;
|
|
var bounds = collider.bounds;
|
|
bounds.x += motion.x;
|
|
bounds.y += motion.y;
|
|
var neighbors = es.Physics.boxcastBroadphaseExcludingSelf(collider, bounds, collider.collidesWithLayers);
|
|
for (var j = 0; j < neighbors.length; j++) {
|
|
var neighbor = neighbors[j];
|
|
if (neighbor.isTrigger)
|
|
continue;
|
|
var _internalcollisionResult = new es.CollisionResult();
|
|
if (collider.collidesWith(neighbor, motion, _internalcollisionResult)) {
|
|
motion = motion.subtract(_internalcollisionResult.minimumTranslationVector);
|
|
if (_internalcollisionResult.collider != null) {
|
|
collisionResult = _internalcollisionResult;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
es.ListPool.free(colliders);
|
|
return collisionResult.collider != null;
|
|
};
|
|
Mover.prototype.applyMovement = function (motion) {
|
|
this.entity.position = es.Vector2.add(this.entity.position, motion);
|
|
if (this._triggerHelper)
|
|
this._triggerHelper.update();
|
|
};
|
|
Mover.prototype.move = function (motion, collisionResult) {
|
|
this.calculateMovement(motion, collisionResult);
|
|
this.applyMovement(motion);
|
|
return collisionResult.collider != null;
|
|
};
|
|
return Mover;
|
|
}(es.Component));
|
|
es.Mover = Mover;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ProjectileMover = (function (_super) {
|
|
__extends(ProjectileMover, _super);
|
|
function ProjectileMover() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this._tempTriggerList = [];
|
|
return _this;
|
|
}
|
|
ProjectileMover.prototype.onAddedToEntity = function () {
|
|
this._collider = this.entity.getComponent(es.Collider);
|
|
if (!this._collider)
|
|
console.warn("ProjectileMover has no Collider. ProjectilMover requires a Collider!");
|
|
};
|
|
ProjectileMover.prototype.move = function (motion) {
|
|
if (!this._collider)
|
|
return false;
|
|
var didCollide = false;
|
|
this.entity.position = es.Vector2.add(this.entity.position, motion);
|
|
var neighbors = es.Physics.boxcastBroadphase(this._collider.bounds, this._collider.collidesWithLayers);
|
|
for (var i = 0; i < neighbors.length; i++) {
|
|
var neighbor = neighbors[i];
|
|
if (this._collider.overlaps(neighbor) && neighbor.enabled) {
|
|
didCollide = true;
|
|
this.notifyTriggerListeners(this._collider, neighbor);
|
|
}
|
|
}
|
|
return didCollide;
|
|
};
|
|
ProjectileMover.prototype.notifyTriggerListeners = function (self, other) {
|
|
other.entity.getComponents("ITriggerListener", this._tempTriggerList);
|
|
for (var i = 0; i < this._tempTriggerList.length; i++) {
|
|
this._tempTriggerList[i].onTriggerEnter(self, other);
|
|
}
|
|
this._tempTriggerList.length = 0;
|
|
this.entity.getComponents("ITriggerListener", this._tempTriggerList);
|
|
for (var i = 0; i < this._tempTriggerList.length; i++) {
|
|
this._tempTriggerList[i].onTriggerEnter(other, self);
|
|
}
|
|
this._tempTriggerList.length = 0;
|
|
};
|
|
return ProjectileMover;
|
|
}(es.Component));
|
|
es.ProjectileMover = ProjectileMover;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Collider = (function (_super) {
|
|
__extends(Collider, _super);
|
|
function Collider() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.physicsLayer = 1 << 0;
|
|
_this.collidesWithLayers = es.Physics.allLayers;
|
|
_this.shouldColliderScaleAndRotateWithTransform = true;
|
|
_this.registeredPhysicsBounds = new es.Rectangle();
|
|
_this._isPositionDirty = true;
|
|
_this._isRotationDirty = true;
|
|
_this._localOffset = es.Vector2.zero;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Collider.prototype, "absolutePosition", {
|
|
get: function () {
|
|
return es.Vector2.add(this.entity.transform.position, this._localOffset);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Collider.prototype, "rotation", {
|
|
get: function () {
|
|
if (this.shouldColliderScaleAndRotateWithTransform && this.entity)
|
|
return this.entity.transform.rotation;
|
|
return 0;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Collider.prototype, "bounds", {
|
|
get: function () {
|
|
if (this._isPositionDirty || this._isRotationDirty) {
|
|
this.shape.recalculateBounds(this);
|
|
this._isPositionDirty = this._isRotationDirty = false;
|
|
}
|
|
return this.shape.bounds;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Collider.prototype, "localOffset", {
|
|
get: function () {
|
|
return this._localOffset;
|
|
},
|
|
set: function (value) {
|
|
this.setLocalOffset(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Collider.prototype.setLocalOffset = function (offset) {
|
|
if (this._localOffset != offset) {
|
|
this.unregisterColliderWithPhysicsSystem();
|
|
this._localOffset = offset;
|
|
this._localOffsetLength = this._localOffset.length();
|
|
this._isPositionDirty = true;
|
|
this.registerColliderWithPhysicsSystem();
|
|
}
|
|
return this;
|
|
};
|
|
Collider.prototype.setShouldColliderScaleAndRotateWithTransform = function (shouldColliderScaleAndRotationWithTransform) {
|
|
this.shouldColliderScaleAndRotateWithTransform = shouldColliderScaleAndRotationWithTransform;
|
|
this._isPositionDirty = this._isRotationDirty = true;
|
|
return this;
|
|
};
|
|
Collider.prototype.onAddedToEntity = function () {
|
|
if (this._colliderRequiresAutoSizing) {
|
|
if (!(this instanceof es.BoxCollider || this instanceof es.CircleCollider)) {
|
|
console.error("Only box and circle colliders can be created automatically");
|
|
return;
|
|
}
|
|
var renderable = this.entity.getComponent(es.RenderableComponent);
|
|
if (renderable) {
|
|
var renderableBounds = renderable.bounds;
|
|
var width = renderableBounds.width / this.entity.scale.x;
|
|
var height = renderableBounds.height / this.entity.scale.y;
|
|
if (this instanceof es.CircleCollider) {
|
|
this.radius = Math.max(width, height) * 0.5;
|
|
}
|
|
else {
|
|
this.width = width;
|
|
this.height = height;
|
|
}
|
|
this.localOffset = es.Vector2.subtract(renderableBounds.center, this.entity.transform.position);
|
|
}
|
|
else {
|
|
console.warn("Collider has no shape and no RenderableComponent. Can't figure out how to size it.");
|
|
}
|
|
}
|
|
this._isParentEntityAddedToScene = true;
|
|
this.registerColliderWithPhysicsSystem();
|
|
};
|
|
Collider.prototype.onRemovedFromEntity = function () {
|
|
this.unregisterColliderWithPhysicsSystem();
|
|
this._isParentEntityAddedToScene = false;
|
|
};
|
|
Collider.prototype.onEntityTransformChanged = function (comp) {
|
|
switch (comp) {
|
|
case transform.Component.position:
|
|
this._isPositionDirty = true;
|
|
break;
|
|
case transform.Component.scale:
|
|
this._isPositionDirty = true;
|
|
break;
|
|
case transform.Component.rotation:
|
|
this._isRotationDirty = true;
|
|
break;
|
|
}
|
|
if (this._isColliderRegistered)
|
|
es.Physics.updateCollider(this);
|
|
};
|
|
Collider.prototype.onEnabled = function () {
|
|
this.registerColliderWithPhysicsSystem();
|
|
this._isPositionDirty = this._isRotationDirty = true;
|
|
};
|
|
Collider.prototype.onDisabled = function () {
|
|
this.unregisterColliderWithPhysicsSystem();
|
|
};
|
|
Collider.prototype.registerColliderWithPhysicsSystem = function () {
|
|
if (this._isParentEntityAddedToScene && !this._isColliderRegistered) {
|
|
es.Physics.addCollider(this);
|
|
this._isColliderRegistered = true;
|
|
}
|
|
};
|
|
Collider.prototype.unregisterColliderWithPhysicsSystem = function () {
|
|
if (this._isParentEntityAddedToScene && this._isColliderRegistered) {
|
|
es.Physics.removeCollider(this);
|
|
}
|
|
this._isColliderRegistered = false;
|
|
};
|
|
Collider.prototype.overlaps = function (other) {
|
|
return this.shape.overlaps(other.shape);
|
|
};
|
|
Collider.prototype.collidesWith = function (collider, motion, result) {
|
|
var oldPosition = this.entity.position;
|
|
this.entity.position = this.entity.position.add(motion);
|
|
var didCollide = this.shape.collidesWithShape(collider.shape, result);
|
|
if (didCollide)
|
|
result.collider = collider;
|
|
this.entity.position = oldPosition;
|
|
return didCollide;
|
|
};
|
|
Collider.prototype.clone = function () {
|
|
var collider = ObjectUtils.clone(this);
|
|
collider.entity = null;
|
|
if (this.shape)
|
|
collider.shape = this.shape.clone();
|
|
return collider;
|
|
};
|
|
return Collider;
|
|
}(es.Component));
|
|
es.Collider = Collider;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var BoxCollider = (function (_super) {
|
|
__extends(BoxCollider, _super);
|
|
function BoxCollider() {
|
|
var _this = _super.call(this) || this;
|
|
_this.shape = new es.Box(1, 1);
|
|
_this._colliderRequiresAutoSizing = true;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(BoxCollider.prototype, "width", {
|
|
get: function () {
|
|
return this.shape.width;
|
|
},
|
|
set: function (value) {
|
|
this.setWidth(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BoxCollider.prototype, "height", {
|
|
get: function () {
|
|
return this.shape.height;
|
|
},
|
|
set: function (value) {
|
|
this.setHeight(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
BoxCollider.prototype.createBoxRect = function (x, y, width, height) {
|
|
this._localOffset = new es.Vector2(x + width / 2, y + width / 2);
|
|
this.shape = new es.Box(width, height);
|
|
this._colliderRequiresAutoSizing = false;
|
|
return this;
|
|
};
|
|
BoxCollider.prototype.setSize = function (width, height) {
|
|
this._colliderRequiresAutoSizing = false;
|
|
var box = this.shape;
|
|
if (width != box.width || height != box.height) {
|
|
box.updateBox(width, height);
|
|
if (this.entity && this._isParentEntityAddedToScene)
|
|
es.Physics.updateCollider(this);
|
|
}
|
|
return this;
|
|
};
|
|
BoxCollider.prototype.setWidth = function (width) {
|
|
this._colliderRequiresAutoSizing = false;
|
|
var box = this.shape;
|
|
if (width != box.width) {
|
|
box.updateBox(width, box.height);
|
|
if (this.entity && this._isParentEntityAddedToScene)
|
|
es.Physics.updateCollider(this);
|
|
}
|
|
return this;
|
|
};
|
|
BoxCollider.prototype.setHeight = function (height) {
|
|
this._colliderRequiresAutoSizing = false;
|
|
var box = this.shape;
|
|
if (height != box.height) {
|
|
box.updateBox(box.width, height);
|
|
if (this.entity && this._isParentEntityAddedToScene)
|
|
es.Physics.updateCollider(this);
|
|
}
|
|
};
|
|
BoxCollider.prototype.toString = function () {
|
|
return "[BoxCollider: bounds: " + this.bounds + "]";
|
|
};
|
|
return BoxCollider;
|
|
}(es.Collider));
|
|
es.BoxCollider = BoxCollider;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var CircleCollider = (function (_super) {
|
|
__extends(CircleCollider, _super);
|
|
function CircleCollider(radius) {
|
|
var _this = _super.call(this) || this;
|
|
if (radius)
|
|
_this._colliderRequiresAutoSizing = true;
|
|
_this.shape = new es.Circle(radius ? radius : 1);
|
|
return _this;
|
|
}
|
|
Object.defineProperty(CircleCollider.prototype, "radius", {
|
|
get: function () {
|
|
return this.shape.radius;
|
|
},
|
|
set: function (value) {
|
|
this.setRadius(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
CircleCollider.prototype.setRadius = function (radius) {
|
|
this._colliderRequiresAutoSizing = false;
|
|
var circle = this.shape;
|
|
if (radius != circle.radius) {
|
|
circle.radius = radius;
|
|
circle._originalRadius = radius;
|
|
if (this.entity && this._isParentEntityAddedToScene)
|
|
es.Physics.updateCollider(this);
|
|
}
|
|
return this;
|
|
};
|
|
CircleCollider.prototype.toString = function () {
|
|
return "[CircleCollider: bounds: " + this.bounds + ", radius: " + this.shape.radius + "]";
|
|
};
|
|
return CircleCollider;
|
|
}(es.Collider));
|
|
es.CircleCollider = CircleCollider;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PolygonCollider = (function (_super) {
|
|
__extends(PolygonCollider, _super);
|
|
function PolygonCollider(points) {
|
|
var _this = _super.call(this) || this;
|
|
var isPolygonClosed = points[0] == points[points.length - 1];
|
|
if (isPolygonClosed)
|
|
points.splice(points.length - 1, 1);
|
|
var center = es.Polygon.findPolygonCenter(points);
|
|
_this.setLocalOffset(center);
|
|
es.Polygon.recenterPolygonVerts(points);
|
|
_this.shape = new es.Polygon(points);
|
|
return _this;
|
|
}
|
|
return PolygonCollider;
|
|
}(es.Collider));
|
|
es.PolygonCollider = PolygonCollider;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var EntitySystem = (function () {
|
|
function EntitySystem(matcher) {
|
|
this._entities = [];
|
|
this._matcher = matcher ? matcher : es.Matcher.empty();
|
|
}
|
|
Object.defineProperty(EntitySystem.prototype, "scene", {
|
|
get: function () {
|
|
return this._scene;
|
|
},
|
|
set: function (value) {
|
|
this._scene = value;
|
|
this._entities = [];
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(EntitySystem.prototype, "matcher", {
|
|
get: function () {
|
|
return this._matcher;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
EntitySystem.prototype.initialize = function () {
|
|
};
|
|
EntitySystem.prototype.onChanged = function (entity) {
|
|
var contains = this._entities.contains(entity);
|
|
var interest = this._matcher.IsIntersted(entity);
|
|
if (interest && !contains)
|
|
this.add(entity);
|
|
else if (!interest && contains)
|
|
this.remove(entity);
|
|
};
|
|
EntitySystem.prototype.add = function (entity) {
|
|
this._entities.push(entity);
|
|
this.onAdded(entity);
|
|
};
|
|
EntitySystem.prototype.onAdded = function (entity) {
|
|
};
|
|
EntitySystem.prototype.remove = function (entity) {
|
|
this._entities.remove(entity);
|
|
this.onRemoved(entity);
|
|
};
|
|
EntitySystem.prototype.onRemoved = function (entity) {
|
|
};
|
|
EntitySystem.prototype.update = function () {
|
|
this.begin();
|
|
this.process(this._entities);
|
|
};
|
|
EntitySystem.prototype.lateUpdate = function () {
|
|
this.lateProcess(this._entities);
|
|
this.end();
|
|
};
|
|
EntitySystem.prototype.begin = function () {
|
|
};
|
|
EntitySystem.prototype.process = function (entities) {
|
|
};
|
|
EntitySystem.prototype.lateProcess = function (entities) {
|
|
};
|
|
EntitySystem.prototype.end = function () {
|
|
};
|
|
return EntitySystem;
|
|
}());
|
|
es.EntitySystem = EntitySystem;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var EntityProcessingSystem = (function (_super) {
|
|
__extends(EntityProcessingSystem, _super);
|
|
function EntityProcessingSystem(matcher) {
|
|
return _super.call(this, matcher) || this;
|
|
}
|
|
EntityProcessingSystem.prototype.lateProcessEntity = function (entity) {
|
|
};
|
|
EntityProcessingSystem.prototype.process = function (entities) {
|
|
var _this = this;
|
|
entities.forEach(function (entity) { return _this.processEntity(entity); });
|
|
};
|
|
EntityProcessingSystem.prototype.lateProcess = function (entities) {
|
|
var _this = this;
|
|
entities.forEach(function (entity) { return _this.lateProcessEntity(entity); });
|
|
};
|
|
return EntityProcessingSystem;
|
|
}(es.EntitySystem));
|
|
es.EntityProcessingSystem = EntityProcessingSystem;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PassiveSystem = (function (_super) {
|
|
__extends(PassiveSystem, _super);
|
|
function PassiveSystem() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
PassiveSystem.prototype.onChanged = function (entity) {
|
|
};
|
|
PassiveSystem.prototype.process = function (entities) {
|
|
this.begin();
|
|
this.end();
|
|
};
|
|
return PassiveSystem;
|
|
}(es.EntitySystem));
|
|
es.PassiveSystem = PassiveSystem;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ProcessingSystem = (function (_super) {
|
|
__extends(ProcessingSystem, _super);
|
|
function ProcessingSystem() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
ProcessingSystem.prototype.onChanged = function (entity) {
|
|
};
|
|
ProcessingSystem.prototype.process = function (entities) {
|
|
this.begin();
|
|
this.processSystem();
|
|
this.end();
|
|
};
|
|
return ProcessingSystem;
|
|
}(es.EntitySystem));
|
|
es.ProcessingSystem = ProcessingSystem;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var BitSet = (function () {
|
|
function BitSet(nbits) {
|
|
if (nbits === void 0) { nbits = 64; }
|
|
var length = nbits >> 6;
|
|
if ((nbits & BitSet.LONG_MASK) != 0)
|
|
length++;
|
|
this._bits = new Array(length);
|
|
}
|
|
BitSet.prototype.and = function (bs) {
|
|
var max = Math.min(this._bits.length, bs._bits.length);
|
|
var i;
|
|
for (var i_1 = 0; i_1 < max; ++i_1)
|
|
this._bits[i_1] &= bs._bits[i_1];
|
|
while (i < this._bits.length)
|
|
this._bits[i++] = 0;
|
|
};
|
|
BitSet.prototype.andNot = function (bs) {
|
|
var i = Math.min(this._bits.length, bs._bits.length);
|
|
while (--i >= 0)
|
|
this._bits[i] &= ~bs._bits[i];
|
|
};
|
|
BitSet.prototype.cardinality = function () {
|
|
var card = 0;
|
|
for (var i = this._bits.length - 1; i >= 0; i--) {
|
|
var a = this._bits[i];
|
|
if (a == 0)
|
|
continue;
|
|
if (a == -1) {
|
|
card += 64;
|
|
continue;
|
|
}
|
|
a = ((a >> 1) & 0x5555555555555555) + (a & 0x5555555555555555);
|
|
a = ((a >> 2) & 0x3333333333333333) + (a & 0x3333333333333333);
|
|
var b = ((a >> 32) + a);
|
|
b = ((b >> 4) & 0x0f0f0f0f) + (b & 0x0f0f0f0f);
|
|
b = ((b >> 8) & 0x00ff00ff) + (b & 0x00ff00ff);
|
|
card += ((b >> 16) & 0x0000ffff) + (b & 0x0000ffff);
|
|
}
|
|
return card;
|
|
};
|
|
BitSet.prototype.clear = function (pos) {
|
|
if (pos != undefined) {
|
|
var offset = pos >> 6;
|
|
this.ensure(offset);
|
|
this._bits[offset] &= ~(1 << pos);
|
|
}
|
|
else {
|
|
for (var i = 0; i < this._bits.length; i++)
|
|
this._bits[i] = 0;
|
|
}
|
|
};
|
|
BitSet.prototype.get = function (pos) {
|
|
var offset = pos >> 6;
|
|
if (offset >= this._bits.length)
|
|
return false;
|
|
return (this._bits[offset] & (1 << pos)) != 0;
|
|
};
|
|
BitSet.prototype.intersects = function (set) {
|
|
var i = Math.min(this._bits.length, set._bits.length);
|
|
while (--i >= 0) {
|
|
if ((this._bits[i] & set._bits[i]) != 0)
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
BitSet.prototype.isEmpty = function () {
|
|
for (var i = this._bits.length - 1; i >= 0; i--) {
|
|
if (this._bits[i])
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
BitSet.prototype.nextSetBit = function (from) {
|
|
var offset = from >> 6;
|
|
var mask = 1 << from;
|
|
while (offset < this._bits.length) {
|
|
var h = this._bits[offset];
|
|
do {
|
|
if ((h & mask) != 0)
|
|
return from;
|
|
mask <<= 1;
|
|
from++;
|
|
} while (mask != 0);
|
|
mask = 1;
|
|
offset++;
|
|
}
|
|
return -1;
|
|
};
|
|
BitSet.prototype.set = function (pos, value) {
|
|
if (value === void 0) { value = true; }
|
|
if (value) {
|
|
var offset = pos >> 6;
|
|
this.ensure(offset);
|
|
this._bits[offset] |= 1 << pos;
|
|
}
|
|
else {
|
|
this.clear(pos);
|
|
}
|
|
};
|
|
BitSet.prototype.ensure = function (lastElt) {
|
|
if (lastElt >= this._bits.length) {
|
|
var nd = new Number[lastElt + 1];
|
|
nd = this._bits.copyWithin(0, 0, this._bits.length);
|
|
this._bits = nd;
|
|
}
|
|
};
|
|
BitSet.LONG_MASK = 0x3f;
|
|
return BitSet;
|
|
}());
|
|
es.BitSet = BitSet;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ComponentList = (function () {
|
|
function ComponentList(entity) {
|
|
this._components = [];
|
|
this._componentsToAdd = [];
|
|
this._componentsToRemove = [];
|
|
this._tempBufferList = [];
|
|
this._entity = entity;
|
|
}
|
|
Object.defineProperty(ComponentList.prototype, "count", {
|
|
get: function () {
|
|
return this._components.length;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(ComponentList.prototype, "buffer", {
|
|
get: function () {
|
|
return this._components;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
ComponentList.prototype.markEntityListUnsorted = function () {
|
|
this._isComponentListUnsorted = true;
|
|
};
|
|
ComponentList.prototype.add = function (component) {
|
|
this._componentsToAdd.push(component);
|
|
};
|
|
ComponentList.prototype.remove = function (component) {
|
|
if (this._componentsToRemove.contains(component))
|
|
console.warn("You are trying to remove a Component (" + component + ") that you already removed");
|
|
if (this._componentsToAdd.contains(component)) {
|
|
this._componentsToAdd.remove(component);
|
|
return;
|
|
}
|
|
this._componentsToRemove.push(component);
|
|
};
|
|
ComponentList.prototype.removeAllComponents = function () {
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
this.handleRemove(this._components[i]);
|
|
}
|
|
this._components.length = 0;
|
|
this._componentsToAdd.length = 0;
|
|
this._componentsToRemove.length = 0;
|
|
};
|
|
ComponentList.prototype.deregisterAllComponents = function () {
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
var component = this._components[i];
|
|
if (component instanceof es.RenderableComponent) {
|
|
this._entity.scene.removeChild(component.displayObject);
|
|
this._entity.scene.renderableComponents.remove(component);
|
|
}
|
|
this._entity.componentBits.set(es.ComponentTypeManager.getIndexFor(component), false);
|
|
this._entity.scene.entityProcessors.onComponentRemoved(this._entity);
|
|
}
|
|
};
|
|
ComponentList.prototype.registerAllComponents = function () {
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
var component = this._components[i];
|
|
if (component instanceof es.RenderableComponent) {
|
|
this._entity.scene.addChild(component.displayObject);
|
|
this._entity.scene.renderableComponents.add(component);
|
|
}
|
|
this._entity.componentBits.set(es.ComponentTypeManager.getIndexFor(component));
|
|
this._entity.scene.entityProcessors.onComponentAdded(this._entity);
|
|
}
|
|
};
|
|
ComponentList.prototype.updateLists = function () {
|
|
if (this._componentsToRemove.length > 0) {
|
|
for (var i = 0; i < this._componentsToRemove.length; i++) {
|
|
this.handleRemove(this._componentsToRemove[i]);
|
|
this._components.remove(this._componentsToRemove[i]);
|
|
}
|
|
this._componentsToRemove.length = 0;
|
|
}
|
|
if (this._componentsToAdd.length > 0) {
|
|
for (var i = 0, count = this._componentsToAdd.length; i < count; i++) {
|
|
var component = this._componentsToAdd[i];
|
|
if (component instanceof es.RenderableComponent) {
|
|
this._entity.scene.addChild(component.displayObject);
|
|
this._entity.scene.renderableComponents.add(component);
|
|
}
|
|
this._entity.componentBits.set(es.ComponentTypeManager.getIndexFor(component));
|
|
this._entity.scene.entityProcessors.onComponentAdded(this._entity);
|
|
this._components.push(component);
|
|
this._tempBufferList.push(component);
|
|
}
|
|
this._componentsToAdd.length = 0;
|
|
this._isComponentListUnsorted = true;
|
|
for (var i = 0; i < this._tempBufferList.length; i++) {
|
|
var component = this._tempBufferList[i];
|
|
component.onAddedToEntity();
|
|
if (component.enabled) {
|
|
component.onEnabled();
|
|
}
|
|
}
|
|
this._tempBufferList.length = 0;
|
|
}
|
|
if (this._isComponentListUnsorted) {
|
|
this._components.sort(ComponentList.compareUpdatableOrder.compare);
|
|
this._isComponentListUnsorted = false;
|
|
}
|
|
};
|
|
ComponentList.prototype.handleRemove = function (component) {
|
|
if (component instanceof es.RenderableComponent) {
|
|
if (component.displayObject.parent)
|
|
component.displayObject.parent.removeChild(component.displayObject);
|
|
this._entity.scene.renderableComponents.remove(component);
|
|
}
|
|
this._entity.componentBits.set(es.ComponentTypeManager.getIndexFor(component), false);
|
|
this._entity.scene.entityProcessors.onComponentRemoved(this._entity);
|
|
component.onRemovedFromEntity();
|
|
component.entity = null;
|
|
};
|
|
ComponentList.prototype.getComponent = function (type, onlyReturnInitializedComponents) {
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
var component = this._components[i];
|
|
if (component instanceof type)
|
|
return component;
|
|
}
|
|
if (!onlyReturnInitializedComponents) {
|
|
for (var i = 0; i < this._componentsToAdd.length; i++) {
|
|
var component = this._componentsToAdd[i];
|
|
if (component instanceof type)
|
|
return component;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
ComponentList.prototype.getComponents = function (typeName, components) {
|
|
if (!components)
|
|
components = [];
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
var component = this._components[i];
|
|
if (typeof (typeName) == "string") {
|
|
if (egret.is(component, typeName)) {
|
|
components.push(component);
|
|
}
|
|
}
|
|
else {
|
|
if (component instanceof typeName) {
|
|
components.push(component);
|
|
}
|
|
}
|
|
}
|
|
for (var i = 0; i < this._componentsToAdd.length; i++) {
|
|
var component = this._componentsToAdd[i];
|
|
if (typeof (typeName) == "string") {
|
|
if (egret.is(component, typeName)) {
|
|
components.push(component);
|
|
}
|
|
}
|
|
else {
|
|
if (component instanceof typeName) {
|
|
components.push(component);
|
|
}
|
|
}
|
|
}
|
|
return components;
|
|
};
|
|
ComponentList.prototype.update = function () {
|
|
this.updateLists();
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
var updatableComponent = this._components[i];
|
|
if (updatableComponent.enabled &&
|
|
(updatableComponent.updateInterval == 1 ||
|
|
es.Time.frameCount % updatableComponent.updateInterval == 0))
|
|
updatableComponent.update();
|
|
}
|
|
};
|
|
ComponentList.prototype.onEntityTransformChanged = function (comp) {
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
if (this._components[i].enabled)
|
|
this._components[i].onEntityTransformChanged(comp);
|
|
}
|
|
for (var i = 0; i < this._componentsToAdd.length; i++) {
|
|
if (this._componentsToAdd[i].enabled)
|
|
this._componentsToAdd[i].onEntityTransformChanged(comp);
|
|
}
|
|
};
|
|
ComponentList.prototype.onEntityEnabled = function () {
|
|
for (var i = 0; i < this._components.length; i++)
|
|
this._components[i].onEnabled();
|
|
};
|
|
ComponentList.prototype.onEntityDisabled = function () {
|
|
for (var i = 0; i < this._components.length; i++)
|
|
this._components[i].onDisabled();
|
|
};
|
|
ComponentList.prototype.debugRender = function () {
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
if (this._components[i].enabled)
|
|
this._components[i].debugRender();
|
|
}
|
|
};
|
|
ComponentList.compareUpdatableOrder = new es.IUpdatableComparer();
|
|
return ComponentList;
|
|
}());
|
|
es.ComponentList = ComponentList;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ComponentTypeManager = (function () {
|
|
function ComponentTypeManager() {
|
|
}
|
|
ComponentTypeManager.add = function (type) {
|
|
if (!this._componentTypesMask.has(type))
|
|
this._componentTypesMask[type] = this._componentTypesMask.size;
|
|
};
|
|
ComponentTypeManager.getIndexFor = function (type) {
|
|
var v = -1;
|
|
if (!this._componentTypesMask.has(type)) {
|
|
this.add(type);
|
|
v = this._componentTypesMask.get(type);
|
|
}
|
|
return v;
|
|
};
|
|
ComponentTypeManager._componentTypesMask = new Map();
|
|
return ComponentTypeManager;
|
|
}());
|
|
es.ComponentTypeManager = ComponentTypeManager;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var EntityList = (function () {
|
|
function EntityList(scene) {
|
|
this._entities = [];
|
|
this._entitiesToAdded = [];
|
|
this._entitiesToRemove = [];
|
|
this._entityDict = new Map();
|
|
this._unsortedTags = [];
|
|
this._tempEntityList = [];
|
|
this.scene = scene;
|
|
}
|
|
Object.defineProperty(EntityList.prototype, "count", {
|
|
get: function () {
|
|
return this._entities.length;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(EntityList.prototype, "buffer", {
|
|
get: function () {
|
|
return this._entities;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
EntityList.prototype.markEntityListUnsorted = function () {
|
|
this._isEntityListUnsorted = true;
|
|
};
|
|
EntityList.prototype.markTagUnsorted = function (tag) {
|
|
this._unsortedTags.push(tag);
|
|
};
|
|
EntityList.prototype.add = function (entity) {
|
|
if (this._entitiesToAdded.indexOf(entity) == -1)
|
|
this._entitiesToAdded.push(entity);
|
|
};
|
|
EntityList.prototype.remove = function (entity) {
|
|
if (!this._entitiesToRemove.contains(entity)) {
|
|
console.warn("You are trying to remove an entity (" + entity.name + ") that you already removed");
|
|
return;
|
|
}
|
|
if (this._entitiesToAdded.contains(entity)) {
|
|
this._entitiesToAdded.remove(entity);
|
|
return;
|
|
}
|
|
if (!this._entitiesToRemove.contains(entity))
|
|
this._entitiesToRemove.push(entity);
|
|
};
|
|
EntityList.prototype.removeAllEntities = function () {
|
|
this._unsortedTags.length = 0;
|
|
this._entitiesToAdded.length = 0;
|
|
this._isEntityListUnsorted = false;
|
|
this.updateLists();
|
|
for (var i = 0; i < this._entities.length; i++) {
|
|
this._entities[i]._isDestroyed = true;
|
|
this._entities[i].onRemovedFromScene();
|
|
this._entities[i].scene = null;
|
|
}
|
|
this._entities.length = 0;
|
|
this._entityDict.clear();
|
|
};
|
|
EntityList.prototype.contains = function (entity) {
|
|
return this._entities.contains(entity) || this._entitiesToAdded.contains(entity);
|
|
};
|
|
EntityList.prototype.getTagList = function (tag) {
|
|
var list = this._entityDict.get(tag);
|
|
if (!list) {
|
|
list = [];
|
|
this._entityDict.set(tag, list);
|
|
}
|
|
return this._entityDict.get(tag);
|
|
};
|
|
EntityList.prototype.addToTagList = function (entity) {
|
|
var list = this.getTagList(entity.tag);
|
|
if (!list.contains(entity)) {
|
|
list.push(entity);
|
|
this._unsortedTags.push(entity.tag);
|
|
}
|
|
};
|
|
EntityList.prototype.removeFromTagList = function (entity) {
|
|
var list = this._entityDict.get(entity.tag);
|
|
if (list) {
|
|
list.remove(entity);
|
|
}
|
|
};
|
|
EntityList.prototype.update = function () {
|
|
for (var i = 0; i < this._entities.length; i++) {
|
|
var entity = this._entities[i];
|
|
if (entity.enabled && (entity.updateInterval == 1 || es.Time.frameCount % entity.updateInterval == 0))
|
|
entity.update();
|
|
}
|
|
};
|
|
EntityList.prototype.updateLists = function () {
|
|
var _this = this;
|
|
if (this._entitiesToRemove.length > 0) {
|
|
var temp = this._entitiesToRemove;
|
|
this._entitiesToRemove = this._tempEntityList;
|
|
this._tempEntityList = temp;
|
|
this._tempEntityList.forEach(function (entity) {
|
|
_this.removeFromTagList(entity);
|
|
_this._entities.remove(entity);
|
|
entity.onRemovedFromScene();
|
|
entity.scene = null;
|
|
_this.scene.entityProcessors.onEntityRemoved(entity);
|
|
});
|
|
this._tempEntityList.length = 0;
|
|
}
|
|
if (this._entitiesToAdded.length > 0) {
|
|
var temp = this._entitiesToAdded;
|
|
this._entitiesToAdded = this._tempEntityList;
|
|
this._tempEntityList = temp;
|
|
this._tempEntityList.forEach(function (entity) {
|
|
if (!_this._entities.contains(entity)) {
|
|
_this._entities.push(entity);
|
|
entity.scene = _this.scene;
|
|
_this.addToTagList(entity);
|
|
_this.scene.entityProcessors.onEntityAdded(entity);
|
|
}
|
|
});
|
|
this._tempEntityList.forEach(function (entity) { return entity.onAddedToScene(); });
|
|
this._tempEntityList.length = 0;
|
|
this._isEntityListUnsorted = true;
|
|
}
|
|
if (this._isEntityListUnsorted) {
|
|
this._entities.sort();
|
|
this._isEntityListUnsorted = false;
|
|
}
|
|
if (this._unsortedTags.length > 0) {
|
|
this._unsortedTags.forEach(function (tag) {
|
|
_this._entityDict.get(tag).sort();
|
|
});
|
|
this._unsortedTags.length = 0;
|
|
}
|
|
};
|
|
EntityList.prototype.findEntity = function (name) {
|
|
for (var i = 0; i < this._entities.length; i++) {
|
|
if (this._entities[i].name == name)
|
|
return this._entities[i];
|
|
}
|
|
return this._entitiesToAdded.firstOrDefault(function (entity) { return entity.name == name; });
|
|
};
|
|
EntityList.prototype.entitiesWithTag = function (tag) {
|
|
var list = this.getTagList(tag);
|
|
var returnList = es.ListPool.obtain();
|
|
for (var i = 0; i < list.length; i++)
|
|
returnList.push(list[i]);
|
|
return returnList;
|
|
};
|
|
EntityList.prototype.entitiesOfType = function (type) {
|
|
var list = es.ListPool.obtain();
|
|
for (var i = 0; i < this._entities.length; i++) {
|
|
if (this._entities[i] instanceof type)
|
|
list.push(this._entities[i]);
|
|
}
|
|
this._entitiesToAdded.forEach(function (entity) {
|
|
if (entity instanceof type)
|
|
list.push(entity);
|
|
});
|
|
return list;
|
|
};
|
|
EntityList.prototype.findComponentOfType = function (type) {
|
|
for (var i = 0; i < this._entities.length; i++) {
|
|
if (this._entities[i].enabled) {
|
|
var comp = this._entities[i].getComponent(type);
|
|
if (comp)
|
|
return comp;
|
|
}
|
|
}
|
|
for (var i = 0; i < this._entitiesToAdded.length; i++) {
|
|
var entity = this._entitiesToAdded[i];
|
|
if (entity.enabled) {
|
|
var comp = entity.getComponent(type);
|
|
if (comp)
|
|
return comp;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
EntityList.prototype.findComponentsOfType = function (type) {
|
|
var comps = es.ListPool.obtain();
|
|
for (var i = 0; i < this._entities.length; i++) {
|
|
if (this._entities[i].enabled)
|
|
this._entities[i].getComponents(type, comps);
|
|
}
|
|
for (var i = 0; i < this._entitiesToAdded.length; i++) {
|
|
var entity = this._entitiesToAdded[i];
|
|
if (entity.enabled)
|
|
entity.getComponents(type, comps);
|
|
}
|
|
return comps;
|
|
};
|
|
return EntityList;
|
|
}());
|
|
es.EntityList = EntityList;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var EntityProcessorList = (function () {
|
|
function EntityProcessorList() {
|
|
this._processors = [];
|
|
}
|
|
EntityProcessorList.prototype.add = function (processor) {
|
|
this._processors.push(processor);
|
|
};
|
|
EntityProcessorList.prototype.remove = function (processor) {
|
|
this._processors.remove(processor);
|
|
};
|
|
EntityProcessorList.prototype.onComponentAdded = function (entity) {
|
|
this.notifyEntityChanged(entity);
|
|
};
|
|
EntityProcessorList.prototype.onComponentRemoved = function (entity) {
|
|
this.notifyEntityChanged(entity);
|
|
};
|
|
EntityProcessorList.prototype.onEntityAdded = function (entity) {
|
|
this.notifyEntityChanged(entity);
|
|
};
|
|
EntityProcessorList.prototype.onEntityRemoved = function (entity) {
|
|
this.removeFromProcessors(entity);
|
|
};
|
|
EntityProcessorList.prototype.begin = function () {
|
|
};
|
|
EntityProcessorList.prototype.update = function () {
|
|
for (var i = 0; i < this._processors.length; i++) {
|
|
this._processors[i].update();
|
|
}
|
|
};
|
|
EntityProcessorList.prototype.lateUpdate = function () {
|
|
for (var i = 0; i < this._processors.length; i++) {
|
|
this._processors[i].lateUpdate();
|
|
}
|
|
};
|
|
EntityProcessorList.prototype.end = function () {
|
|
};
|
|
EntityProcessorList.prototype.getProcessor = function () {
|
|
for (var i = 0; i < this._processors.length; i++) {
|
|
var processor = this._processors[i];
|
|
if (processor instanceof es.EntitySystem)
|
|
return processor;
|
|
}
|
|
return null;
|
|
};
|
|
EntityProcessorList.prototype.notifyEntityChanged = function (entity) {
|
|
for (var i = 0; i < this._processors.length; i++) {
|
|
this._processors[i].onChanged(entity);
|
|
}
|
|
};
|
|
EntityProcessorList.prototype.removeFromProcessors = function (entity) {
|
|
for (var i = 0; i < this._processors.length; i++) {
|
|
this._processors[i].remove(entity);
|
|
}
|
|
};
|
|
return EntityProcessorList;
|
|
}());
|
|
es.EntityProcessorList = EntityProcessorList;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Matcher = (function () {
|
|
function Matcher() {
|
|
this.allSet = new es.BitSet();
|
|
this.exclusionSet = new es.BitSet();
|
|
this.oneSet = new es.BitSet();
|
|
}
|
|
Matcher.empty = function () {
|
|
return new Matcher();
|
|
};
|
|
Matcher.prototype.getAllSet = function () {
|
|
return this.allSet;
|
|
};
|
|
Matcher.prototype.getExclusionSet = function () {
|
|
return this.exclusionSet;
|
|
};
|
|
Matcher.prototype.getOneSet = function () {
|
|
return this.oneSet;
|
|
};
|
|
Matcher.prototype.IsIntersted = function (e) {
|
|
if (!this.allSet.isEmpty()) {
|
|
for (var i = this.allSet.nextSetBit(0); i >= 0; i = this.allSet.nextSetBit(i + 1)) {
|
|
if (!e.componentBits.get(i))
|
|
return false;
|
|
}
|
|
}
|
|
if (!this.exclusionSet.isEmpty() && this.exclusionSet.intersects(e.componentBits))
|
|
return false;
|
|
if (!this.oneSet.isEmpty() && !this.oneSet.intersects(e.componentBits))
|
|
return false;
|
|
return true;
|
|
};
|
|
Matcher.prototype.all = function () {
|
|
var _this = this;
|
|
var types = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
types[_i] = arguments[_i];
|
|
}
|
|
types.forEach(function (type) {
|
|
_this.allSet.set(es.ComponentTypeManager.getIndexFor(type));
|
|
});
|
|
return this;
|
|
};
|
|
Matcher.prototype.exclude = function () {
|
|
var _this = this;
|
|
var types = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
types[_i] = arguments[_i];
|
|
}
|
|
types.forEach(function (type) {
|
|
_this.exclusionSet.set(es.ComponentTypeManager.getIndexFor(type));
|
|
});
|
|
return this;
|
|
};
|
|
Matcher.prototype.one = function () {
|
|
var _this = this;
|
|
var types = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
types[_i] = arguments[_i];
|
|
}
|
|
types.forEach(function (type) {
|
|
_this.oneSet.set(es.ComponentTypeManager.getIndexFor(type));
|
|
});
|
|
return this;
|
|
};
|
|
return Matcher;
|
|
}());
|
|
es.Matcher = Matcher;
|
|
})(es || (es = {}));
|
|
var ObjectUtils = (function () {
|
|
function ObjectUtils() {
|
|
}
|
|
ObjectUtils.clone = function (p, c) {
|
|
if (c === void 0) { c = null; }
|
|
var c = c || {};
|
|
for (var i in p) {
|
|
if (typeof p[i] === 'object') {
|
|
c[i] = p[i] instanceof Array ? [] : {};
|
|
this.clone(p[i], c[i]);
|
|
}
|
|
else {
|
|
c[i] = p[i];
|
|
}
|
|
}
|
|
return c;
|
|
};
|
|
ObjectUtils.elements = function (p) {
|
|
var c = [];
|
|
for (var i in p) {
|
|
if (Array.isArray(p[i])) {
|
|
for (var _i = 0, _a = p[i]; _i < _a.length; _i++) {
|
|
var v = _a[_i];
|
|
c.push(v);
|
|
}
|
|
}
|
|
else {
|
|
c.push(p[i]);
|
|
}
|
|
}
|
|
return c;
|
|
};
|
|
return ObjectUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var RenderableComparer = (function () {
|
|
function RenderableComparer() {
|
|
}
|
|
RenderableComparer.prototype.compare = function (self, other) {
|
|
return other.renderLayer - self.renderLayer;
|
|
};
|
|
return RenderableComparer;
|
|
}());
|
|
es.RenderableComparer = RenderableComparer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var RenderableComponentList = (function () {
|
|
function RenderableComponentList() {
|
|
this._components = [];
|
|
this._componentsByRenderLayer = new Map();
|
|
this._unsortedRenderLayers = [];
|
|
this._componentsNeedSort = true;
|
|
}
|
|
Object.defineProperty(RenderableComponentList.prototype, "count", {
|
|
get: function () {
|
|
return this._components.length;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RenderableComponentList.prototype, "buffer", {
|
|
get: function () {
|
|
return this._components;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
RenderableComponentList.prototype.add = function (component) {
|
|
this._components.push(component);
|
|
this.addToRenderLayerList(component, component.renderLayer);
|
|
};
|
|
RenderableComponentList.prototype.remove = function (component) {
|
|
this._components.remove(component);
|
|
this._componentsByRenderLayer.get(component.renderLayer).remove(component);
|
|
};
|
|
RenderableComponentList.prototype.updateRenderableRenderLayer = function (component, oldRenderLayer, newRenderLayer) {
|
|
if (this._componentsByRenderLayer.has(oldRenderLayer) && this._componentsByRenderLayer.get(oldRenderLayer).contains(component)) {
|
|
this._componentsByRenderLayer.get(oldRenderLayer).remove(component);
|
|
this.addToRenderLayerList(component, newRenderLayer);
|
|
}
|
|
};
|
|
RenderableComponentList.prototype.setRenderLayerNeedsComponentSort = function (renderLayer) {
|
|
if (!this._unsortedRenderLayers.contains(renderLayer))
|
|
this._unsortedRenderLayers.push(renderLayer);
|
|
this._componentsNeedSort = true;
|
|
};
|
|
RenderableComponentList.prototype.setNeedsComponentSort = function () {
|
|
this._componentsNeedSort = true;
|
|
};
|
|
RenderableComponentList.prototype.addToRenderLayerList = function (component, renderLayer) {
|
|
var list = this.componentsWithRenderLayer(renderLayer);
|
|
if (list.contains(component)) {
|
|
console.warn("组件呈现层列表已经包含此组件");
|
|
return;
|
|
}
|
|
list.push(component);
|
|
if (!this._unsortedRenderLayers.contains(renderLayer))
|
|
this._unsortedRenderLayers.push(renderLayer);
|
|
this._componentsNeedSort = true;
|
|
};
|
|
RenderableComponentList.prototype.componentsWithRenderLayer = function (renderLayer) {
|
|
if (!this._componentsByRenderLayer.get(renderLayer)) {
|
|
this._componentsByRenderLayer.set(renderLayer, []);
|
|
}
|
|
return this._componentsByRenderLayer.get(renderLayer);
|
|
};
|
|
RenderableComponentList.prototype.updateList = function () {
|
|
if (this._componentsNeedSort) {
|
|
this._components.sort(RenderableComponentList.compareUpdatableOrder.compare);
|
|
this._componentsNeedSort = false;
|
|
this.updateEgretList();
|
|
}
|
|
if (this._unsortedRenderLayers.length > 0) {
|
|
for (var i = 0, count = this._unsortedRenderLayers.length; i < count; i++) {
|
|
var renderLayerComponents = this._componentsByRenderLayer.get(this._unsortedRenderLayers[i]);
|
|
if (renderLayerComponents) {
|
|
renderLayerComponents.sort(RenderableComponentList.compareUpdatableOrder.compare);
|
|
}
|
|
}
|
|
this._unsortedRenderLayers.length = 0;
|
|
this.updateEgretList();
|
|
}
|
|
};
|
|
RenderableComponentList.prototype.updateEgretList = function () {
|
|
var scene = es.Core._instance._scene;
|
|
if (!scene)
|
|
return;
|
|
var _loop_5 = function (i) {
|
|
var component = this_1._components[i];
|
|
var egretDisplayObject = scene.$children.find(function (a) { return a.hashCode == component.displayObject.hashCode; });
|
|
var displayIndex = scene.getChildIndex(egretDisplayObject);
|
|
if (displayIndex != -1 && displayIndex != i)
|
|
scene.swapChildrenAt(displayIndex, i);
|
|
};
|
|
var this_1 = this;
|
|
for (var i = 0; i < this._components.length; i++) {
|
|
_loop_5(i);
|
|
}
|
|
};
|
|
RenderableComponentList.compareUpdatableOrder = new es.RenderableComparer();
|
|
return RenderableComponentList;
|
|
}());
|
|
es.RenderableComponentList = RenderableComponentList;
|
|
})(es || (es = {}));
|
|
var StringUtils = (function () {
|
|
function StringUtils() {
|
|
}
|
|
StringUtils.matchChineseWord = function (str) {
|
|
var patternA = /[\u4E00-\u9FA5]+/gim;
|
|
return str.match(patternA);
|
|
};
|
|
StringUtils.lTrim = function (target) {
|
|
var startIndex = 0;
|
|
while (this.isWhiteSpace(target.charAt(startIndex))) {
|
|
startIndex++;
|
|
}
|
|
return target.slice(startIndex, target.length);
|
|
};
|
|
StringUtils.rTrim = function (target) {
|
|
var endIndex = target.length - 1;
|
|
while (this.isWhiteSpace(target.charAt(endIndex))) {
|
|
endIndex--;
|
|
}
|
|
return target.slice(0, endIndex + 1);
|
|
};
|
|
StringUtils.trim = function (target) {
|
|
if (target == null) {
|
|
return null;
|
|
}
|
|
return this.rTrim(this.lTrim(target));
|
|
};
|
|
StringUtils.isWhiteSpace = function (str) {
|
|
if (str == " " || str == "\t" || str == "\r" || str == "\n")
|
|
return true;
|
|
return false;
|
|
};
|
|
StringUtils.replaceMatch = function (mainStr, targetStr, replaceStr, caseMark) {
|
|
if (caseMark === void 0) { caseMark = false; }
|
|
var len = mainStr.length;
|
|
var tempStr = "";
|
|
var isMatch = false;
|
|
var tempTarget = caseMark == true ? targetStr.toLowerCase() : targetStr;
|
|
for (var i = 0; i < len; i++) {
|
|
isMatch = false;
|
|
if (mainStr.charAt(i) == tempTarget.charAt(0)) {
|
|
if (mainStr.substr(i, tempTarget.length) == tempTarget) {
|
|
isMatch = true;
|
|
}
|
|
}
|
|
if (isMatch) {
|
|
tempStr += replaceStr;
|
|
i = i + tempTarget.length - 1;
|
|
}
|
|
else {
|
|
tempStr += mainStr.charAt(i);
|
|
}
|
|
}
|
|
return tempStr;
|
|
};
|
|
StringUtils.htmlSpecialChars = function (str, reversion) {
|
|
if (reversion === void 0) { reversion = false; }
|
|
var len = this.specialSigns.length;
|
|
for (var i = 0; i < len; i += 2) {
|
|
var from = void 0;
|
|
var to = void 0;
|
|
from = this.specialSigns[i];
|
|
to = this.specialSigns[i + 1];
|
|
if (reversion) {
|
|
var temp = from;
|
|
from = to;
|
|
to = temp;
|
|
}
|
|
str = this.replaceMatch(str, from, to);
|
|
}
|
|
return str;
|
|
};
|
|
StringUtils.zfill = function (str, width) {
|
|
if (width === void 0) { width = 2; }
|
|
if (!str) {
|
|
return str;
|
|
}
|
|
width = Math.floor(width);
|
|
var slen = str.length;
|
|
if (slen >= width) {
|
|
return str;
|
|
}
|
|
var negative = false;
|
|
if (str.substr(0, 1) == '-') {
|
|
negative = true;
|
|
str = str.substr(1);
|
|
}
|
|
var len = width - slen;
|
|
for (var i = 0; i < len; i++) {
|
|
str = '0' + str;
|
|
}
|
|
if (negative) {
|
|
str = '-' + str;
|
|
}
|
|
return str;
|
|
};
|
|
StringUtils.reverse = function (str) {
|
|
if (str.length > 1)
|
|
return this.reverse(str.substring(1)) + str.substring(0, 1);
|
|
else
|
|
return str;
|
|
};
|
|
StringUtils.cutOff = function (str, start, len, order) {
|
|
if (order === void 0) { order = true; }
|
|
start = Math.floor(start);
|
|
len = Math.floor(len);
|
|
var length = str.length;
|
|
if (start > length)
|
|
start = length;
|
|
var s = start;
|
|
var e = start + len;
|
|
var newStr;
|
|
if (order) {
|
|
newStr = str.substring(0, s) + str.substr(e, length);
|
|
}
|
|
else {
|
|
s = length - 1 - start - len;
|
|
e = s + len;
|
|
newStr = str.substring(0, s + 1) + str.substr(e + 1, length);
|
|
}
|
|
return newStr;
|
|
};
|
|
StringUtils.strReplace = function (str, rStr) {
|
|
var i = 0, len = rStr.length;
|
|
for (; i < len; i++) {
|
|
if (rStr[i] == null || rStr[i] == "") {
|
|
rStr[i] = "无";
|
|
}
|
|
str = str.replace("{" + i + "}", rStr[i]);
|
|
}
|
|
return str;
|
|
};
|
|
StringUtils.specialSigns = [
|
|
'&', '&',
|
|
'<', '<',
|
|
'>', '>',
|
|
'"', '"',
|
|
"'", ''',
|
|
'®', '®',
|
|
'©', '©',
|
|
'™', '™',
|
|
];
|
|
return StringUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var TextureUtils = (function () {
|
|
function TextureUtils() {
|
|
}
|
|
TextureUtils.convertImageToCanvas = function (texture, rect) {
|
|
if (!this.sharedCanvas) {
|
|
this.sharedCanvas = egret.sys.createCanvas();
|
|
this.sharedContext = this.sharedCanvas.getContext("2d");
|
|
}
|
|
var w = texture.$getTextureWidth();
|
|
var h = texture.$getTextureHeight();
|
|
if (!rect) {
|
|
rect = egret.$TempRectangle;
|
|
rect.x = 0;
|
|
rect.y = 0;
|
|
rect.width = w;
|
|
rect.height = h;
|
|
}
|
|
rect.x = Math.min(rect.x, w - 1);
|
|
rect.y = Math.min(rect.y, h - 1);
|
|
rect.width = Math.min(rect.width, w - rect.x);
|
|
rect.height = Math.min(rect.height, h - rect.y);
|
|
var iWidth = Math.floor(rect.width);
|
|
var iHeight = Math.floor(rect.height);
|
|
var surface = this.sharedCanvas;
|
|
surface["style"]["width"] = iWidth + "px";
|
|
surface["style"]["height"] = iHeight + "px";
|
|
this.sharedCanvas.width = iWidth;
|
|
this.sharedCanvas.height = iHeight;
|
|
if (egret.Capabilities.renderMode == "webgl") {
|
|
var renderTexture = void 0;
|
|
if (!texture.$renderBuffer) {
|
|
if (egret.sys.systemRenderer["renderClear"]) {
|
|
egret.sys.systemRenderer["renderClear"]();
|
|
}
|
|
renderTexture = new egret.RenderTexture();
|
|
renderTexture.drawToTexture(new egret.Bitmap(texture));
|
|
}
|
|
else {
|
|
renderTexture = texture;
|
|
}
|
|
var pixels = renderTexture.$renderBuffer.getPixels(rect.x, rect.y, iWidth, iHeight);
|
|
var x = 0;
|
|
var y = 0;
|
|
for (var i = 0; i < pixels.length; i += 4) {
|
|
this.sharedContext.fillStyle =
|
|
'rgba(' + pixels[i]
|
|
+ ',' + pixels[i + 1]
|
|
+ ',' + pixels[i + 2]
|
|
+ ',' + (pixels[i + 3] / 255) + ')';
|
|
this.sharedContext.fillRect(x, y, 1, 1);
|
|
x++;
|
|
if (x == iWidth) {
|
|
x = 0;
|
|
y++;
|
|
}
|
|
}
|
|
if (!texture.$renderBuffer) {
|
|
renderTexture.dispose();
|
|
}
|
|
return surface;
|
|
}
|
|
else {
|
|
var bitmapData = texture;
|
|
var offsetX = Math.round(bitmapData.$offsetX);
|
|
var offsetY = Math.round(bitmapData.$offsetY);
|
|
var bitmapWidth = bitmapData.$bitmapWidth;
|
|
var bitmapHeight = bitmapData.$bitmapHeight;
|
|
var $TextureScaleFactor = es.Core._instance.stage.textureScaleFactor;
|
|
this.sharedContext.drawImage(bitmapData.$bitmapData.source, bitmapData.$bitmapX + rect.x / $TextureScaleFactor, bitmapData.$bitmapY + rect.y / $TextureScaleFactor, bitmapWidth * rect.width / w, bitmapHeight * rect.height / h, offsetX, offsetY, rect.width, rect.height);
|
|
return surface;
|
|
}
|
|
};
|
|
TextureUtils.toDataURL = function (type, texture, rect, encoderOptions) {
|
|
try {
|
|
var surface = this.convertImageToCanvas(texture, rect);
|
|
var result = surface.toDataURL(type, encoderOptions);
|
|
return result;
|
|
}
|
|
catch (e) {
|
|
egret.$error(1033);
|
|
}
|
|
return null;
|
|
};
|
|
TextureUtils.eliFoTevas = function (type, texture, filePath, rect, encoderOptions) {
|
|
var surface = this.convertImageToCanvas(texture, rect);
|
|
var result = surface.toTempFilePathSync({
|
|
fileType: type.indexOf("png") >= 0 ? "png" : "jpg"
|
|
});
|
|
wx.getFileSystemManager().saveFile({
|
|
tempFilePath: result,
|
|
filePath: wx.env.USER_DATA_PATH + "/" + filePath,
|
|
success: function (res) {
|
|
}
|
|
});
|
|
return result;
|
|
};
|
|
TextureUtils.getPixel32 = function (texture, x, y) {
|
|
egret.$warn(1041, "getPixel32", "getPixels");
|
|
return texture.getPixels(x, y);
|
|
};
|
|
TextureUtils.getPixels = function (texture, x, y, width, height) {
|
|
if (width === void 0) { width = 1; }
|
|
if (height === void 0) { height = 1; }
|
|
if (egret.Capabilities.renderMode == "webgl") {
|
|
var renderTexture = void 0;
|
|
if (!texture.$renderBuffer) {
|
|
renderTexture = new egret.RenderTexture();
|
|
renderTexture.drawToTexture(new egret.Bitmap(texture));
|
|
}
|
|
else {
|
|
renderTexture = texture;
|
|
}
|
|
var pixels = renderTexture.$renderBuffer.getPixels(x, y, width, height);
|
|
return pixels;
|
|
}
|
|
try {
|
|
var surface = this.convertImageToCanvas(texture);
|
|
var result = this.sharedContext.getImageData(x, y, width, height).data;
|
|
return result;
|
|
}
|
|
catch (e) {
|
|
egret.$error(1039);
|
|
}
|
|
};
|
|
return TextureUtils;
|
|
}());
|
|
es.TextureUtils = TextureUtils;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Time = (function () {
|
|
function Time() {
|
|
}
|
|
Time.update = function (currentTime) {
|
|
var dt = (currentTime - this._lastTime) / 1000;
|
|
this.deltaTime = dt * this.timeScale;
|
|
this.unscaledDeltaTime = dt;
|
|
this._timeSinceSceneLoad += dt;
|
|
this.frameCount++;
|
|
this._lastTime = currentTime;
|
|
};
|
|
Time.sceneChanged = function () {
|
|
this._timeSinceSceneLoad = 0;
|
|
};
|
|
Time.checkEvery = function (interval) {
|
|
return (this._timeSinceSceneLoad / interval) > ((this._timeSinceSceneLoad - this.deltaTime) / interval);
|
|
};
|
|
Time.deltaTime = 0;
|
|
Time.timeScale = 1;
|
|
Time.frameCount = 0;
|
|
Time._lastTime = 0;
|
|
return Time;
|
|
}());
|
|
es.Time = Time;
|
|
})(es || (es = {}));
|
|
var TimeUtils = (function () {
|
|
function TimeUtils() {
|
|
}
|
|
TimeUtils.monthId = function (d) {
|
|
if (d === void 0) { d = null; }
|
|
d = d ? d : new Date();
|
|
var y = d.getFullYear();
|
|
var m = d.getMonth() + 1;
|
|
var g = m < 10 ? "0" : "";
|
|
return parseInt(y + g + m);
|
|
};
|
|
TimeUtils.dateId = function (t) {
|
|
if (t === void 0) { t = null; }
|
|
t = t ? t : new Date();
|
|
var m = t.getMonth() + 1;
|
|
var a = m < 10 ? "0" : "";
|
|
var d = t.getDate();
|
|
var b = d < 10 ? "0" : "";
|
|
return parseInt(t.getFullYear() + a + m + b + d);
|
|
};
|
|
TimeUtils.weekId = function (d, first) {
|
|
if (d === void 0) { d = null; }
|
|
if (first === void 0) { first = true; }
|
|
d = d ? d : new Date();
|
|
var c = new Date();
|
|
c.setTime(d.getTime());
|
|
c.setDate(1);
|
|
c.setMonth(0);
|
|
var year = c.getFullYear();
|
|
var firstDay = c.getDay();
|
|
if (firstDay == 0) {
|
|
firstDay = 7;
|
|
}
|
|
var max = false;
|
|
if (firstDay <= 4) {
|
|
max = firstDay > 1;
|
|
c.setDate(c.getDate() - (firstDay - 1));
|
|
}
|
|
else {
|
|
c.setDate(c.getDate() + 7 - firstDay + 1);
|
|
}
|
|
var num = this.diffDay(d, c, false);
|
|
if (num < 0) {
|
|
c.setDate(1);
|
|
c.setMonth(0);
|
|
c.setDate(c.getDate() - 1);
|
|
return this.weekId(c, false);
|
|
}
|
|
var week = num / 7;
|
|
var weekIdx = Math.floor(week) + 1;
|
|
if (weekIdx == 53) {
|
|
c.setTime(d.getTime());
|
|
c.setDate(c.getDate() - 1);
|
|
var endDay = c.getDay();
|
|
if (endDay == 0) {
|
|
endDay = 7;
|
|
}
|
|
if (first && (!max || endDay < 4)) {
|
|
c.setFullYear(c.getFullYear() + 1);
|
|
c.setDate(1);
|
|
c.setMonth(0);
|
|
return this.weekId(c, false);
|
|
}
|
|
}
|
|
var g = weekIdx > 9 ? "" : "0";
|
|
var s = year + "00" + g + weekIdx;
|
|
return parseInt(s);
|
|
};
|
|
TimeUtils.diffDay = function (a, b, fixOne) {
|
|
if (fixOne === void 0) { fixOne = false; }
|
|
var x = (a.getTime() - b.getTime()) / 86400000;
|
|
return fixOne ? Math.ceil(x) : Math.floor(x);
|
|
};
|
|
TimeUtils.getFirstDayOfWeek = function (d) {
|
|
d = d ? d : new Date();
|
|
var day = d.getDay() || 7;
|
|
return new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1 - day, 0, 0, 0, 0);
|
|
};
|
|
TimeUtils.getFirstOfDay = function (d) {
|
|
d = d ? d : new Date();
|
|
d.setHours(0, 0, 0, 0);
|
|
return d;
|
|
};
|
|
TimeUtils.getNextFirstOfDay = function (d) {
|
|
return new Date(this.getFirstOfDay(d).getTime() + 86400000);
|
|
};
|
|
TimeUtils.formatDate = function (date) {
|
|
var y = date.getFullYear();
|
|
var m = date.getMonth() + 1;
|
|
m = m < 10 ? '0' + m : m;
|
|
var d = date.getDate();
|
|
d = d < 10 ? ('0' + d) : d;
|
|
return y + '-' + m + '-' + d;
|
|
};
|
|
TimeUtils.formatDateTime = function (date) {
|
|
var y = date.getFullYear();
|
|
var m = date.getMonth() + 1;
|
|
m = m < 10 ? ('0' + m) : m;
|
|
var d = date.getDate();
|
|
d = d < 10 ? ('0' + d) : d;
|
|
var h = date.getHours();
|
|
var i = date.getMinutes();
|
|
i = i < 10 ? ('0' + i) : i;
|
|
var s = date.getSeconds();
|
|
s = s < 10 ? ('0' + s) : s;
|
|
return y + '-' + m + '-' + d + ' ' + h + ':' + i + ":" + s;
|
|
};
|
|
TimeUtils.parseDate = function (s) {
|
|
var t = Date.parse(s);
|
|
if (!isNaN(t)) {
|
|
return new Date(Date.parse(s.replace(/-/g, "/")));
|
|
}
|
|
else {
|
|
return new Date();
|
|
}
|
|
};
|
|
TimeUtils.secondToTime = function (time, partition, showHour) {
|
|
if (time === void 0) { time = 0; }
|
|
if (partition === void 0) { partition = ":"; }
|
|
if (showHour === void 0) { showHour = true; }
|
|
var hours = Math.floor(time / 3600);
|
|
var minutes = Math.floor(time % 3600 / 60);
|
|
var seconds = Math.floor(time % 3600 % 60);
|
|
var h = hours.toString();
|
|
var m = minutes.toString();
|
|
var s = seconds.toString();
|
|
if (hours < 10)
|
|
h = "0" + h;
|
|
if (minutes < 10)
|
|
m = "0" + m;
|
|
if (seconds < 10)
|
|
s = "0" + s;
|
|
var timeStr;
|
|
if (showHour)
|
|
timeStr = h + partition + m + partition + s;
|
|
else
|
|
timeStr = m + partition + s;
|
|
return timeStr;
|
|
};
|
|
TimeUtils.timeToMillisecond = function (time, partition) {
|
|
if (partition === void 0) { partition = ":"; }
|
|
var _ary = time.split(partition);
|
|
var timeNum = 0;
|
|
var len = _ary.length;
|
|
for (var i = 0; i < len; i++) {
|
|
var n = _ary[i];
|
|
timeNum += n * Math.pow(60, (len - 1 - i));
|
|
}
|
|
timeNum *= 1000;
|
|
return timeNum.toString();
|
|
};
|
|
return TimeUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var GraphicsCapabilities = (function (_super) {
|
|
__extends(GraphicsCapabilities, _super);
|
|
function GraphicsCapabilities() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
GraphicsCapabilities.prototype.initialize = function (device) {
|
|
this.platformInitialize(device);
|
|
};
|
|
GraphicsCapabilities.prototype.platformInitialize = function (device) {
|
|
if (GraphicsCapabilities.runtimeType != egret.RuntimeType.WXGAME)
|
|
return;
|
|
var capabilities = this;
|
|
capabilities["isMobile"] = true;
|
|
var systemInfo = wx.getSystemInfoSync();
|
|
var systemStr = systemInfo.system.toLowerCase();
|
|
if (systemStr.indexOf("ios") > -1) {
|
|
capabilities["os"] = "iOS";
|
|
}
|
|
else if (systemStr.indexOf("android") > -1) {
|
|
capabilities["os"] = "Android";
|
|
}
|
|
var language = systemInfo.language;
|
|
if (language.indexOf('zh') > -1) {
|
|
language = "zh-CN";
|
|
}
|
|
else {
|
|
language = "en-US";
|
|
}
|
|
capabilities["language"] = language;
|
|
};
|
|
return GraphicsCapabilities;
|
|
}(egret.Capabilities));
|
|
es.GraphicsCapabilities = GraphicsCapabilities;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var GraphicsDevice = (function () {
|
|
function GraphicsDevice() {
|
|
this.setup();
|
|
this.graphicsCapabilities = new es.GraphicsCapabilities();
|
|
this.graphicsCapabilities.initialize(this);
|
|
}
|
|
Object.defineProperty(GraphicsDevice.prototype, "viewport", {
|
|
get: function () {
|
|
return this._viewport;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
GraphicsDevice.prototype.setup = function () {
|
|
this._viewport = new es.Viewport(0, 0, es.Core._instance.stage.stageWidth, es.Core._instance.stage.stageHeight);
|
|
};
|
|
return GraphicsDevice;
|
|
}());
|
|
es.GraphicsDevice = GraphicsDevice;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Viewport = (function () {
|
|
function Viewport(x, y, width, height) {
|
|
this._x = x;
|
|
this._y = y;
|
|
this._width = width;
|
|
this._height = height;
|
|
this._minDepth = 0;
|
|
this._maxDepth = 1;
|
|
}
|
|
Object.defineProperty(Viewport.prototype, "width", {
|
|
get: function () {
|
|
return this._width;
|
|
},
|
|
set: function (value) {
|
|
this._width = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Viewport.prototype, "height", {
|
|
get: function () {
|
|
return this._height;
|
|
},
|
|
set: function (value) {
|
|
this._height = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Viewport.prototype, "aspectRatio", {
|
|
get: function () {
|
|
if ((this._height != 0) && (this._width != 0))
|
|
return (this._width / this._height);
|
|
return 0;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Viewport.prototype, "bounds", {
|
|
get: function () {
|
|
return new es.Rectangle(this._x, this._y, this._width, this._height);
|
|
},
|
|
set: function (value) {
|
|
this._x = value.x;
|
|
this._y = value.y;
|
|
this._width = value.width;
|
|
this._height = value.height;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
return Viewport;
|
|
}());
|
|
es.Viewport = Viewport;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var GaussianBlurEffect = (function (_super) {
|
|
__extends(GaussianBlurEffect, _super);
|
|
function GaussianBlurEffect() {
|
|
return _super.call(this, es.PostProcessor.default_vert, GaussianBlurEffect.blur_frag, {
|
|
screenWidth: es.Core.graphicsDevice.viewport.width,
|
|
screenHeight: es.Core.graphicsDevice.viewport.height
|
|
}) || this;
|
|
}
|
|
GaussianBlurEffect.blur_frag = "precision mediump float;\n" +
|
|
"uniform sampler2D uSampler;\n" +
|
|
"uniform float screenWidth;\n" +
|
|
"uniform float screenHeight;\n" +
|
|
"float normpdf(in float x, in float sigma)\n" +
|
|
"{\n" +
|
|
"return 0.39894*exp(-0.5*x*x/(sigma*sigma))/sigma;\n" +
|
|
"}\n" +
|
|
"void main()\n" +
|
|
"{\n" +
|
|
"vec3 c = texture2D(uSampler, gl_FragCoord.xy / vec2(screenWidth, screenHeight).xy).rgb;\n" +
|
|
"const int mSize = 11;\n" +
|
|
"const int kSize = (mSize - 1)/2;\n" +
|
|
"float kernel[mSize];\n" +
|
|
"vec3 final_colour = vec3(0.0);\n" +
|
|
"float sigma = 7.0;\n" +
|
|
"float z = 0.0;\n" +
|
|
"for (int j = 0; j <= kSize; ++j)\n" +
|
|
"{\n" +
|
|
"kernel[kSize+j] = kernel[kSize-j] = normpdf(float(j),sigma);\n" +
|
|
"}\n" +
|
|
"for (int j = 0; j < mSize; ++j)\n" +
|
|
"{\n" +
|
|
"z += kernel[j];\n" +
|
|
"}\n" +
|
|
"for (int i = -kSize; i <= kSize; ++i)\n" +
|
|
"{\n" +
|
|
"for (int j = -kSize; j <= kSize; ++j)\n" +
|
|
"{\n" +
|
|
"final_colour += kernel[kSize+j]*kernel[kSize+i]*texture2D(uSampler, (gl_FragCoord.xy+vec2(float(i),float(j))) / vec2(screenWidth, screenHeight).xy).rgb;\n" +
|
|
"}\n}\n" +
|
|
"gl_FragColor = vec4(final_colour/(z*z), 1.0);\n" +
|
|
"}";
|
|
return GaussianBlurEffect;
|
|
}(egret.CustomFilter));
|
|
es.GaussianBlurEffect = GaussianBlurEffect;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PolygonLightEffect = (function (_super) {
|
|
__extends(PolygonLightEffect, _super);
|
|
function PolygonLightEffect() {
|
|
return _super.call(this, PolygonLightEffect.vertSrc, PolygonLightEffect.fragmentSrc) || this;
|
|
}
|
|
PolygonLightEffect.vertSrc = "attribute vec2 aVertexPosition;\n" +
|
|
"attribute vec2 aTextureCoord;\n" +
|
|
"uniform vec2 projectionVector;\n" +
|
|
"varying vec2 vTextureCoord;\n" +
|
|
"const vec2 center = vec2(-1.0, 1.0);\n" +
|
|
"void main(void) {\n" +
|
|
" gl_Position = vec4( (aVertexPosition / projectionVector) + center , 0.0, 1.0);\n" +
|
|
" vTextureCoord = aTextureCoord;\n" +
|
|
"}";
|
|
PolygonLightEffect.fragmentSrc = "precision lowp float;\n" +
|
|
"varying vec2 vTextureCoord;\n" +
|
|
"uniform sampler2D uSampler;\n" +
|
|
"#define SAMPLE_COUNT 15\n" +
|
|
"uniform vec2 _sampleOffsets[SAMPLE_COUNT];\n" +
|
|
"uniform float _sampleWeights[SAMPLE_COUNT];\n" +
|
|
"void main(void) {\n" +
|
|
"vec4 c = vec4(0, 0, 0, 0);\n" +
|
|
"for( int i = 0; i < SAMPLE_COUNT; i++ )\n" +
|
|
" c += texture2D( uSampler, vTextureCoord + _sampleOffsets[i] ) * _sampleWeights[i];\n" +
|
|
"gl_FragColor = c;\n" +
|
|
"}";
|
|
return PolygonLightEffect;
|
|
}(egret.CustomFilter));
|
|
es.PolygonLightEffect = PolygonLightEffect;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PostProcessor = (function () {
|
|
function PostProcessor(effect) {
|
|
if (effect === void 0) { effect = null; }
|
|
this.enabled = true;
|
|
this.effect = effect;
|
|
}
|
|
PostProcessor.prototype.onAddedToScene = function (scene) {
|
|
this.scene = scene;
|
|
this.shape = new egret.Shape();
|
|
this.shape.graphics.beginFill(0xFFFFFF, 1);
|
|
this.shape.graphics.drawRect(0, 0, es.Core.graphicsDevice.viewport.width, es.Core.graphicsDevice.viewport.height);
|
|
this.shape.graphics.endFill();
|
|
scene.addChild(this.shape);
|
|
};
|
|
PostProcessor.prototype.process = function () {
|
|
this.drawFullscreenQuad();
|
|
};
|
|
PostProcessor.prototype.onSceneBackBufferSizeChanged = function (newWidth, newHeight) {
|
|
};
|
|
PostProcessor.prototype.unload = function () {
|
|
if (this.effect) {
|
|
this.effect = null;
|
|
}
|
|
this.scene.removeChild(this.shape);
|
|
this.scene = null;
|
|
};
|
|
PostProcessor.prototype.drawFullscreenQuad = function () {
|
|
this.scene.filters = [this.effect];
|
|
};
|
|
PostProcessor.default_vert = "attribute vec2 aVertexPosition;\n" +
|
|
"attribute vec2 aTextureCoord;\n" +
|
|
"attribute vec2 aColor;\n" +
|
|
"uniform vec2 projectionVector;\n" +
|
|
"varying vec2 vTextureCoord;\n" +
|
|
"varying vec4 vColor;\n" +
|
|
"const vec2 center = vec2(-1.0, 1.0);\n" +
|
|
"void main(void) {\n" +
|
|
"gl_Position = vec4( (aVertexPosition / projectionVector) + center , 0.0, 1.0);\n" +
|
|
"vTextureCoord = aTextureCoord;\n" +
|
|
"vColor = vec4(aColor.x, aColor.x, aColor.x, aColor.x);\n" +
|
|
"}";
|
|
return PostProcessor;
|
|
}());
|
|
es.PostProcessor = PostProcessor;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var GaussianBlurPostProcessor = (function (_super) {
|
|
__extends(GaussianBlurPostProcessor, _super);
|
|
function GaussianBlurPostProcessor() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
GaussianBlurPostProcessor.prototype.onAddedToScene = function (scene) {
|
|
_super.prototype.onAddedToScene.call(this, scene);
|
|
this.effect = new es.GaussianBlurEffect();
|
|
};
|
|
return GaussianBlurPostProcessor;
|
|
}(es.PostProcessor));
|
|
es.GaussianBlurPostProcessor = GaussianBlurPostProcessor;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Renderer = (function () {
|
|
function Renderer(renderOrder, camera) {
|
|
if (camera === void 0) { camera = null; }
|
|
this.renderOrder = 0;
|
|
this.shouldDebugRender = true;
|
|
this.camera = camera;
|
|
this.renderOrder = renderOrder;
|
|
}
|
|
Object.defineProperty(Renderer.prototype, "wantsToRenderToSceneRenderTarget", {
|
|
get: function () {
|
|
return !!this.renderTexture;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Renderer.prototype.onAddedToScene = function (scene) {
|
|
};
|
|
Renderer.prototype.unload = function () {
|
|
};
|
|
Renderer.prototype.onSceneBackBufferSizeChanged = function (newWidth, newHeight) {
|
|
};
|
|
Renderer.prototype.compareTo = function (other) {
|
|
return this.renderOrder - other.renderOrder;
|
|
};
|
|
Renderer.prototype.beginRender = function (cam) {
|
|
};
|
|
Renderer.prototype.renderAfterStateCheck = function (renderable, cam) {
|
|
renderable.render(cam);
|
|
};
|
|
Renderer.prototype.debugRender = function (scene, cam) {
|
|
for (var i = 0; i < scene.entities.count; i++) {
|
|
var entity = scene.entities.buffer[i];
|
|
if (entity.enabled)
|
|
entity.debugRender();
|
|
}
|
|
};
|
|
return Renderer;
|
|
}());
|
|
es.Renderer = Renderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var DefaultRenderer = (function (_super) {
|
|
__extends(DefaultRenderer, _super);
|
|
function DefaultRenderer() {
|
|
return _super.call(this, 0, null) || this;
|
|
}
|
|
DefaultRenderer.prototype.render = function (scene) {
|
|
var cam = this.camera ? this.camera : scene.camera;
|
|
this.beginRender(cam);
|
|
for (var i = 0; i < scene.renderableComponents.count; i++) {
|
|
var renderable = scene.renderableComponents.buffer[i];
|
|
if (renderable.enabled && renderable.isVisibleFromCamera(cam))
|
|
this.renderAfterStateCheck(renderable, cam);
|
|
}
|
|
};
|
|
return DefaultRenderer;
|
|
}(es.Renderer));
|
|
es.DefaultRenderer = DefaultRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var RenderLayerExcludeRenderer = (function (_super) {
|
|
__extends(RenderLayerExcludeRenderer, _super);
|
|
function RenderLayerExcludeRenderer(renderOrder) {
|
|
var excludedRenderLayers = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
excludedRenderLayers[_i - 1] = arguments[_i];
|
|
}
|
|
var _this = _super.call(this, renderOrder, null) || this;
|
|
_this.excludedRenderLayers = excludedRenderLayers;
|
|
return _this;
|
|
}
|
|
RenderLayerExcludeRenderer.prototype.render = function (scene) {
|
|
var cam = this.camera ? this.camera : scene.camera;
|
|
this.beginRender(cam);
|
|
for (var i = 0; i < scene.renderableComponents.count; i++) {
|
|
var renderable = scene.renderableComponents.buffer[i];
|
|
if (!this.excludedRenderLayers.contains(renderable.renderLayer) && renderable.enabled &&
|
|
renderable.isVisibleFromCamera(cam))
|
|
this.renderAfterStateCheck(renderable, cam);
|
|
}
|
|
if (this.shouldDebugRender && es.Core.debugRenderEndabled)
|
|
this.debugRender(scene, cam);
|
|
};
|
|
RenderLayerExcludeRenderer.prototype.debugRender = function (scene, cam) {
|
|
for (var i = 0; i < scene.renderableComponents.count; i++) {
|
|
var renderable = scene.renderableComponents.buffer[i];
|
|
if (!this.excludedRenderLayers.contains(renderable.renderLayer) && renderable.enabled &&
|
|
renderable.isVisibleFromCamera(cam))
|
|
renderable.debugRender();
|
|
}
|
|
_super.prototype.debugRender.call(this, scene, cam);
|
|
};
|
|
return RenderLayerExcludeRenderer;
|
|
}(es.Renderer));
|
|
es.RenderLayerExcludeRenderer = RenderLayerExcludeRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ScreenSpaceRenderer = (function (_super) {
|
|
__extends(ScreenSpaceRenderer, _super);
|
|
function ScreenSpaceRenderer(renderOrder) {
|
|
var renderLayers = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
renderLayers[_i - 1] = arguments[_i];
|
|
}
|
|
var _this = _super.call(this, renderOrder, null) || this;
|
|
renderLayers.sort();
|
|
renderLayers.reverse();
|
|
_this.renderLayers = renderLayers;
|
|
return _this;
|
|
}
|
|
ScreenSpaceRenderer.prototype.render = function (scene) {
|
|
this.beginRender(this.camera);
|
|
for (var i = 0; i < this.renderLayers.length; i++) {
|
|
var renderables = scene.renderableComponents.componentsWithRenderLayer(this.renderLayers[i]);
|
|
for (var j = 0; j < renderables.length; j++) {
|
|
var renderable = renderables[j];
|
|
if (renderable.enabled && renderable.isVisibleFromCamera(this.camera))
|
|
this.renderAfterStateCheck(renderable, this.camera);
|
|
}
|
|
}
|
|
if (this.shouldDebugRender && es.Core.debugRenderEndabled)
|
|
this.debugRender(scene, this.camera);
|
|
};
|
|
ScreenSpaceRenderer.prototype.debugRender = function (scene, cam) {
|
|
for (var i = 0; i < this.renderLayers.length; i++) {
|
|
var renderables = scene.renderableComponents.componentsWithRenderLayer(this.renderLayers[i]);
|
|
for (var j = 0; j < renderables.length; j++) {
|
|
var entity = renderables[j];
|
|
if (entity.enabled)
|
|
entity.debugRender();
|
|
}
|
|
}
|
|
};
|
|
ScreenSpaceRenderer.prototype.onSceneBackBufferSizeChanged = function (newWidth, newHeight) {
|
|
_super.prototype.onSceneBackBufferSizeChanged.call(this, newWidth, newHeight);
|
|
if (!this.camera)
|
|
this.camera = es.Core.scene.createEntity("screenspace camera").addComponent(new es.Camera());
|
|
};
|
|
return ScreenSpaceRenderer;
|
|
}(es.Renderer));
|
|
es.ScreenSpaceRenderer = ScreenSpaceRenderer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PolyLight = (function (_super) {
|
|
__extends(PolyLight, _super);
|
|
function PolyLight(radius, color, power) {
|
|
var _this = _super.call(this) || this;
|
|
_this._indices = [];
|
|
_this.radius = radius;
|
|
_this.power = power;
|
|
_this.color = color;
|
|
_this.computeTriangleIndices();
|
|
return _this;
|
|
}
|
|
Object.defineProperty(PolyLight.prototype, "radius", {
|
|
get: function () {
|
|
return this._radius;
|
|
},
|
|
set: function (value) {
|
|
this.setRadius(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
PolyLight.prototype.setRadius = function (radius) {
|
|
if (radius != this._radius) {
|
|
this._radius = radius;
|
|
this._areBoundsDirty = true;
|
|
}
|
|
};
|
|
PolyLight.prototype.render = function (camera) {
|
|
};
|
|
PolyLight.prototype.reset = function () {
|
|
};
|
|
PolyLight.prototype.computeTriangleIndices = function (totalTris) {
|
|
if (totalTris === void 0) { totalTris = 20; }
|
|
this._indices.length = 0;
|
|
for (var i = 0; i < totalTris; i += 2) {
|
|
this._indices.push(0);
|
|
this._indices.push(i + 2);
|
|
this._indices.push(i + 1);
|
|
}
|
|
};
|
|
return PolyLight;
|
|
}(es.RenderableComponent));
|
|
es.PolyLight = PolyLight;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SceneTransition = (function () {
|
|
function SceneTransition(sceneLoadAction) {
|
|
this.sceneLoadAction = sceneLoadAction;
|
|
this.loadsNewScene = sceneLoadAction != null;
|
|
}
|
|
Object.defineProperty(SceneTransition.prototype, "hasPreviousSceneRender", {
|
|
get: function () {
|
|
if (!this._hasPreviousSceneRender) {
|
|
this._hasPreviousSceneRender = true;
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
SceneTransition.prototype.preRender = function () {
|
|
};
|
|
SceneTransition.prototype.render = function () {
|
|
};
|
|
SceneTransition.prototype.onBeginTransition = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4, this.loadNextScene()];
|
|
case 1:
|
|
_a.sent();
|
|
this.transitionComplete();
|
|
return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
SceneTransition.prototype.tickEffectProgressProperty = function (filter, duration, easeType, reverseDirection) {
|
|
if (reverseDirection === void 0) { reverseDirection = false; }
|
|
return new Promise(function (resolve) {
|
|
var start = reverseDirection ? 1 : 0;
|
|
var end = reverseDirection ? 0 : 1;
|
|
egret.Tween.get(filter.uniforms).set({ _progress: start }).to({ _progress: end }, duration * 1000, easeType).call(function () {
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
SceneTransition.prototype.transitionComplete = function () {
|
|
es.Core._instance._sceneTransition = null;
|
|
if (this.onTransitionCompleted) {
|
|
this.onTransitionCompleted();
|
|
}
|
|
};
|
|
SceneTransition.prototype.loadNextScene = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var _a;
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (this.onScreenObscured)
|
|
this.onScreenObscured();
|
|
if (!this.loadsNewScene) {
|
|
this.isNewSceneLoaded = true;
|
|
}
|
|
_a = es.Core;
|
|
return [4, this.sceneLoadAction()];
|
|
case 1:
|
|
_a.scene = _b.sent();
|
|
this.isNewSceneLoaded = true;
|
|
return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return SceneTransition;
|
|
}());
|
|
es.SceneTransition = SceneTransition;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var FadeTransition = (function (_super) {
|
|
__extends(FadeTransition, _super);
|
|
function FadeTransition(sceneLoadAction) {
|
|
var _this = _super.call(this, sceneLoadAction) || this;
|
|
_this.fadeToColor = 0x000000;
|
|
_this.fadeOutDuration = 0.4;
|
|
_this.fadeEaseType = egret.Ease.quadInOut;
|
|
_this.delayBeforeFadeInDuration = 0.1;
|
|
_this._alpha = 0;
|
|
_this._mask = new egret.Shape();
|
|
return _this;
|
|
}
|
|
FadeTransition.prototype.onBeginTransition = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return __generator(this, function (_a) {
|
|
this._mask.graphics.beginFill(this.fadeToColor, 1);
|
|
this._mask.graphics.drawRect(0, 0, es.Core.graphicsDevice.viewport.width, es.Core.graphicsDevice.viewport.height);
|
|
this._mask.graphics.endFill();
|
|
egret.Tween.get(this).to({ _alpha: 1 }, this.fadeOutDuration * 1000, this.fadeEaseType)
|
|
.call(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4, this.loadNextScene()];
|
|
case 1:
|
|
_a.sent();
|
|
return [2];
|
|
}
|
|
});
|
|
}); }).wait(this.delayBeforeFadeInDuration).call(function () {
|
|
egret.Tween.get(_this).to({ _alpha: 0 }, _this.fadeOutDuration * 1000, _this.fadeEaseType).call(function () {
|
|
_this.transitionComplete();
|
|
});
|
|
});
|
|
return [2];
|
|
});
|
|
});
|
|
};
|
|
FadeTransition.prototype.render = function () {
|
|
this._mask.graphics.clear();
|
|
this._mask.graphics.beginFill(this.fadeToColor, this._alpha);
|
|
this._mask.graphics.drawRect(0, 0, es.Core.graphicsDevice.viewport.width, es.Core.graphicsDevice.viewport.height);
|
|
this._mask.graphics.endFill();
|
|
};
|
|
return FadeTransition;
|
|
}(es.SceneTransition));
|
|
es.FadeTransition = FadeTransition;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var WindTransition = (function (_super) {
|
|
__extends(WindTransition, _super);
|
|
function WindTransition(sceneLoadAction) {
|
|
var _this = _super.call(this, sceneLoadAction) || this;
|
|
_this.duration = 1;
|
|
_this.easeType = egret.Ease.quadOut;
|
|
var vertexSrc = "attribute vec2 aVertexPosition;\n" +
|
|
"attribute vec2 aTextureCoord;\n" +
|
|
"uniform vec2 projectionVector;\n" +
|
|
"varying vec2 vTextureCoord;\n" +
|
|
"const vec2 center = vec2(-1.0, 1.0);\n" +
|
|
"void main(void) {\n" +
|
|
" gl_Position = vec4( (aVertexPosition / projectionVector) + center , 0.0, 1.0);\n" +
|
|
" vTextureCoord = aTextureCoord;\n" +
|
|
"}";
|
|
var fragmentSrc = "precision lowp float;\n" +
|
|
"varying vec2 vTextureCoord;\n" +
|
|
"uniform sampler2D uSampler;\n" +
|
|
"uniform float _progress;\n" +
|
|
"uniform float _size;\n" +
|
|
"uniform float _windSegments;\n" +
|
|
"void main(void) {\n" +
|
|
"vec2 co = floor(vec2(0.0, vTextureCoord.y * _windSegments));\n" +
|
|
"float x = sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453;\n" +
|
|
"float r = x - floor(x);\n" +
|
|
"float m = smoothstep(0.0, -_size, vTextureCoord.x * (1.0 - _size) + _size * r - (_progress * (1.0 + _size)));\n" +
|
|
"vec4 fg = texture2D(uSampler, vTextureCoord);\n" +
|
|
"gl_FragColor = mix(fg, vec4(0, 0, 0, 0), m);\n" +
|
|
"}";
|
|
_this._windEffect = new egret.CustomFilter(vertexSrc, fragmentSrc, {
|
|
_progress: 0,
|
|
_size: 0.3,
|
|
_windSegments: 100
|
|
});
|
|
_this._mask = new egret.Shape();
|
|
_this._mask.graphics.beginFill(0xFFFFFF, 1);
|
|
_this._mask.graphics.drawRect(0, 0, es.Core.graphicsDevice.viewport.width, es.Core.graphicsDevice.viewport.height);
|
|
_this._mask.graphics.endFill();
|
|
_this._mask.filters = [_this._windEffect];
|
|
return _this;
|
|
}
|
|
Object.defineProperty(WindTransition.prototype, "windSegments", {
|
|
set: function (value) {
|
|
this._windEffect.uniforms._windSegments = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(WindTransition.prototype, "size", {
|
|
set: function (value) {
|
|
this._windEffect.uniforms._size = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
WindTransition.prototype.onBeginTransition = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
this.loadNextScene();
|
|
return [4, this.tickEffectProgressProperty(this._windEffect, this.duration, this.easeType)];
|
|
case 1:
|
|
_a.sent();
|
|
this.transitionComplete();
|
|
return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return WindTransition;
|
|
}(es.SceneTransition));
|
|
es.WindTransition = WindTransition;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Bezier = (function () {
|
|
function Bezier() {
|
|
}
|
|
Bezier.getPoint = function (p0, p1, p2, t) {
|
|
t = es.MathHelper.clamp01(t);
|
|
var oneMinusT = 1 - t;
|
|
return es.Vector2.add(es.Vector2.add(es.Vector2.multiply(new es.Vector2(oneMinusT * oneMinusT), p0), es.Vector2.multiply(new es.Vector2(2 * oneMinusT * t), p1)), es.Vector2.multiply(new es.Vector2(t * t), p2));
|
|
};
|
|
Bezier.getFirstDerivative = function (p0, p1, p2, t) {
|
|
return es.Vector2.add(es.Vector2.multiply(new es.Vector2(2 * (1 - t)), es.Vector2.subtract(p1, p0)), es.Vector2.multiply(new es.Vector2(2 * t), es.Vector2.subtract(p2, p1)));
|
|
};
|
|
Bezier.getFirstDerivativeThree = function (start, firstControlPoint, secondControlPoint, end, t) {
|
|
t = es.MathHelper.clamp01(t);
|
|
var oneMunusT = 1 - t;
|
|
return es.Vector2.add(es.Vector2.add(es.Vector2.multiply(new es.Vector2(3 * oneMunusT * oneMunusT), es.Vector2.subtract(firstControlPoint, start)), es.Vector2.multiply(new es.Vector2(6 * oneMunusT * t), es.Vector2.subtract(secondControlPoint, firstControlPoint))), es.Vector2.multiply(new es.Vector2(3 * t * t), es.Vector2.subtract(end, secondControlPoint)));
|
|
};
|
|
Bezier.getPointThree = function (start, firstControlPoint, secondControlPoint, end, t) {
|
|
t = es.MathHelper.clamp01(t);
|
|
var oneMunusT = 1 - t;
|
|
return es.Vector2.add(es.Vector2.add(es.Vector2.add(es.Vector2.multiply(new es.Vector2(oneMunusT * oneMunusT * oneMunusT), start), es.Vector2.multiply(new es.Vector2(3 * oneMunusT * oneMunusT * t), firstControlPoint)), es.Vector2.multiply(new es.Vector2(3 * oneMunusT * t * t), secondControlPoint)), es.Vector2.multiply(new es.Vector2(t * t * t), end));
|
|
};
|
|
Bezier.getOptimizedDrawingPoints = function (start, firstCtrlPoint, secondCtrlPoint, end, distanceTolerance) {
|
|
if (distanceTolerance === void 0) { distanceTolerance = 1; }
|
|
var points = es.ListPool.obtain();
|
|
points.push(start);
|
|
this.recursiveGetOptimizedDrawingPoints(start, firstCtrlPoint, secondCtrlPoint, end, points, distanceTolerance);
|
|
points.push(end);
|
|
return points;
|
|
};
|
|
Bezier.recursiveGetOptimizedDrawingPoints = function (start, firstCtrlPoint, secondCtrlPoint, end, points, distanceTolerance) {
|
|
var pt12 = es.Vector2.divide(es.Vector2.add(start, firstCtrlPoint), new es.Vector2(2));
|
|
var pt23 = es.Vector2.divide(es.Vector2.add(firstCtrlPoint, secondCtrlPoint), new es.Vector2(2));
|
|
var pt34 = es.Vector2.divide(es.Vector2.add(secondCtrlPoint, end), new es.Vector2(2));
|
|
var pt123 = es.Vector2.divide(es.Vector2.add(pt12, pt23), new es.Vector2(2));
|
|
var pt234 = es.Vector2.divide(es.Vector2.add(pt23, pt34), new es.Vector2(2));
|
|
var pt1234 = es.Vector2.divide(es.Vector2.add(pt123, pt234), new es.Vector2(2));
|
|
var deltaLine = es.Vector2.subtract(end, start);
|
|
var d2 = Math.abs(((firstCtrlPoint.x, end.x) * deltaLine.y - (firstCtrlPoint.y - end.y) * deltaLine.x));
|
|
var d3 = Math.abs(((secondCtrlPoint.x - end.x) * deltaLine.y - (secondCtrlPoint.y - end.y) * deltaLine.x));
|
|
if ((d2 + d3) * (d2 + d3) < distanceTolerance * (deltaLine.x * deltaLine.x + deltaLine.y * deltaLine.y)) {
|
|
points.push(pt1234);
|
|
return;
|
|
}
|
|
this.recursiveGetOptimizedDrawingPoints(start, pt12, pt123, pt1234, points, distanceTolerance);
|
|
this.recursiveGetOptimizedDrawingPoints(pt1234, pt234, pt34, end, points, distanceTolerance);
|
|
};
|
|
return Bezier;
|
|
}());
|
|
es.Bezier = Bezier;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Flags = (function () {
|
|
function Flags() {
|
|
}
|
|
Flags.isFlagSet = function (self, flag) {
|
|
return (self & flag) != 0;
|
|
};
|
|
Flags.isUnshiftedFlagSet = function (self, flag) {
|
|
flag = 1 << flag;
|
|
return (self & flag) != 0;
|
|
};
|
|
Flags.setFlagExclusive = function (self, flag) {
|
|
return 1 << flag;
|
|
};
|
|
Flags.setFlag = function (self, flag) {
|
|
return (self | 1 << flag);
|
|
};
|
|
Flags.unsetFlag = function (self, flag) {
|
|
flag = 1 << flag;
|
|
return (self & (~flag));
|
|
};
|
|
Flags.invertFlags = function (self) {
|
|
return ~self;
|
|
};
|
|
return Flags;
|
|
}());
|
|
es.Flags = Flags;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var MathHelper = (function () {
|
|
function MathHelper() {
|
|
}
|
|
MathHelper.toDegrees = function (radians) {
|
|
return radians * 57.295779513082320876798154814105;
|
|
};
|
|
MathHelper.toRadians = function (degrees) {
|
|
return degrees * 0.017453292519943295769236907684886;
|
|
};
|
|
MathHelper.map = function (value, leftMin, leftMax, rightMin, rightMax) {
|
|
return rightMin + (value - leftMin) * (rightMax - rightMin) / (leftMax - leftMin);
|
|
};
|
|
MathHelper.lerp = function (value1, value2, amount) {
|
|
return value1 + (value2 - value1) * amount;
|
|
};
|
|
MathHelper.clamp = function (value, min, max) {
|
|
if (value < min)
|
|
return min;
|
|
if (value > max)
|
|
return max;
|
|
return value;
|
|
};
|
|
MathHelper.pointOnCirlce = function (circleCenter, radius, angleInDegrees) {
|
|
var radians = MathHelper.toRadians(angleInDegrees);
|
|
return new es.Vector2(Math.cos(radians) * radians + circleCenter.x, Math.sin(radians) * radians + circleCenter.y);
|
|
};
|
|
MathHelper.isEven = function (value) {
|
|
return value % 2 == 0;
|
|
};
|
|
MathHelper.clamp01 = function (value) {
|
|
if (value < 0)
|
|
return 0;
|
|
if (value > 1)
|
|
return 1;
|
|
return value;
|
|
};
|
|
MathHelper.angleBetweenVectors = function (from, to) {
|
|
return Math.atan2(to.y - from.y, to.x - from.x);
|
|
};
|
|
MathHelper.incrementWithWrap = function (t, length) {
|
|
t++;
|
|
if (t == length)
|
|
return 0;
|
|
return t;
|
|
};
|
|
MathHelper.approach = function (start, end, shift) {
|
|
if (start < end)
|
|
return Math.min(start + shift, end);
|
|
return Math.max(start - shift, end);
|
|
};
|
|
MathHelper.Epsilon = 0.00001;
|
|
MathHelper.Rad2Deg = 57.29578;
|
|
MathHelper.Deg2Rad = 0.0174532924;
|
|
MathHelper.PiOver2 = Math.PI / 2;
|
|
return MathHelper;
|
|
}());
|
|
es.MathHelper = MathHelper;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
es.matrixPool = [];
|
|
var Matrix2D = (function (_super) {
|
|
__extends(Matrix2D, _super);
|
|
function Matrix2D() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Object.defineProperty(Matrix2D.prototype, "m11", {
|
|
get: function () {
|
|
return this.a;
|
|
},
|
|
set: function (value) {
|
|
this.a = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Matrix2D.prototype, "m12", {
|
|
get: function () {
|
|
return this.b;
|
|
},
|
|
set: function (value) {
|
|
this.b = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Matrix2D.prototype, "m21", {
|
|
get: function () {
|
|
return this.c;
|
|
},
|
|
set: function (value) {
|
|
this.c = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Matrix2D.prototype, "m22", {
|
|
get: function () {
|
|
return this.d;
|
|
},
|
|
set: function (value) {
|
|
this.d = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Matrix2D.prototype, "m31", {
|
|
get: function () {
|
|
return this.tx;
|
|
},
|
|
set: function (value) {
|
|
this.tx = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Matrix2D.prototype, "m32", {
|
|
get: function () {
|
|
return this.ty;
|
|
},
|
|
set: function (value) {
|
|
this.ty = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Matrix2D.create = function () {
|
|
var matrix = es.matrixPool.pop();
|
|
if (!matrix)
|
|
matrix = new Matrix2D();
|
|
return matrix;
|
|
};
|
|
Matrix2D.prototype.identity = function () {
|
|
this.a = this.d = 1;
|
|
this.b = this.c = this.tx = this.ty = 0;
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.translate = function (dx, dy) {
|
|
this.tx += dx;
|
|
this.ty += dy;
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.scale = function (sx, sy) {
|
|
if (sx !== 1) {
|
|
this.a *= sx;
|
|
this.c *= sx;
|
|
this.tx *= sx;
|
|
}
|
|
if (sy !== 1) {
|
|
this.b *= sy;
|
|
this.d *= sy;
|
|
this.ty *= sy;
|
|
}
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.rotate = function (angle) {
|
|
angle = +angle;
|
|
if (angle !== 0) {
|
|
angle = angle / DEG_TO_RAD;
|
|
var u = Math.cos(angle);
|
|
var v = Math.sin(angle);
|
|
var ta = this.a;
|
|
var tb = this.b;
|
|
var tc = this.c;
|
|
var td = this.d;
|
|
var ttx = this.tx;
|
|
var tty = this.ty;
|
|
this.a = ta * u - tb * v;
|
|
this.b = ta * v + tb * u;
|
|
this.c = tc * u - td * v;
|
|
this.d = tc * v + td * u;
|
|
this.tx = ttx * u - tty * v;
|
|
this.ty = ttx * v + tty * u;
|
|
}
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.invert = function () {
|
|
this.$invertInto(this);
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.add = function (matrix) {
|
|
this.m11 += matrix.m11;
|
|
this.m12 += matrix.m12;
|
|
this.m21 += matrix.m21;
|
|
this.m22 += matrix.m22;
|
|
this.m31 += matrix.m31;
|
|
this.m32 += matrix.m32;
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.substract = function (matrix) {
|
|
this.m11 -= matrix.m11;
|
|
this.m12 -= matrix.m12;
|
|
this.m21 -= matrix.m21;
|
|
this.m22 -= matrix.m22;
|
|
this.m31 -= matrix.m31;
|
|
this.m32 -= matrix.m32;
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.divide = function (matrix) {
|
|
this.m11 /= matrix.m11;
|
|
this.m12 /= matrix.m12;
|
|
this.m21 /= matrix.m21;
|
|
this.m22 /= matrix.m22;
|
|
this.m31 /= matrix.m31;
|
|
this.m32 /= matrix.m32;
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.multiply = function (matrix) {
|
|
var m11 = (this.m11 * matrix.m11) + (this.m12 * matrix.m21);
|
|
var m12 = (this.m11 * matrix.m12) + (this.m12 * matrix.m22);
|
|
var m21 = (this.m21 * matrix.m11) + (this.m22 * matrix.m21);
|
|
var m22 = (this.m21 * matrix.m12) + (this.m22 * matrix.m22);
|
|
var m31 = (this.m31 * matrix.m11) + (this.m32 * matrix.m21) + matrix.m31;
|
|
var m32 = (this.m31 * matrix.m12) + (this.m32 * matrix.m22) + matrix.m32;
|
|
this.m11 = m11;
|
|
this.m12 = m12;
|
|
this.m21 = m21;
|
|
this.m22 = m22;
|
|
this.m31 = m31;
|
|
this.m32 = m32;
|
|
return this;
|
|
};
|
|
Matrix2D.prototype.determinant = function () {
|
|
return this.m11 * this.m22 - this.m12 * this.m21;
|
|
};
|
|
Matrix2D.prototype.release = function (matrix) {
|
|
if (!matrix)
|
|
return;
|
|
es.matrixPool.push(matrix);
|
|
};
|
|
return Matrix2D;
|
|
}(egret.Matrix));
|
|
es.Matrix2D = Matrix2D;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Rectangle = (function (_super) {
|
|
__extends(Rectangle, _super);
|
|
function Rectangle() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Object.defineProperty(Rectangle.prototype, "max", {
|
|
get: function () {
|
|
return new es.Vector2(this.right, this.bottom);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Rectangle.prototype, "center", {
|
|
get: function () {
|
|
return new es.Vector2(this.x + (this.width / 2), this.y + (this.height / 2));
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Rectangle.prototype, "location", {
|
|
get: function () {
|
|
return new es.Vector2(this.x, this.y);
|
|
},
|
|
set: function (value) {
|
|
this.x = value.x;
|
|
this.y = value.y;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Rectangle.prototype, "size", {
|
|
get: function () {
|
|
return new es.Vector2(this.width, this.height);
|
|
},
|
|
set: function (value) {
|
|
this.width = value.x;
|
|
this.height = value.y;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Rectangle.fromMinMax = function (minX, minY, maxX, maxY) {
|
|
return new Rectangle(minX, minY, maxX - minX, maxY - minY);
|
|
};
|
|
Rectangle.rectEncompassingPoints = function (points) {
|
|
var minX = Number.POSITIVE_INFINITY;
|
|
var minY = Number.POSITIVE_INFINITY;
|
|
var maxX = Number.NEGATIVE_INFINITY;
|
|
var maxY = Number.NEGATIVE_INFINITY;
|
|
for (var i = 0; i < points.length; i++) {
|
|
var pt = points[i];
|
|
if (pt.x < minX)
|
|
minX = pt.x;
|
|
if (pt.x > maxX)
|
|
maxX = pt.x;
|
|
if (pt.y < minY)
|
|
minY = pt.y;
|
|
if (pt.y > maxY)
|
|
maxY = pt.y;
|
|
}
|
|
return this.fromMinMax(minX, minY, maxX, maxY);
|
|
};
|
|
Rectangle.prototype.intersects = function (value) {
|
|
return value.left < this.right &&
|
|
this.left < value.right &&
|
|
value.top < this.bottom &&
|
|
this.top < value.bottom;
|
|
};
|
|
Rectangle.prototype.rayIntersects = function (ray) {
|
|
var distance = 0;
|
|
var maxValue = Number.MAX_VALUE;
|
|
if (Math.abs(ray.direction.x) < 1E-06) {
|
|
if ((ray.start.x < this.x) || (ray.start.x > this.x + this.width))
|
|
return distance;
|
|
}
|
|
else {
|
|
var num11 = 1 / ray.direction.x;
|
|
var num8 = (this.x - ray.start.x) * num11;
|
|
var num7 = (this.x + this.width - ray.start.x) * num11;
|
|
if (num8 > num7) {
|
|
var num14 = num8;
|
|
num8 = num7;
|
|
num7 = num14;
|
|
}
|
|
distance = Math.max(num8, distance);
|
|
maxValue = Math.min(num7, maxValue);
|
|
if (distance > maxValue)
|
|
return distance;
|
|
}
|
|
if (Math.abs(ray.direction.y) < 1E-06) {
|
|
if ((ray.start.y < this.y) || (ray.start.y > this.y + this.height))
|
|
return distance;
|
|
}
|
|
else {
|
|
var num10 = 1 / ray.direction.y;
|
|
var num6 = (this.y - ray.start.y) * num10;
|
|
var num5 = (this.y + this.height - ray.start.y) * num10;
|
|
if (num6 > num5) {
|
|
var num13 = num6;
|
|
num6 = num5;
|
|
num5 = num13;
|
|
}
|
|
distance = Math.max(num6, distance);
|
|
maxValue = Math.max(num5, maxValue);
|
|
if (distance > maxValue)
|
|
return distance;
|
|
}
|
|
return distance;
|
|
};
|
|
Rectangle.prototype.containsRect = function (value) {
|
|
return ((((this.x <= value.x) && (value.x < (this.x + this.width))) &&
|
|
(this.y <= value.y)) &&
|
|
(value.y < (this.y + this.height)));
|
|
};
|
|
Rectangle.prototype.contains = function (x, y) {
|
|
return ((((this.x <= x) && (x < (this.x + this.width))) && (this.y <= y)) && (y < (this.y + this.height)));
|
|
};
|
|
Rectangle.prototype.getHalfSize = function () {
|
|
return new es.Vector2(this.width * 0.5, this.height * 0.5);
|
|
};
|
|
Rectangle.prototype.getClosestPointOnRectangleBorderToPoint = function (point, edgeNormal) {
|
|
edgeNormal = es.Vector2.zero;
|
|
var res = new es.Vector2();
|
|
res.x = es.MathHelper.clamp(point.x, this.left, this.right);
|
|
res.y = es.MathHelper.clamp(point.y, this.top, this.bottom);
|
|
if (this.contains(res.x, res.y)) {
|
|
var dl = res.x - this.left;
|
|
var dr = this.right - res.x;
|
|
var dt = res.y - this.top;
|
|
var db = this.bottom - res.y;
|
|
var min = Math.min(dl, dr, dt, db);
|
|
if (min == dt) {
|
|
res.y = this.top;
|
|
edgeNormal.y = -1;
|
|
}
|
|
else if (min == db) {
|
|
res.y = this.bottom;
|
|
edgeNormal.y = 1;
|
|
}
|
|
else if (min == dl) {
|
|
res.x = this.left;
|
|
edgeNormal.x = -1;
|
|
}
|
|
else {
|
|
res.x = this.right;
|
|
edgeNormal.x = 1;
|
|
}
|
|
}
|
|
else {
|
|
if (res.x == this.left)
|
|
edgeNormal.x = -1;
|
|
if (res.x == this.right)
|
|
edgeNormal.x = 1;
|
|
if (res.y == this.top)
|
|
edgeNormal.y = -1;
|
|
if (res.y == this.bottom)
|
|
edgeNormal.y = 1;
|
|
}
|
|
return res;
|
|
};
|
|
Rectangle.prototype.getClosestPointOnBoundsToOrigin = function () {
|
|
var max = this.max;
|
|
var minDist = Math.abs(this.location.x);
|
|
var boundsPoint = new es.Vector2(this.location.x, 0);
|
|
if (Math.abs(max.x) < minDist) {
|
|
minDist = Math.abs(max.x);
|
|
boundsPoint.x = max.x;
|
|
boundsPoint.y = 0;
|
|
}
|
|
if (Math.abs(max.y) < minDist) {
|
|
minDist = Math.abs(max.y);
|
|
boundsPoint.x = 0;
|
|
boundsPoint.y = max.y;
|
|
}
|
|
if (Math.abs(this.location.y) < minDist) {
|
|
minDist = Math.abs(this.location.y);
|
|
boundsPoint.x = 0;
|
|
boundsPoint.y = this.location.y;
|
|
}
|
|
return boundsPoint;
|
|
};
|
|
Rectangle.prototype.calculateBounds = function (parentPosition, position, origin, scale, rotation, width, height) {
|
|
if (rotation == 0) {
|
|
this.x = parentPosition.x + position.x - origin.x * scale.x;
|
|
this.y = parentPosition.y + position.y - origin.y * scale.y;
|
|
this.width = width * scale.x;
|
|
this.height = height * scale.y;
|
|
}
|
|
else {
|
|
var worldPosX = parentPosition.x + position.x;
|
|
var worldPosY = parentPosition.y + position.y;
|
|
this._transformMat = es.Matrix2D.create().translate(-worldPosX - origin.x, -worldPosY - origin.y);
|
|
this._tempMat = es.Matrix2D.create().scale(scale.x, scale.y);
|
|
this._transformMat = this._transformMat.multiply(this._tempMat);
|
|
this._tempMat = es.Matrix2D.create().rotate(rotation);
|
|
this._transformMat = this._transformMat.multiply(this._tempMat);
|
|
this._tempMat = es.Matrix2D.create().translate(worldPosX, worldPosY);
|
|
this._transformMat = this._transformMat.multiply(this._tempMat);
|
|
var topLeft = new es.Vector2(worldPosX, worldPosY);
|
|
var topRight = new es.Vector2(worldPosX + width, worldPosY);
|
|
var bottomLeft = new es.Vector2(worldPosX, worldPosY + height);
|
|
var bottomRight = new es.Vector2(worldPosX + width, worldPosY + height);
|
|
topLeft = es.Vector2Ext.transformR(topLeft, this._transformMat);
|
|
topRight = es.Vector2Ext.transformR(topRight, this._transformMat);
|
|
bottomLeft = es.Vector2Ext.transformR(bottomLeft, this._transformMat);
|
|
bottomRight = es.Vector2Ext.transformR(bottomRight, this._transformMat);
|
|
var minX = Math.min(topLeft.x, bottomRight.x, topRight.x, bottomLeft.x);
|
|
var maxX = Math.max(topLeft.x, bottomRight.x, topRight.x, bottomLeft.x);
|
|
var minY = Math.min(topLeft.y, bottomRight.y, topRight.y, bottomLeft.y);
|
|
var maxY = Math.max(topLeft.y, bottomRight.y, topRight.y, bottomLeft.y);
|
|
this.location = new es.Vector2(minX, minY);
|
|
this.width = maxX - minX;
|
|
this.height = maxY - minY;
|
|
}
|
|
};
|
|
return Rectangle;
|
|
}(egret.Rectangle));
|
|
es.Rectangle = Rectangle;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SubpixelFloat = (function () {
|
|
function SubpixelFloat() {
|
|
this.remainder = 0;
|
|
}
|
|
SubpixelFloat.prototype.update = function (amount) {
|
|
this.remainder += amount;
|
|
var motion = Math.trunc(this.remainder);
|
|
this.remainder -= motion;
|
|
amount = motion;
|
|
return amount;
|
|
};
|
|
SubpixelFloat.prototype.reset = function () {
|
|
this.remainder = 0;
|
|
};
|
|
return SubpixelFloat;
|
|
}());
|
|
es.SubpixelFloat = SubpixelFloat;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SubpixelVector2 = (function () {
|
|
function SubpixelVector2() {
|
|
this._x = new es.SubpixelFloat();
|
|
this._y = new es.SubpixelFloat();
|
|
}
|
|
SubpixelVector2.prototype.update = function (amount) {
|
|
amount.x = this._x.update(amount.x);
|
|
amount.y = this._y.update(amount.y);
|
|
};
|
|
SubpixelVector2.prototype.reset = function () {
|
|
this._x.reset();
|
|
this._y.reset();
|
|
};
|
|
return SubpixelVector2;
|
|
}());
|
|
es.SubpixelVector2 = SubpixelVector2;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Vector3 = (function () {
|
|
function Vector3(x, y, z) {
|
|
this.x = x;
|
|
this.y = y;
|
|
this.z = z;
|
|
}
|
|
return Vector3;
|
|
}());
|
|
es.Vector3 = Vector3;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ColliderTriggerHelper = (function () {
|
|
function ColliderTriggerHelper(entity) {
|
|
this._activeTriggerIntersections = [];
|
|
this._previousTriggerIntersections = [];
|
|
this._tempTriggerList = [];
|
|
this._entity = entity;
|
|
}
|
|
ColliderTriggerHelper.prototype.update = function () {
|
|
var colliders = this._entity.getComponents(es.Collider);
|
|
for (var i = 0; i < colliders.length; i++) {
|
|
var collider = colliders[i];
|
|
var neighbors = es.Physics.boxcastBroadphase(collider.bounds, collider.collidesWithLayers);
|
|
var _loop_6 = function (j) {
|
|
var neighbor = neighbors[j];
|
|
if (!collider.isTrigger && !neighbor.isTrigger)
|
|
return "continue";
|
|
if (collider.overlaps(neighbor)) {
|
|
var pair_1 = new es.Pair(collider, neighbor);
|
|
var shouldReportTriggerEvent = this_2._activeTriggerIntersections.findIndex(function (value) {
|
|
return value.first == pair_1.first && value.second == pair_1.second;
|
|
}) == -1 && this_2._previousTriggerIntersections.findIndex(function (value) {
|
|
return value.first == pair_1.first && value.second == pair_1.second;
|
|
}) == -1;
|
|
if (shouldReportTriggerEvent)
|
|
this_2.notifyTriggerListeners(pair_1, true);
|
|
if (!this_2._activeTriggerIntersections.contains(pair_1))
|
|
this_2._activeTriggerIntersections.push(pair_1);
|
|
}
|
|
};
|
|
var this_2 = this;
|
|
for (var j = 0; j < neighbors.length; j++) {
|
|
_loop_6(j);
|
|
}
|
|
}
|
|
es.ListPool.free(colliders);
|
|
this.checkForExitedColliders();
|
|
};
|
|
ColliderTriggerHelper.prototype.checkForExitedColliders = function () {
|
|
var _this = this;
|
|
var _loop_7 = function (i) {
|
|
var index = this_3._previousTriggerIntersections.findIndex(function (value) {
|
|
if (value.first == _this._activeTriggerIntersections[i].first && value.second == _this._activeTriggerIntersections[i].second)
|
|
return true;
|
|
return false;
|
|
});
|
|
if (index != -1)
|
|
this_3._previousTriggerIntersections.removeAt(index);
|
|
};
|
|
var this_3 = this;
|
|
for (var i = 0; i < this._activeTriggerIntersections.length; i++) {
|
|
_loop_7(i);
|
|
}
|
|
for (var i = 0; i < this._previousTriggerIntersections.length; i++) {
|
|
this.notifyTriggerListeners(this._previousTriggerIntersections[i], false);
|
|
}
|
|
this._previousTriggerIntersections.length = 0;
|
|
for (var i = 0; i < this._activeTriggerIntersections.length; i++) {
|
|
if (!this._previousTriggerIntersections.contains(this._activeTriggerIntersections[i])) {
|
|
this._previousTriggerIntersections.push(this._activeTriggerIntersections[i]);
|
|
}
|
|
}
|
|
this._activeTriggerIntersections.length = 0;
|
|
};
|
|
ColliderTriggerHelper.prototype.notifyTriggerListeners = function (collisionPair, isEntering) {
|
|
collisionPair.first.entity.getComponents("ITriggerListener", this._tempTriggerList);
|
|
for (var i = 0; i < this._tempTriggerList.length; i++) {
|
|
if (isEntering) {
|
|
this._tempTriggerList[i].onTriggerEnter(collisionPair.second, collisionPair.first);
|
|
}
|
|
else {
|
|
this._tempTriggerList[i].onTriggerExit(collisionPair.second, collisionPair.first);
|
|
}
|
|
this._tempTriggerList.length = 0;
|
|
if (collisionPair.second.entity) {
|
|
collisionPair.second.entity.getComponents("ITriggerListener", this._tempTriggerList);
|
|
for (var i_2 = 0; i_2 < this._tempTriggerList.length; i_2++) {
|
|
if (isEntering) {
|
|
this._tempTriggerList[i_2].onTriggerEnter(collisionPair.first, collisionPair.second);
|
|
}
|
|
else {
|
|
this._tempTriggerList[i_2].onTriggerExit(collisionPair.first, collisionPair.second);
|
|
}
|
|
}
|
|
this._tempTriggerList.length = 0;
|
|
}
|
|
}
|
|
};
|
|
return ColliderTriggerHelper;
|
|
}());
|
|
es.ColliderTriggerHelper = ColliderTriggerHelper;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var PointSectors;
|
|
(function (PointSectors) {
|
|
PointSectors[PointSectors["center"] = 0] = "center";
|
|
PointSectors[PointSectors["top"] = 1] = "top";
|
|
PointSectors[PointSectors["bottom"] = 2] = "bottom";
|
|
PointSectors[PointSectors["topLeft"] = 9] = "topLeft";
|
|
PointSectors[PointSectors["topRight"] = 5] = "topRight";
|
|
PointSectors[PointSectors["left"] = 8] = "left";
|
|
PointSectors[PointSectors["right"] = 4] = "right";
|
|
PointSectors[PointSectors["bottomLeft"] = 10] = "bottomLeft";
|
|
PointSectors[PointSectors["bottomRight"] = 6] = "bottomRight";
|
|
})(PointSectors = es.PointSectors || (es.PointSectors = {}));
|
|
var Collisions = (function () {
|
|
function Collisions() {
|
|
}
|
|
Collisions.isLineToLine = function (a1, a2, b1, b2) {
|
|
var b = es.Vector2.subtract(a2, a1);
|
|
var d = es.Vector2.subtract(b2, b1);
|
|
var bDotDPerp = b.x * d.y - b.y * d.x;
|
|
if (bDotDPerp == 0)
|
|
return false;
|
|
var c = es.Vector2.subtract(b1, a1);
|
|
var t = (c.x * d.y - c.y * d.x) / bDotDPerp;
|
|
if (t < 0 || t > 1)
|
|
return false;
|
|
var u = (c.x * b.y - c.y * b.x) / bDotDPerp;
|
|
if (u < 0 || u > 1)
|
|
return false;
|
|
return true;
|
|
};
|
|
Collisions.lineToLineIntersection = function (a1, a2, b1, b2) {
|
|
var intersection = new es.Vector2(0, 0);
|
|
var b = es.Vector2.subtract(a2, a1);
|
|
var d = es.Vector2.subtract(b2, b1);
|
|
var bDotDPerp = b.x * d.y - b.y * d.x;
|
|
if (bDotDPerp == 0)
|
|
return intersection;
|
|
var c = es.Vector2.subtract(b1, a1);
|
|
var t = (c.x * d.y - c.y * d.x) / bDotDPerp;
|
|
if (t < 0 || t > 1)
|
|
return intersection;
|
|
var u = (c.x * b.y - c.y * b.x) / bDotDPerp;
|
|
if (u < 0 || u > 1)
|
|
return intersection;
|
|
intersection = es.Vector2.add(a1, new es.Vector2(t * b.x, t * b.y));
|
|
return intersection;
|
|
};
|
|
Collisions.closestPointOnLine = function (lineA, lineB, closestTo) {
|
|
var v = es.Vector2.subtract(lineB, lineA);
|
|
var w = es.Vector2.subtract(closestTo, lineA);
|
|
var t = es.Vector2.dot(w, v) / es.Vector2.dot(v, v);
|
|
t = es.MathHelper.clamp(t, 0, 1);
|
|
return es.Vector2.add(lineA, new es.Vector2(v.x * t, v.y * t));
|
|
};
|
|
Collisions.isCircleToCircle = function (circleCenter1, circleRadius1, circleCenter2, circleRadius2) {
|
|
return es.Vector2.distanceSquared(circleCenter1, circleCenter2) < (circleRadius1 + circleRadius2) * (circleRadius1 + circleRadius2);
|
|
};
|
|
Collisions.isCircleToLine = function (circleCenter, radius, lineFrom, lineTo) {
|
|
return es.Vector2.distanceSquared(circleCenter, this.closestPointOnLine(lineFrom, lineTo, circleCenter)) < radius * radius;
|
|
};
|
|
Collisions.isCircleToPoint = function (circleCenter, radius, point) {
|
|
return es.Vector2.distanceSquared(circleCenter, point) < radius * radius;
|
|
};
|
|
Collisions.isRectToCircle = function (rect, cPosition, cRadius) {
|
|
var ew = rect.width * 0.5;
|
|
var eh = rect.height * 0.5;
|
|
var vx = Math.max(0, Math.max(cPosition.x - rect.x) - ew);
|
|
var vy = Math.max(0, Math.max(cPosition.y - rect.y) - eh);
|
|
return vx * vx + vy * vy < cRadius * cRadius;
|
|
};
|
|
Collisions.isRectToLine = function (rect, lineFrom, lineTo) {
|
|
var fromSector = this.getSector(rect.x, rect.y, rect.width, rect.height, lineFrom);
|
|
var toSector = this.getSector(rect.x, rect.y, rect.width, rect.height, lineTo);
|
|
if (fromSector == PointSectors.center || toSector == PointSectors.center) {
|
|
return true;
|
|
}
|
|
else if ((fromSector & toSector) != 0) {
|
|
return false;
|
|
}
|
|
else {
|
|
var both = fromSector | toSector;
|
|
var edgeFrom = void 0;
|
|
var edgeTo = void 0;
|
|
if ((both & PointSectors.top) != 0) {
|
|
edgeFrom = new es.Vector2(rect.x, rect.y);
|
|
edgeTo = new es.Vector2(rect.x + rect.width, rect.y);
|
|
if (this.isLineToLine(edgeFrom, edgeTo, lineFrom, lineTo))
|
|
return true;
|
|
}
|
|
if ((both & PointSectors.bottom) != 0) {
|
|
edgeFrom = new es.Vector2(rect.x, rect.y + rect.height);
|
|
edgeTo = new es.Vector2(rect.x + rect.width, rect.y + rect.height);
|
|
if (this.isLineToLine(edgeFrom, edgeTo, lineFrom, lineTo))
|
|
return true;
|
|
}
|
|
if ((both & PointSectors.left) != 0) {
|
|
edgeFrom = new es.Vector2(rect.x, rect.y);
|
|
edgeTo = new es.Vector2(rect.x, rect.y + rect.height);
|
|
if (this.isLineToLine(edgeFrom, edgeTo, lineFrom, lineTo))
|
|
return true;
|
|
}
|
|
if ((both & PointSectors.right) != 0) {
|
|
edgeFrom = new es.Vector2(rect.x + rect.width, rect.y);
|
|
edgeTo = new es.Vector2(rect.x + rect.width, rect.y + rect.height);
|
|
if (this.isLineToLine(edgeFrom, edgeTo, lineFrom, lineTo))
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
Collisions.isRectToPoint = function (rX, rY, rW, rH, point) {
|
|
return point.x >= rX && point.y >= rY && point.x < rX + rW && point.y < rY + rH;
|
|
};
|
|
Collisions.getSector = function (rX, rY, rW, rH, point) {
|
|
var sector = PointSectors.center;
|
|
if (point.x < rX)
|
|
sector |= PointSectors.left;
|
|
else if (point.x >= rX + rW)
|
|
sector |= PointSectors.right;
|
|
if (point.y < rY)
|
|
sector |= PointSectors.top;
|
|
else if (point.y >= rY + rH)
|
|
sector |= PointSectors.bottom;
|
|
return sector;
|
|
};
|
|
return Collisions;
|
|
}());
|
|
es.Collisions = Collisions;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var RaycastHit = (function () {
|
|
function RaycastHit(collider, fraction, distance, point, normal) {
|
|
this.fraction = 0;
|
|
this.distance = 0;
|
|
this.point = es.Vector2.zero;
|
|
this.normal = es.Vector2.zero;
|
|
this.collider = collider;
|
|
this.fraction = fraction;
|
|
this.distance = distance;
|
|
this.point = point;
|
|
this.centroid = es.Vector2.zero;
|
|
}
|
|
RaycastHit.prototype.setValues = function (collider, fraction, distance, point) {
|
|
this.collider = collider;
|
|
this.fraction = fraction;
|
|
this.distance = distance;
|
|
this.point = point;
|
|
};
|
|
RaycastHit.prototype.setValuesNonCollider = function (fraction, distance, point, normal) {
|
|
this.fraction = fraction;
|
|
this.distance = distance;
|
|
this.point = point;
|
|
this.normal = normal;
|
|
};
|
|
RaycastHit.prototype.reset = function () {
|
|
this.collider = null;
|
|
this.fraction = this.distance = 0;
|
|
};
|
|
RaycastHit.prototype.toString = function () {
|
|
return "[RaycastHit] fraction: " + this.fraction + ", distance: " + this.distance + ", normal: " + this.normal + ", centroid: " + this.centroid + ", point: " + this.point;
|
|
};
|
|
return RaycastHit;
|
|
}());
|
|
es.RaycastHit = RaycastHit;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Physics = (function () {
|
|
function Physics() {
|
|
}
|
|
Physics.reset = function () {
|
|
this._spatialHash = new es.SpatialHash(this.spatialHashCellSize);
|
|
};
|
|
Physics.clear = function () {
|
|
this._spatialHash.clear();
|
|
};
|
|
Physics.overlapCircleAll = function (center, randius, results, layerMask) {
|
|
if (layerMask === void 0) { layerMask = -1; }
|
|
if (results.length == 0) {
|
|
console.error("An empty results array was passed in. No results will ever be returned.");
|
|
return;
|
|
}
|
|
return this._spatialHash.overlapCircle(center, randius, results, layerMask);
|
|
};
|
|
Physics.boxcastBroadphase = function (rect, layerMask) {
|
|
if (layerMask === void 0) { layerMask = this.allLayers; }
|
|
return this._spatialHash.aabbBroadphase(rect, null, layerMask);
|
|
};
|
|
Physics.boxcastBroadphaseExcludingSelf = function (collider, rect, layerMask) {
|
|
if (layerMask === void 0) { layerMask = this.allLayers; }
|
|
return this._spatialHash.aabbBroadphase(rect, collider, layerMask);
|
|
};
|
|
Physics.addCollider = function (collider) {
|
|
Physics._spatialHash.register(collider);
|
|
};
|
|
Physics.removeCollider = function (collider) {
|
|
Physics._spatialHash.remove(collider);
|
|
};
|
|
Physics.updateCollider = function (collider) {
|
|
this._spatialHash.remove(collider);
|
|
this._spatialHash.register(collider);
|
|
};
|
|
Physics.linecast = function (start, end, layerMask) {
|
|
if (layerMask === void 0) { layerMask = Physics.allLayers; }
|
|
this._hitArray[0].reset();
|
|
this.linecastAll(start, end, this._hitArray, layerMask);
|
|
return this._hitArray[0];
|
|
};
|
|
Physics.linecastAll = function (start, end, hits, layerMask) {
|
|
if (layerMask === void 0) { layerMask = Physics.allLayers; }
|
|
if (hits.length == 0) {
|
|
console.warn("传入了一个空的hits数组。没有点击会被返回");
|
|
return 0;
|
|
}
|
|
return this._spatialHash.linecast(start, end, hits, layerMask);
|
|
};
|
|
Physics.debugDraw = function (secondsToDisplay) {
|
|
this._spatialHash.debugDraw(secondsToDisplay, 2);
|
|
};
|
|
Physics.spatialHashCellSize = 100;
|
|
Physics.allLayers = -1;
|
|
Physics.raycastsHitTriggers = false;
|
|
Physics.raycastsStartInColliders = false;
|
|
Physics._hitArray = [
|
|
new es.RaycastHit()
|
|
];
|
|
return Physics;
|
|
}());
|
|
es.Physics = Physics;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Ray2D = (function () {
|
|
function Ray2D(position, end) {
|
|
this.start = position;
|
|
this.end = end;
|
|
this.direction = es.Vector2.subtract(this.end, this.start);
|
|
}
|
|
return Ray2D;
|
|
}());
|
|
es.Ray2D = Ray2D;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Shape = (function () {
|
|
function Shape() {
|
|
}
|
|
Shape.prototype.clone = function () {
|
|
return ObjectUtils.clone(this);
|
|
};
|
|
return Shape;
|
|
}());
|
|
es.Shape = Shape;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Polygon = (function (_super) {
|
|
__extends(Polygon, _super);
|
|
function Polygon(points, isBox) {
|
|
var _this = _super.call(this) || this;
|
|
_this._areEdgeNormalsDirty = true;
|
|
_this.isUnrotated = true;
|
|
_this.setPoints(points);
|
|
_this.isBox = isBox;
|
|
return _this;
|
|
}
|
|
Object.defineProperty(Polygon.prototype, "edgeNormals", {
|
|
get: function () {
|
|
if (this._areEdgeNormalsDirty)
|
|
this.buildEdgeNormals();
|
|
return this._edgeNormals;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Polygon.prototype.setPoints = function (points) {
|
|
this.points = points;
|
|
this.recalculateCenterAndEdgeNormals();
|
|
this._originalPoints = [];
|
|
for (var i = 0; i < this.points.length; i++) {
|
|
this._originalPoints.push(this.points[i]);
|
|
}
|
|
};
|
|
Polygon.prototype.recalculateCenterAndEdgeNormals = function () {
|
|
this._polygonCenter = Polygon.findPolygonCenter(this.points);
|
|
this._areEdgeNormalsDirty = true;
|
|
};
|
|
Polygon.prototype.buildEdgeNormals = function () {
|
|
var totalEdges = this.isBox ? 2 : this.points.length;
|
|
if (this._edgeNormals == null || this._edgeNormals.length != totalEdges)
|
|
this._edgeNormals = new Array(totalEdges);
|
|
var p2;
|
|
for (var i = 0; i < totalEdges; i++) {
|
|
var p1 = this.points[i];
|
|
if (i + 1 >= this.points.length)
|
|
p2 = this.points[0];
|
|
else
|
|
p2 = this.points[i + 1];
|
|
var perp = es.Vector2Ext.perpendicular(p1, p2);
|
|
perp = es.Vector2.normalize(perp);
|
|
this._edgeNormals[i] = perp;
|
|
}
|
|
};
|
|
Polygon.buildSymmetricalPolygon = function (vertCount, radius) {
|
|
var verts = new Array(vertCount);
|
|
for (var i = 0; i < vertCount; i++) {
|
|
var a = 2 * Math.PI * (i / vertCount);
|
|
verts[i] = es.Vector2.multiply(new es.Vector2(Math.cos(a), Math.sin(a)), new es.Vector2(radius));
|
|
}
|
|
return verts;
|
|
};
|
|
Polygon.recenterPolygonVerts = function (points) {
|
|
var center = this.findPolygonCenter(points);
|
|
for (var i = 0; i < points.length; i++)
|
|
points[i] = es.Vector2.subtract(points[i], center);
|
|
};
|
|
Polygon.findPolygonCenter = function (points) {
|
|
var x = 0, y = 0;
|
|
for (var i = 0; i < points.length; i++) {
|
|
x += points[i].x;
|
|
y += points[i].y;
|
|
}
|
|
return new es.Vector2(x / points.length, y / points.length);
|
|
};
|
|
Polygon.getFarthestPointInDirection = function (points, direction) {
|
|
var index = 0;
|
|
var maxDot = es.Vector2.dot(points[index], direction);
|
|
for (var i = 1; i < points.length; i++) {
|
|
var dot = es.Vector2.dot(points[i], direction);
|
|
if (dot > maxDot) {
|
|
maxDot = dot;
|
|
index = i;
|
|
}
|
|
}
|
|
return points[index];
|
|
};
|
|
Polygon.getClosestPointOnPolygonToPoint = function (points, point, distanceSquared, edgeNormal) {
|
|
distanceSquared = Number.MAX_VALUE;
|
|
edgeNormal = new es.Vector2(0, 0);
|
|
var closestPoint = new es.Vector2(0, 0);
|
|
var tempDistanceSquared;
|
|
for (var i = 0; i < points.length; i++) {
|
|
var j = i + 1;
|
|
if (j == points.length)
|
|
j = 0;
|
|
var closest = es.ShapeCollisions.closestPointOnLine(points[i], points[j], point);
|
|
tempDistanceSquared = es.Vector2.distanceSquared(point, closest);
|
|
if (tempDistanceSquared < distanceSquared) {
|
|
distanceSquared = tempDistanceSquared;
|
|
closestPoint = closest;
|
|
var line = es.Vector2.subtract(points[j], points[i]);
|
|
edgeNormal = new es.Vector2(-line.y, line.x);
|
|
}
|
|
}
|
|
es.Vector2Ext.normalize(edgeNormal);
|
|
return closestPoint;
|
|
};
|
|
Polygon.rotatePolygonVerts = function (radians, originalPoints, rotatedPoints) {
|
|
var cos = Math.cos(radians);
|
|
var sin = Math.sign(radians);
|
|
for (var i = 0; i < originalPoints.length; i++) {
|
|
var position = originalPoints[i];
|
|
rotatedPoints[i] = new es.Vector2(position.x * cos + position.y * -sin, position.x * sin + position.y * cos);
|
|
}
|
|
};
|
|
Polygon.prototype.recalculateBounds = function (collider) {
|
|
this.center = collider.localOffset;
|
|
if (collider.shouldColliderScaleAndRotateWithTransform) {
|
|
var hasUnitScale = true;
|
|
var tempMat = void 0;
|
|
var combinedMatrix = es.Matrix2D.create().translate(-this._polygonCenter.x, -this._polygonCenter.y);
|
|
if (collider.entity.transform.scale != es.Vector2.zero) {
|
|
tempMat = es.Matrix2D.create().scale(collider.entity.transform.scale.x, collider.entity.transform.scale.y);
|
|
combinedMatrix = combinedMatrix.multiply(tempMat);
|
|
hasUnitScale = false;
|
|
this.center = es.Vector2.multiply(collider.localOffset, collider.entity.transform.scale);
|
|
}
|
|
if (collider.entity.transform.rotation != 0) {
|
|
tempMat = es.Matrix2D.create().rotate(collider.entity.transform.rotation);
|
|
combinedMatrix = combinedMatrix.multiply(tempMat);
|
|
var offsetAngle = Math.atan2(collider.localOffset.y, collider.localOffset.x) * es.MathHelper.Rad2Deg;
|
|
var offsetLength = hasUnitScale ? collider._localOffsetLength :
|
|
es.Vector2.multiply(collider.localOffset, collider.entity.transform.scale).length();
|
|
this.center = es.MathHelper.pointOnCirlce(es.Vector2.zero, offsetLength, collider.entity.transform.rotation + offsetAngle);
|
|
}
|
|
tempMat = es.Matrix2D.create().translate(this._polygonCenter.x, this._polygonCenter.y);
|
|
combinedMatrix = combinedMatrix.multiply(tempMat);
|
|
es.Vector2Ext.transform(this._originalPoints, combinedMatrix, this.points);
|
|
this.isUnrotated = collider.entity.transform.rotation == 0;
|
|
if (collider._isRotationDirty)
|
|
this._areEdgeNormalsDirty = true;
|
|
}
|
|
this.position = es.Vector2.add(collider.entity.transform.position, this.center);
|
|
this.bounds = es.Rectangle.rectEncompassingPoints(this.points);
|
|
this.bounds.location = this.bounds.location.add(this.position);
|
|
};
|
|
Polygon.prototype.overlaps = function (other) {
|
|
var result = new es.CollisionResult();
|
|
if (other instanceof Polygon)
|
|
return es.ShapeCollisions.polygonToPolygon(this, other, result);
|
|
if (other instanceof es.Circle) {
|
|
if (es.ShapeCollisions.circleToPolygon(other, this, result)) {
|
|
result.invertResult();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
throw new Error("overlaps of Pologon to " + other + " are not supported");
|
|
};
|
|
Polygon.prototype.collidesWithShape = function (other, result) {
|
|
if (other instanceof Polygon) {
|
|
return es.ShapeCollisions.polygonToPolygon(this, other, result);
|
|
}
|
|
if (other instanceof es.Circle) {
|
|
if (es.ShapeCollisions.circleToPolygon(other, this, result)) {
|
|
result.invertResult();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
throw new Error("overlaps of Polygon to " + other + " are not supported");
|
|
};
|
|
Polygon.prototype.collidesWithLine = function (start, end, hit) {
|
|
return es.ShapeCollisions.lineToPoly(start, end, this, hit);
|
|
};
|
|
Polygon.prototype.containsPoint = function (point) {
|
|
point = es.Vector2.subtract(point, this.position);
|
|
var isInside = false;
|
|
for (var i = 0, j = this.points.length - 1; i < this.points.length; j = i++) {
|
|
if (((this.points[i].y > point.y) != (this.points[j].y > point.y)) &&
|
|
(point.x < (this.points[j].x - this.points[i].x) * (point.y - this.points[i].y) / (this.points[j].y - this.points[i].y) +
|
|
this.points[i].x)) {
|
|
isInside = !isInside;
|
|
}
|
|
}
|
|
return isInside;
|
|
};
|
|
Polygon.prototype.pointCollidesWithShape = function (point, result) {
|
|
return es.ShapeCollisions.pointToPoly(point, this, result);
|
|
};
|
|
return Polygon;
|
|
}(es.Shape));
|
|
es.Polygon = Polygon;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Box = (function (_super) {
|
|
__extends(Box, _super);
|
|
function Box(width, height) {
|
|
var _this = _super.call(this, Box.buildBox(width, height), true) || this;
|
|
_this.width = width;
|
|
_this.height = height;
|
|
return _this;
|
|
}
|
|
Box.buildBox = function (width, height) {
|
|
var halfWidth = width / 2;
|
|
var halfHeight = height / 2;
|
|
var verts = new Array(4);
|
|
verts[0] = new es.Vector2(-halfWidth, -halfHeight);
|
|
verts[1] = new es.Vector2(halfWidth, -halfHeight);
|
|
verts[2] = new es.Vector2(halfWidth, halfHeight);
|
|
verts[3] = new es.Vector2(-halfWidth, halfHeight);
|
|
return verts;
|
|
};
|
|
Box.prototype.updateBox = function (width, height) {
|
|
this.width = width;
|
|
this.height = height;
|
|
var halfWidth = width / 2;
|
|
var halfHeight = height / 2;
|
|
this.points[0] = new es.Vector2(-halfWidth, -halfHeight);
|
|
this.points[1] = new es.Vector2(halfWidth, -halfHeight);
|
|
this.points[2] = new es.Vector2(halfWidth, halfHeight);
|
|
this.points[3] = new es.Vector2(-halfWidth, halfHeight);
|
|
for (var i = 0; i < this.points.length; i++)
|
|
this._originalPoints[i] = this.points[i];
|
|
};
|
|
Box.prototype.overlaps = function (other) {
|
|
if (this.isUnrotated) {
|
|
if (other instanceof Box && other.isUnrotated)
|
|
return this.bounds.intersects(other.bounds);
|
|
if (other instanceof es.Circle)
|
|
return es.Collisions.isRectToCircle(this.bounds, other.position, other.radius);
|
|
}
|
|
return _super.prototype.overlaps.call(this, other);
|
|
};
|
|
Box.prototype.collidesWithShape = function (other, result) {
|
|
if (other instanceof Box && other.isUnrotated) {
|
|
return es.ShapeCollisions.boxToBox(this, other, result);
|
|
}
|
|
return _super.prototype.collidesWithShape.call(this, other, result);
|
|
};
|
|
Box.prototype.containsPoint = function (point) {
|
|
if (this.isUnrotated)
|
|
return this.bounds.contains(point.x, point.y);
|
|
return _super.prototype.containsPoint.call(this, point);
|
|
};
|
|
Box.prototype.pointCollidesWithShape = function (point, result) {
|
|
if (this.isUnrotated)
|
|
return es.ShapeCollisions.pointToBox(point, this, result);
|
|
return _super.prototype.pointCollidesWithShape.call(this, point, result);
|
|
};
|
|
return Box;
|
|
}(es.Polygon));
|
|
es.Box = Box;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Circle = (function (_super) {
|
|
__extends(Circle, _super);
|
|
function Circle(radius) {
|
|
var _this = _super.call(this) || this;
|
|
_this.radius = radius;
|
|
_this._originalRadius = radius;
|
|
return _this;
|
|
}
|
|
Circle.prototype.recalculateBounds = function (collider) {
|
|
this.center = collider.localOffset;
|
|
if (collider.shouldColliderScaleAndRotateWithTransform) {
|
|
var scale = collider.entity.transform.scale;
|
|
var hasUnitScale = scale.x == 1 && scale.y == 1;
|
|
var maxScale = Math.max(scale.x, scale.y);
|
|
this.radius = this._originalRadius * maxScale;
|
|
if (collider.entity.transform.rotation != 0) {
|
|
var offsetAngle = Math.atan2(collider.localOffset.y, collider.localOffset.x) * es.MathHelper.Rad2Deg;
|
|
var offsetLength = hasUnitScale ? collider._localOffsetLength : es.Vector2.multiply(collider.localOffset, collider.entity.transform.scale).length();
|
|
this.center = es.MathHelper.pointOnCirlce(es.Vector2.zero, offsetLength, collider.entity.transform.rotation + offsetAngle);
|
|
}
|
|
}
|
|
this.position = es.Vector2.add(collider.transform.position, this.center);
|
|
this.bounds = new es.Rectangle(this.position.x - this.radius, this.position.y - this.radius, this.radius * 2, this.radius * 2);
|
|
};
|
|
Circle.prototype.overlaps = function (other) {
|
|
var result = new es.CollisionResult();
|
|
if (other instanceof es.Box && other.isUnrotated)
|
|
return es.Collisions.isRectToCircle(other.bounds, this.position, this.radius);
|
|
if (other instanceof Circle)
|
|
return es.Collisions.isCircleToCircle(this.position, this.radius, other.position, other.radius);
|
|
if (other instanceof es.Polygon)
|
|
return es.ShapeCollisions.circleToPolygon(this, other, result);
|
|
throw new Error("overlaps of circle to " + other + " are not supported");
|
|
};
|
|
Circle.prototype.collidesWithShape = function (other, result) {
|
|
if (other instanceof es.Box && other.isUnrotated) {
|
|
return es.ShapeCollisions.circleToBox(this, other, result);
|
|
}
|
|
if (other instanceof Circle) {
|
|
return es.ShapeCollisions.circleToCircle(this, other, result);
|
|
}
|
|
if (other instanceof es.Polygon) {
|
|
return es.ShapeCollisions.circleToPolygon(this, other, result);
|
|
}
|
|
throw new Error("Collisions of Circle to " + other + " are not supported");
|
|
};
|
|
Circle.prototype.collidesWithLine = function (start, end, hit) {
|
|
return es.ShapeCollisions.lineToCircle(start, end, this, hit);
|
|
};
|
|
Circle.prototype.containsPoint = function (point) {
|
|
return (es.Vector2.subtract(point, this.position)).lengthSquared() <= this.radius * this.radius;
|
|
};
|
|
Circle.prototype.pointCollidesWithShape = function (point, result) {
|
|
return es.ShapeCollisions.pointToCircle(point, this, result);
|
|
};
|
|
return Circle;
|
|
}(es.Shape));
|
|
es.Circle = Circle;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var CollisionResult = (function () {
|
|
function CollisionResult() {
|
|
this.normal = es.Vector2.zero;
|
|
this.minimumTranslationVector = es.Vector2.zero;
|
|
this.point = es.Vector2.zero;
|
|
}
|
|
CollisionResult.prototype.removeHorizontal = function (deltaMovement) {
|
|
if (Math.sign(this.normal.x) != Math.sign(deltaMovement.x) || (deltaMovement.x == 0 && this.normal.x != 0)) {
|
|
var responseDistance = this.minimumTranslationVector.length();
|
|
var fix = responseDistance / this.normal.y;
|
|
if (Math.abs(this.normal.x) != 1 && Math.abs(fix) < Math.abs(deltaMovement.y * 3)) {
|
|
this.minimumTranslationVector = new es.Vector2(0, -fix);
|
|
}
|
|
}
|
|
};
|
|
CollisionResult.prototype.invertResult = function () {
|
|
this.minimumTranslationVector = es.Vector2.negate(this.minimumTranslationVector);
|
|
this.normal = es.Vector2.negate(this.normal);
|
|
return this;
|
|
};
|
|
CollisionResult.prototype.toString = function () {
|
|
return "[CollisionResult] normal: " + this.normal + ", minimumTranslationVector: " + this.minimumTranslationVector;
|
|
};
|
|
return CollisionResult;
|
|
}());
|
|
es.CollisionResult = CollisionResult;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var RealtimeCollisions = (function () {
|
|
function RealtimeCollisions() {
|
|
}
|
|
RealtimeCollisions.intersectMovingCircleToBox = function (s, b, movement) {
|
|
var e = b.bounds;
|
|
e.inflate(s.radius, s.radius);
|
|
var ray = new es.Ray2D(es.Vector2.subtract(s.position, movement), s.position);
|
|
var time = e.rayIntersects(ray);
|
|
if (time > 1)
|
|
return time;
|
|
var point = es.Vector2.add(ray.start, es.Vector2.add(ray.direction, new es.Vector2(time)));
|
|
var u, v = 0;
|
|
if (point.x < b.bounds.left)
|
|
u |= 1;
|
|
if (point.x > b.bounds.right)
|
|
v |= 1;
|
|
if (point.y < b.bounds.top)
|
|
u |= 2;
|
|
if (point.y > b.bounds.bottom)
|
|
v |= 2;
|
|
var m = u + v;
|
|
if (m == 3) {
|
|
console.log("m == 3. corner " + es.Time.frameCount);
|
|
}
|
|
if ((m & (m - 1)) == 0) {
|
|
return time;
|
|
}
|
|
return time;
|
|
};
|
|
return RealtimeCollisions;
|
|
}());
|
|
es.RealtimeCollisions = RealtimeCollisions;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ShapeCollisions = (function () {
|
|
function ShapeCollisions() {
|
|
}
|
|
ShapeCollisions.polygonToPolygon = function (first, second, result) {
|
|
var isIntersecting = true;
|
|
var firstEdges = first.edgeNormals;
|
|
var secondEdges = second.edgeNormals;
|
|
var minIntervalDistance = Number.POSITIVE_INFINITY;
|
|
var translationAxis = new es.Vector2();
|
|
var polygonOffset = es.Vector2.subtract(first.position, second.position);
|
|
var axis;
|
|
for (var edgeIndex = 0; edgeIndex < firstEdges.length + secondEdges.length; edgeIndex++) {
|
|
if (edgeIndex < firstEdges.length) {
|
|
axis = firstEdges[edgeIndex];
|
|
}
|
|
else {
|
|
axis = secondEdges[edgeIndex - firstEdges.length];
|
|
}
|
|
var minA = 0;
|
|
var minB = 0;
|
|
var maxA = 0;
|
|
var maxB = 0;
|
|
var intervalDist = 0;
|
|
var ta = this.getInterval(axis, first, minA, maxA);
|
|
minA = ta.min;
|
|
minB = ta.max;
|
|
var tb = this.getInterval(axis, second, minB, maxB);
|
|
minB = tb.min;
|
|
maxB = tb.max;
|
|
var relativeIntervalOffset = es.Vector2.dot(polygonOffset, axis);
|
|
minA += relativeIntervalOffset;
|
|
maxA += relativeIntervalOffset;
|
|
intervalDist = this.intervalDistance(minA, maxA, minB, maxB);
|
|
if (intervalDist > 0)
|
|
isIntersecting = false;
|
|
if (!isIntersecting)
|
|
return false;
|
|
intervalDist = Math.abs(intervalDist);
|
|
if (intervalDist < minIntervalDistance) {
|
|
minIntervalDistance = intervalDist;
|
|
translationAxis = axis;
|
|
if (es.Vector2.dot(translationAxis, polygonOffset) < 0)
|
|
translationAxis = new es.Vector2(-translationAxis);
|
|
}
|
|
}
|
|
result.normal = translationAxis;
|
|
result.minimumTranslationVector = es.Vector2.multiply(new es.Vector2(-translationAxis.x, -translationAxis.y), new es.Vector2(minIntervalDistance));
|
|
return true;
|
|
};
|
|
ShapeCollisions.intervalDistance = function (minA, maxA, minB, maxB) {
|
|
if (minA < minB)
|
|
return minB - maxA;
|
|
return minA - minB;
|
|
};
|
|
ShapeCollisions.getInterval = function (axis, polygon, min, max) {
|
|
var dot = es.Vector2.dot(polygon.points[0], axis);
|
|
min = max = dot;
|
|
for (var i = 1; i < polygon.points.length; i++) {
|
|
dot = es.Vector2.dot(polygon.points[i], axis);
|
|
if (dot < min) {
|
|
min = dot;
|
|
}
|
|
else if (dot > max) {
|
|
max = dot;
|
|
}
|
|
}
|
|
return { min: min, max: max };
|
|
};
|
|
ShapeCollisions.circleToPolygon = function (circle, polygon, result) {
|
|
var poly2Circle = es.Vector2.subtract(circle.position, polygon.position);
|
|
var distanceSquared = 0;
|
|
var closestPoint = es.Polygon.getClosestPointOnPolygonToPoint(polygon.points, poly2Circle, distanceSquared, result.normal);
|
|
var circleCenterInsidePoly = polygon.containsPoint(circle.position);
|
|
if (distanceSquared > circle.radius * circle.radius && !circleCenterInsidePoly)
|
|
return false;
|
|
var mtv;
|
|
if (circleCenterInsidePoly) {
|
|
mtv = es.Vector2.multiply(result.normal, new es.Vector2(Math.sqrt(distanceSquared) - circle.radius));
|
|
}
|
|
else {
|
|
if (distanceSquared == 0) {
|
|
mtv = es.Vector2.multiply(result.normal, new es.Vector2(circle.radius));
|
|
}
|
|
else {
|
|
var distance = Math.sqrt(distanceSquared);
|
|
mtv = es.Vector2.multiply(new es.Vector2(-es.Vector2.subtract(poly2Circle, closestPoint)), new es.Vector2((circle.radius - distanceSquared) / distance));
|
|
}
|
|
}
|
|
result.minimumTranslationVector = mtv;
|
|
result.point = es.Vector2.add(closestPoint, polygon.position);
|
|
return true;
|
|
};
|
|
ShapeCollisions.circleToBox = function (circle, box, result) {
|
|
var closestPointOnBounds = box.bounds.getClosestPointOnRectangleBorderToPoint(circle.position, result.normal);
|
|
if (box.containsPoint(circle.position)) {
|
|
result.point = closestPointOnBounds;
|
|
var safePlace = es.Vector2.add(closestPointOnBounds, es.Vector2.multiply(result.normal, new es.Vector2(circle.radius)));
|
|
result.minimumTranslationVector = es.Vector2.subtract(circle.position, safePlace);
|
|
return true;
|
|
}
|
|
var sqrDistance = es.Vector2.distanceSquared(closestPointOnBounds, circle.position);
|
|
if (sqrDistance == 0) {
|
|
result.minimumTranslationVector = es.Vector2.multiply(result.normal, new es.Vector2(circle.radius));
|
|
}
|
|
else if (sqrDistance <= circle.radius * circle.radius) {
|
|
result.normal = es.Vector2.subtract(circle.position, closestPointOnBounds);
|
|
var depth = result.normal.length() - circle.radius;
|
|
result.point = closestPointOnBounds;
|
|
result.normal = es.Vector2Ext.normalize(result.normal);
|
|
result.minimumTranslationVector = es.Vector2.multiply(new es.Vector2(depth), result.normal);
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.pointToCircle = function (point, circle, result) {
|
|
var distanceSquared = es.Vector2.distanceSquared(point, circle.position);
|
|
var sumOfRadii = 1 + circle.radius;
|
|
var collided = distanceSquared < sumOfRadii * sumOfRadii;
|
|
if (collided) {
|
|
result.normal = es.Vector2.normalize(es.Vector2.subtract(point, circle.position));
|
|
var depth = sumOfRadii - Math.sqrt(distanceSquared);
|
|
result.minimumTranslationVector = es.Vector2.multiply(new es.Vector2(-depth, -depth), result.normal);
|
|
result.point = es.Vector2.add(circle.position, es.Vector2.multiply(result.normal, new es.Vector2(circle.radius, circle.radius)));
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.pointToBox = function (point, box, result) {
|
|
if (box.containsPoint(point)) {
|
|
result.point = box.bounds.getClosestPointOnRectangleBorderToPoint(point, result.normal);
|
|
result.minimumTranslationVector = es.Vector2.subtract(point, result.point);
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.closestPointOnLine = function (lineA, lineB, closestTo) {
|
|
var v = es.Vector2.subtract(lineB, lineA);
|
|
var w = es.Vector2.subtract(closestTo, lineA);
|
|
var t = es.Vector2.dot(w, v) / es.Vector2.dot(v, v);
|
|
t = es.MathHelper.clamp(t, 0, 1);
|
|
return es.Vector2.add(lineA, es.Vector2.multiply(v, new es.Vector2(t, t)));
|
|
};
|
|
ShapeCollisions.pointToPoly = function (point, poly, result) {
|
|
if (poly.containsPoint(point)) {
|
|
var distanceSquared = 0;
|
|
var closestPoint = es.Polygon.getClosestPointOnPolygonToPoint(poly.points, es.Vector2.subtract(point, poly.position), distanceSquared, result.normal);
|
|
result.minimumTranslationVector = es.Vector2.multiply(result.normal, new es.Vector2(Math.sqrt(distanceSquared), Math.sqrt(distanceSquared)));
|
|
result.point = es.Vector2.add(closestPoint, poly.position);
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.circleToCircle = function (first, second, result) {
|
|
var distanceSquared = es.Vector2.distanceSquared(first.position, second.position);
|
|
var sumOfRadii = first.radius + second.radius;
|
|
var collided = distanceSquared < sumOfRadii * sumOfRadii;
|
|
if (collided) {
|
|
result.normal = es.Vector2.normalize(es.Vector2.subtract(first.position, second.position));
|
|
var depth = sumOfRadii - Math.sqrt(distanceSquared);
|
|
result.minimumTranslationVector = es.Vector2.multiply(new es.Vector2(-depth), result.normal);
|
|
result.point = es.Vector2.add(second.position, es.Vector2.multiply(result.normal, new es.Vector2(second.radius)));
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.boxToBox = function (first, second, result) {
|
|
var minkowskiDiff = this.minkowskiDifference(first, second);
|
|
if (minkowskiDiff.contains(0, 0)) {
|
|
result.minimumTranslationVector = minkowskiDiff.getClosestPointOnBoundsToOrigin();
|
|
if (result.minimumTranslationVector.equals(es.Vector2.zero))
|
|
return false;
|
|
result.normal = new es.Vector2(-result.minimumTranslationVector.x, -result.minimumTranslationVector.y);
|
|
result.normal = result.normal.normalize();
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.minkowskiDifference = function (first, second) {
|
|
var positionOffset = es.Vector2.subtract(first.position, es.Vector2.add(first.bounds.location, es.Vector2.divide(first.bounds.size, new es.Vector2(2))));
|
|
var topLeft = es.Vector2.subtract(es.Vector2.add(first.bounds.location, positionOffset), second.bounds.max);
|
|
var fullSize = es.Vector2.add(first.bounds.size, second.bounds.size);
|
|
return new es.Rectangle(topLeft.x, topLeft.y, fullSize.x, fullSize.y);
|
|
};
|
|
ShapeCollisions.lineToPoly = function (start, end, polygon, hit) {
|
|
var normal = es.Vector2.zero;
|
|
var intersectionPoint = es.Vector2.zero;
|
|
var fraction = Number.MAX_VALUE;
|
|
var hasIntersection = false;
|
|
for (var j = polygon.points.length - 1, i = 0; i < polygon.points.length; j = i, i++) {
|
|
var edge1 = es.Vector2.add(polygon.position, polygon.points[j]);
|
|
var edge2 = es.Vector2.add(polygon.position, polygon.points[i]);
|
|
var intersection = es.Vector2.zero;
|
|
if (this.lineToLine(edge1, edge2, start, end, intersection)) {
|
|
hasIntersection = true;
|
|
var distanceFraction = (intersection.x - start.x) / (end.x - start.x);
|
|
if (Number.isNaN(distanceFraction) || Number.isFinite(distanceFraction))
|
|
distanceFraction = (intersection.y - start.y) / (end.y - start.y);
|
|
if (distanceFraction < fraction) {
|
|
var edge = es.Vector2.subtract(edge2, edge1);
|
|
normal = new es.Vector2(edge.y, -edge.x);
|
|
fraction = distanceFraction;
|
|
intersectionPoint = intersection;
|
|
}
|
|
}
|
|
}
|
|
if (hasIntersection) {
|
|
normal = normal.normalize();
|
|
var distance = es.Vector2.distance(start, intersectionPoint);
|
|
hit.setValuesNonCollider(fraction, distance, intersectionPoint, normal);
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
ShapeCollisions.lineToLine = function (a1, a2, b1, b2, intersection) {
|
|
var b = es.Vector2.subtract(a2, a1);
|
|
var d = es.Vector2.subtract(b2, b1);
|
|
var bDotDPerp = b.x * d.y - b.y * d.x;
|
|
if (bDotDPerp == 0)
|
|
return false;
|
|
var c = es.Vector2.subtract(b1, a1);
|
|
var t = (c.x * d.y - c.y * d.x) / bDotDPerp;
|
|
if (t < 0 || t > 1)
|
|
return false;
|
|
var u = (c.x * b.y - c.y * b.x) / bDotDPerp;
|
|
if (u < 0 || u > 1)
|
|
return false;
|
|
intersection = intersection.add(a1).add(es.Vector2.multiply(new es.Vector2(t), b));
|
|
return true;
|
|
};
|
|
ShapeCollisions.lineToCircle = function (start, end, s, hit) {
|
|
var lineLength = es.Vector2.distance(start, end);
|
|
var d = es.Vector2.divide(es.Vector2.subtract(end, start), new es.Vector2(lineLength));
|
|
var m = es.Vector2.subtract(start, s.position);
|
|
var b = es.Vector2.dot(m, d);
|
|
var c = es.Vector2.dot(m, m) - s.radius * s.radius;
|
|
if (c > 0 && b > 0)
|
|
return false;
|
|
var discr = b * b - c;
|
|
if (discr < 0)
|
|
return false;
|
|
hit.fraction = -b - Math.sqrt(discr);
|
|
if (hit.fraction < 0)
|
|
hit.fraction = 0;
|
|
hit.point = es.Vector2.add(start, es.Vector2.multiply(new es.Vector2(hit.fraction), d));
|
|
hit.distance = es.Vector2.distance(start, hit.point);
|
|
hit.normal = es.Vector2.normalize(es.Vector2.subtract(hit.point, s.position));
|
|
hit.fraction = hit.distance / lineLength;
|
|
return true;
|
|
};
|
|
ShapeCollisions.boxToBoxCast = function (first, second, movement, hit) {
|
|
var minkowskiDiff = this.minkowskiDifference(first, second);
|
|
if (minkowskiDiff.contains(0, 0)) {
|
|
var mtv = minkowskiDiff.getClosestPointOnBoundsToOrigin();
|
|
if (mtv.equals(es.Vector2.zero))
|
|
return false;
|
|
hit.normal = new es.Vector2(-mtv.x);
|
|
hit.normal = hit.normal.normalize();
|
|
hit.distance = 0;
|
|
hit.fraction = 0;
|
|
return true;
|
|
}
|
|
else {
|
|
var ray = new es.Ray2D(es.Vector2.zero, new es.Vector2(-movement.x));
|
|
var fraction = minkowskiDiff.rayIntersects(ray);
|
|
if (fraction <= 1) {
|
|
hit.fraction = fraction;
|
|
hit.distance = movement.length() * fraction;
|
|
hit.normal = new es.Vector2(-movement.x);
|
|
hit.normal = hit.normal.normalize();
|
|
hit.centroid = es.Vector2.add(first.bounds.center, es.Vector2.multiply(movement, new es.Vector2(fraction)));
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
return ShapeCollisions;
|
|
}());
|
|
es.ShapeCollisions = ShapeCollisions;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SpatialHash = (function () {
|
|
function SpatialHash(cellSize) {
|
|
if (cellSize === void 0) { cellSize = 100; }
|
|
this.gridBounds = new es.Rectangle();
|
|
this._overlapTestCircle = new es.Circle(0);
|
|
this._cellDict = new NumberDictionary();
|
|
this._tempHashSet = [];
|
|
this._cellSize = cellSize;
|
|
this._inverseCellSize = 1 / this._cellSize;
|
|
this._raycastParser = new RaycastResultParser();
|
|
}
|
|
SpatialHash.prototype.register = function (collider) {
|
|
var bounds = collider.bounds;
|
|
collider.registeredPhysicsBounds = bounds;
|
|
var p1 = this.cellCoords(bounds.x, bounds.y);
|
|
var p2 = this.cellCoords(bounds.right, bounds.bottom);
|
|
if (!this.gridBounds.contains(p1.x, p1.y)) {
|
|
this.gridBounds = es.RectangleExt.union(this.gridBounds, p1);
|
|
}
|
|
if (!this.gridBounds.contains(p2.x, p2.y)) {
|
|
this.gridBounds = es.RectangleExt.union(this.gridBounds, p2);
|
|
}
|
|
for (var x = p1.x; x <= p2.x; x++) {
|
|
for (var y = p1.y; y <= p2.y; y++) {
|
|
var c = this.cellAtPosition(x, y, true);
|
|
if (!c.firstOrDefault(function (c) { return c.hashCode == collider.hashCode; }))
|
|
c.push(collider);
|
|
}
|
|
}
|
|
};
|
|
SpatialHash.prototype.remove = function (collider) {
|
|
var bounds = collider.registeredPhysicsBounds;
|
|
var p1 = this.cellCoords(bounds.x, bounds.y);
|
|
var p2 = this.cellCoords(bounds.right, bounds.bottom);
|
|
for (var x = p1.x; x <= p2.x; x++) {
|
|
for (var y = p1.y; y <= p2.y; y++) {
|
|
var cell = this.cellAtPosition(x, y);
|
|
if (!cell)
|
|
console.log("\u4ECE\u4E0D\u5B58\u5728\u78B0\u649E\u5668\u7684\u5355\u5143\u683C\u4E2D\u79FB\u9664\u78B0\u649E\u5668: [" + collider + "]");
|
|
else
|
|
cell.remove(collider);
|
|
}
|
|
}
|
|
};
|
|
SpatialHash.prototype.removeWithBruteForce = function (obj) {
|
|
this._cellDict.remove(obj);
|
|
};
|
|
SpatialHash.prototype.clear = function () {
|
|
this._cellDict.clear();
|
|
};
|
|
SpatialHash.prototype.debugDraw = function (secondsToDisplay, textScale) {
|
|
if (textScale === void 0) { textScale = 1; }
|
|
for (var x = this.gridBounds.x; x <= this.gridBounds.right; x++) {
|
|
for (var y = this.gridBounds.y; y <= this.gridBounds.bottom; y++) {
|
|
var cell = this.cellAtPosition(x, y);
|
|
if (cell && cell.length > 0)
|
|
this.debugDrawCellDetails(x, y, cell.length, secondsToDisplay, textScale);
|
|
}
|
|
}
|
|
};
|
|
SpatialHash.prototype.aabbBroadphase = function (bounds, excludeCollider, layerMask) {
|
|
this._tempHashSet.length = 0;
|
|
var p1 = this.cellCoords(bounds.x, bounds.y);
|
|
var p2 = this.cellCoords(bounds.right, bounds.bottom);
|
|
for (var x = p1.x; x <= p2.x; x++) {
|
|
for (var y = p1.y; y <= p2.y; y++) {
|
|
var cell = this.cellAtPosition(x, y);
|
|
if (!cell)
|
|
continue;
|
|
var _loop_8 = function (i) {
|
|
var collider = cell[i];
|
|
if (collider == excludeCollider || !es.Flags.isFlagSet(layerMask, collider.physicsLayer))
|
|
return "continue";
|
|
if (bounds.intersects(collider.bounds)) {
|
|
if (!this_4._tempHashSet.firstOrDefault(function (c) { return c.hashCode == collider.hashCode; }))
|
|
this_4._tempHashSet.push(collider);
|
|
}
|
|
};
|
|
var this_4 = this;
|
|
for (var i = 0; i < cell.length; i++) {
|
|
_loop_8(i);
|
|
}
|
|
}
|
|
}
|
|
return this._tempHashSet;
|
|
};
|
|
SpatialHash.prototype.linecast = function (start, end, hits, layerMask) {
|
|
var ray = new es.Ray2D(start, end);
|
|
this._raycastParser.start(ray, hits, layerMask);
|
|
var currentCell = this.cellCoords(start.x, start.y);
|
|
var lastCell = this.cellCoords(end.x, end.y);
|
|
var stepX = Math.sign(ray.direction.x);
|
|
var stepY = Math.sign(ray.direction.y);
|
|
if (currentCell.x == lastCell.x)
|
|
stepX = 0;
|
|
if (currentCell.y == lastCell.y)
|
|
stepY = 0;
|
|
var xStep = stepX < 0 ? 0 : stepX;
|
|
var yStep = stepY < 0 ? 0 : stepY;
|
|
var nextBoundaryX = (currentCell.x + xStep) * this._cellSize;
|
|
var nextBoundaryY = (currentCell.y + yStep) * this._cellSize;
|
|
var tMaxX = ray.direction.x != 0 ? (nextBoundaryX - ray.start.x) / ray.direction.x : Number.MAX_VALUE;
|
|
var tMaxY = ray.direction.y != 0 ? (nextBoundaryY - ray.start.y) / ray.direction.y : Number.MAX_VALUE;
|
|
var tDeltaX = ray.direction.x != 0 ? this._cellSize / (ray.direction.x * stepX) : Number.MAX_VALUE;
|
|
var tDeltaY = ray.direction.y != 0 ? this._cellSize / (ray.direction.y * stepY) : Number.MAX_VALUE;
|
|
var cell = this.cellAtPosition(currentCell.x, currentCell.y);
|
|
if (cell && this._raycastParser.checkRayIntersection(currentCell.x, currentCell.y, cell)) {
|
|
this._raycastParser.reset();
|
|
return this._raycastParser.hitCounter;
|
|
}
|
|
while (currentCell.x != lastCell.x || currentCell.y != lastCell.y) {
|
|
if (tMaxX < tMaxY) {
|
|
currentCell.x = es.MathHelper.approach(currentCell.x, lastCell.x, Math.abs(stepX));
|
|
tMaxX += tDeltaX;
|
|
}
|
|
else {
|
|
currentCell.y = es.MathHelper.approach(currentCell.y, lastCell.y, Math.abs(stepY));
|
|
tMaxY += tDeltaY;
|
|
}
|
|
cell = this.cellAtPosition(currentCell.x, currentCell.y);
|
|
if (cell && this._raycastParser.checkRayIntersection(currentCell.x, currentCell.y, cell)) {
|
|
this._raycastParser.reset();
|
|
return this._raycastParser.hitCounter;
|
|
}
|
|
}
|
|
this._raycastParser.reset();
|
|
return this._raycastParser.hitCounter;
|
|
};
|
|
SpatialHash.prototype.overlapCircle = function (circleCenter, radius, results, layerMask) {
|
|
var bounds = new es.Rectangle(circleCenter.x - radius, circleCenter.y - radius, radius * 2, radius * 2);
|
|
this._overlapTestCircle.radius = radius;
|
|
this._overlapTestCircle.position = circleCenter;
|
|
var resultCounter = 0;
|
|
var potentials = this.aabbBroadphase(bounds, null, layerMask);
|
|
for (var i = 0; i < potentials.length; i++) {
|
|
var collider = potentials[i];
|
|
if (collider instanceof es.BoxCollider) {
|
|
results[resultCounter] = collider;
|
|
resultCounter++;
|
|
}
|
|
else if (collider instanceof es.CircleCollider) {
|
|
if (collider.shape.overlaps(this._overlapTestCircle)) {
|
|
results[resultCounter] = collider;
|
|
resultCounter++;
|
|
}
|
|
}
|
|
else if (collider instanceof es.PolygonCollider) {
|
|
if (collider.shape.overlaps(this._overlapTestCircle)) {
|
|
results[resultCounter] = collider;
|
|
resultCounter++;
|
|
}
|
|
}
|
|
else {
|
|
throw new Error("overlapCircle against this collider type is not implemented!");
|
|
}
|
|
if (resultCounter == results.length)
|
|
return resultCounter;
|
|
}
|
|
return resultCounter;
|
|
};
|
|
SpatialHash.prototype.cellCoords = function (x, y) {
|
|
return new es.Vector2(Math.floor(x * this._inverseCellSize), Math.floor(y * this._inverseCellSize));
|
|
};
|
|
SpatialHash.prototype.cellAtPosition = function (x, y, createCellIfEmpty) {
|
|
if (createCellIfEmpty === void 0) { createCellIfEmpty = false; }
|
|
var cell = this._cellDict.tryGetValue(x, y);
|
|
if (!cell) {
|
|
if (createCellIfEmpty) {
|
|
cell = [];
|
|
this._cellDict.add(x, y, cell);
|
|
}
|
|
}
|
|
return cell;
|
|
};
|
|
SpatialHash.prototype.debugDrawCellDetails = function (x, y, cellCount, secondsToDisplay, textScale) {
|
|
if (secondsToDisplay === void 0) { secondsToDisplay = 0.5; }
|
|
if (textScale === void 0) { textScale = 1; }
|
|
};
|
|
return SpatialHash;
|
|
}());
|
|
es.SpatialHash = SpatialHash;
|
|
var NumberDictionary = (function () {
|
|
function NumberDictionary() {
|
|
this._store = new Map();
|
|
}
|
|
NumberDictionary.prototype.add = function (x, y, list) {
|
|
this._store.set(this.getKey(x, y), list);
|
|
};
|
|
NumberDictionary.prototype.remove = function (obj) {
|
|
this._store.forEach(function (list) {
|
|
if (list.contains(obj))
|
|
list.remove(obj);
|
|
});
|
|
};
|
|
NumberDictionary.prototype.tryGetValue = function (x, y) {
|
|
return this._store.get(this.getKey(x, y));
|
|
};
|
|
NumberDictionary.prototype.clear = function () {
|
|
this._store.clear();
|
|
};
|
|
NumberDictionary.prototype.getKey = function (x, y) {
|
|
return Long.fromNumber(x).shiftLeft(32).or(Long.fromNumber(y, true)).toString();
|
|
};
|
|
return NumberDictionary;
|
|
}());
|
|
es.NumberDictionary = NumberDictionary;
|
|
var RaycastResultParser = (function () {
|
|
function RaycastResultParser() {
|
|
this._tempHit = new es.RaycastHit();
|
|
this._checkedColliders = [];
|
|
this._cellHits = [];
|
|
}
|
|
RaycastResultParser.prototype.start = function (ray, hits, layerMask) {
|
|
this._ray = ray;
|
|
this._hits = hits;
|
|
this._layerMask = layerMask;
|
|
this.hitCounter = 0;
|
|
};
|
|
RaycastResultParser.prototype.checkRayIntersection = function (cellX, cellY, cell) {
|
|
var fraction = 0;
|
|
for (var i = 0; i < cell.length; i++) {
|
|
var potential = cell[i];
|
|
if (this._checkedColliders.contains(potential))
|
|
continue;
|
|
this._checkedColliders.push(potential);
|
|
if (potential.isTrigger && !es.Physics.raycastsHitTriggers)
|
|
continue;
|
|
if (!es.Flags.isFlagSet(this._layerMask, potential.physicsLayer))
|
|
continue;
|
|
var colliderBounds = potential.bounds;
|
|
var fraction_1 = colliderBounds.rayIntersects(this._ray);
|
|
if (fraction_1 <= 1) {
|
|
if (potential.shape.collidesWithLine(this._ray.start, this._ray.end, this._tempHit)) {
|
|
if (!es.Physics.raycastsStartInColliders && potential.shape.containsPoint(this._ray.start))
|
|
continue;
|
|
this._tempHit.collider = potential;
|
|
this._cellHits.push(this._tempHit);
|
|
}
|
|
}
|
|
}
|
|
if (this._cellHits.length == 0)
|
|
return false;
|
|
this._cellHits.sort(RaycastResultParser.compareRaycastHits);
|
|
for (var i = 0; i < this._cellHits.length; i++) {
|
|
this._hits[this.hitCounter] = this._cellHits[i];
|
|
this.hitCounter++;
|
|
if (this.hitCounter == this._hits.length)
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
RaycastResultParser.prototype.reset = function () {
|
|
this._hits = null;
|
|
this._checkedColliders.length = 0;
|
|
this._cellHits.length = 0;
|
|
};
|
|
RaycastResultParser.compareRaycastHits = function (a, b) {
|
|
return a.distance - b.distance;
|
|
};
|
|
return RaycastResultParser;
|
|
}());
|
|
es.RaycastResultParser = RaycastResultParser;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxGroup = (function () {
|
|
function TmxGroup() {
|
|
}
|
|
return TmxGroup;
|
|
}());
|
|
es.TmxGroup = TmxGroup;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxImageLayer = (function () {
|
|
function TmxImageLayer() {
|
|
}
|
|
return TmxImageLayer;
|
|
}());
|
|
es.TmxImageLayer = TmxImageLayer;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxLayer = (function () {
|
|
function TmxLayer() {
|
|
}
|
|
Object.defineProperty(TmxLayer.prototype, "offset", {
|
|
get: function () {
|
|
return new es.Vector2(this.offsetX, this.offsetY);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TmxLayer.prototype.getTileWithGid = function (gid) {
|
|
for (var i = 0; i < this.tiles.length; i++) {
|
|
if (this.tiles[i] && this.tiles[i].gid == gid)
|
|
return this.tiles[i];
|
|
}
|
|
return null;
|
|
};
|
|
TmxLayer.prototype.getTile = function (x, y) {
|
|
return this.tiles[x + y * this.width];
|
|
};
|
|
TmxLayer.prototype.getCollisionRectangles = function () {
|
|
var checkedIndexes = [];
|
|
var rectangles = [];
|
|
var startCol = -1;
|
|
var index = -1;
|
|
for (var y = 0; y < this.map.height; y++) {
|
|
for (var x = 0; x < this.map.width; x++) {
|
|
index = y * this.map.width + x;
|
|
var tile = this.getTile(x, y);
|
|
if (tile && !checkedIndexes[index]) {
|
|
if (startCol < 0)
|
|
startCol = x;
|
|
checkedIndexes[index] = true;
|
|
}
|
|
else if (tile || checkedIndexes[index]) {
|
|
if (startCol >= 0) {
|
|
rectangles.push(this.findBoundsRect(startCol, x, y, checkedIndexes));
|
|
startCol = -1;
|
|
}
|
|
}
|
|
}
|
|
if (startCol >= 0) {
|
|
rectangles.push(this.findBoundsRect(startCol, this.map.width, y, checkedIndexes));
|
|
startCol = -1;
|
|
}
|
|
}
|
|
return rectangles;
|
|
};
|
|
TmxLayer.prototype.findBoundsRect = function (startX, endX, startY, checkedIndexes) {
|
|
var index = -1;
|
|
for (var y = startY + 1; y < this.map.height; y++) {
|
|
for (var x = startX; x < endX; x++) {
|
|
index = y * this.map.width + x;
|
|
var tile = this.getTile(x, y);
|
|
if (tile || checkedIndexes[index]) {
|
|
for (var _x = startX; _x < x; _x++) {
|
|
index = y * this.map.width + _x;
|
|
checkedIndexes[index] = false;
|
|
}
|
|
return new es.Rectangle(startX * this.map.tileWidth, startY * this.map.tileHeight, (endX - startX) * this.map.tileWidth, (y - startY) * this.map.tileHeight);
|
|
}
|
|
checkedIndexes[index] = true;
|
|
}
|
|
}
|
|
return new es.Rectangle(startX * this.map.tileWidth, startY * this.map.tileHeight, (endX - startX) * this.map.tileWidth, (this.map.height - startY) * this.map.tileHeight);
|
|
};
|
|
return TmxLayer;
|
|
}());
|
|
es.TmxLayer = TmxLayer;
|
|
var TmxLayerTile = (function () {
|
|
function TmxLayerTile(map, id, x, y) {
|
|
this.x = x;
|
|
this.y = y;
|
|
var rawGid = id;
|
|
var flip;
|
|
flip = (rawGid & TmxLayerTile.FLIPPED_HORIZONTALLY_FLAG) != 0;
|
|
this.horizontalFlip = flip;
|
|
flip = (rawGid & TmxLayerTile.FLIPPED_VERTICALLY_FLAG) != 0;
|
|
this.verticalFlip = flip;
|
|
rawGid &= ~(TmxLayerTile.FLIPPED_HORIZONTALLY_FLAG | TmxLayerTile.FLIPPED_VERTICALLY_FLAG);
|
|
this.gid = rawGid;
|
|
this.tileset = map.getTilesetForTileGid(this.gid);
|
|
}
|
|
Object.defineProperty(TmxLayerTile.prototype, "position", {
|
|
get: function () {
|
|
return new es.Vector2(this.x, this.y);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TmxLayerTile.prototype, "tilesetTile", {
|
|
get: function () {
|
|
if (this._tilesetTileIndex == undefined) {
|
|
this._tilesetTileIndex = -1;
|
|
if (this.tileset.firstGid <= this.gid) {
|
|
var tilesetTile = this.tileset.tiles.get(this.gid - this.tileset.firstGid);
|
|
if (tilesetTile) {
|
|
this._tilesetTileIndex = this.gid - this.tileset.firstGid;
|
|
}
|
|
}
|
|
}
|
|
if (this._tilesetTileIndex < 0)
|
|
return null;
|
|
return this.tileset.tiles.get(this._tilesetTileIndex);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TmxLayerTile.FLIPPED_HORIZONTALLY_FLAG = 0x80000000;
|
|
TmxLayerTile.FLIPPED_VERTICALLY_FLAG = 0x40000000;
|
|
return TmxLayerTile;
|
|
}());
|
|
es.TmxLayerTile = TmxLayerTile;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxDocument = (function () {
|
|
function TmxDocument() {
|
|
this.tmxDirectory = "resource/assets/";
|
|
}
|
|
return TmxDocument;
|
|
}());
|
|
es.TmxDocument = TmxDocument;
|
|
var TmxImage = (function () {
|
|
function TmxImage() {
|
|
}
|
|
TmxImage.prototype.dispose = function () {
|
|
if (this.bitmap) {
|
|
this.bitmap.dispose();
|
|
this.bitmap = null;
|
|
}
|
|
};
|
|
return TmxImage;
|
|
}());
|
|
es.TmxImage = TmxImage;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxMap = (function (_super) {
|
|
__extends(TmxMap, _super);
|
|
function TmxMap() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Object.defineProperty(TmxMap.prototype, "worldWidth", {
|
|
get: function () {
|
|
return this.width * this.tileWidth;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TmxMap.prototype, "worldHeight", {
|
|
get: function () {
|
|
return this.height * this.tileHeight;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(TmxMap.prototype, "requiresLargeTileCulling", {
|
|
get: function () {
|
|
return this.maxTileHeight > this.tileHeight || this.maxTileWidth > this.tileWidth;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TmxMap.prototype.getTilesetForTileGid = function (gid) {
|
|
if (gid == 0)
|
|
return null;
|
|
for (var i = this.tilesets.length - 1; i >= 0; i--) {
|
|
if (this.tilesets[i].firstGid <= gid)
|
|
return this.tilesets[i];
|
|
}
|
|
console.error("tile gid" + gid + "\u672A\u5728\u4EFB\u4F55tileset\u4E2D\u627E\u5230");
|
|
};
|
|
TmxMap.prototype.worldToTilePositionX = function (x, clampToTilemapBounds) {
|
|
if (clampToTilemapBounds === void 0) { clampToTilemapBounds = true; }
|
|
var tileX = Math.floor(x / this.tileWidth);
|
|
if (!clampToTilemapBounds)
|
|
return tileX;
|
|
return es.MathHelper.clamp(tileX, 0, this.width - 1);
|
|
};
|
|
TmxMap.prototype.worldToTilePositionY = function (y, clampToTilemapBounds) {
|
|
if (clampToTilemapBounds === void 0) { clampToTilemapBounds = true; }
|
|
var tileY = Math.floor(y / this.tileHeight);
|
|
if (!clampToTilemapBounds)
|
|
return tileY;
|
|
return es.MathHelper.clamp(tileY, 0, this.height - 1);
|
|
};
|
|
TmxMap.prototype.getLayer = function (name) {
|
|
return this.layers[name];
|
|
};
|
|
TmxMap.prototype.update = function () {
|
|
this.tilesets.forEach(function (tileset) { tileset.update(); });
|
|
};
|
|
TmxMap.prototype.dispose = function (disposing) {
|
|
if (disposing === void 0) { disposing = true; }
|
|
if (!this._isDisposed) {
|
|
if (disposing) {
|
|
this.tilesets.forEach(function (tileset) { if (tileset.image)
|
|
tileset.image.dispose(); });
|
|
this.imageLayers.forEach(function (layer) { if (layer.image)
|
|
layer.image.dispose(); });
|
|
}
|
|
this._isDisposed = true;
|
|
}
|
|
};
|
|
return TmxMap;
|
|
}(es.TmxDocument));
|
|
es.TmxMap = TmxMap;
|
|
var OrientationType;
|
|
(function (OrientationType) {
|
|
OrientationType[OrientationType["unknown"] = 0] = "unknown";
|
|
OrientationType[OrientationType["orthogonal"] = 1] = "orthogonal";
|
|
OrientationType[OrientationType["isometric"] = 2] = "isometric";
|
|
OrientationType[OrientationType["staggered"] = 3] = "staggered";
|
|
OrientationType[OrientationType["hexagonal"] = 4] = "hexagonal";
|
|
})(OrientationType = es.OrientationType || (es.OrientationType = {}));
|
|
var StaggerAxisType;
|
|
(function (StaggerAxisType) {
|
|
StaggerAxisType[StaggerAxisType["x"] = 0] = "x";
|
|
StaggerAxisType[StaggerAxisType["y"] = 1] = "y";
|
|
})(StaggerAxisType = es.StaggerAxisType || (es.StaggerAxisType = {}));
|
|
var StaggerIndexType;
|
|
(function (StaggerIndexType) {
|
|
StaggerIndexType[StaggerIndexType["odd"] = 0] = "odd";
|
|
StaggerIndexType[StaggerIndexType["even"] = 1] = "even";
|
|
})(StaggerIndexType = es.StaggerIndexType || (es.StaggerIndexType = {}));
|
|
var RenderOrderType;
|
|
(function (RenderOrderType) {
|
|
RenderOrderType[RenderOrderType["rightDown"] = 0] = "rightDown";
|
|
RenderOrderType[RenderOrderType["rightUp"] = 1] = "rightUp";
|
|
RenderOrderType[RenderOrderType["leftDown"] = 2] = "leftDown";
|
|
RenderOrderType[RenderOrderType["leftUp"] = 3] = "leftUp";
|
|
})(RenderOrderType = es.RenderOrderType || (es.RenderOrderType = {}));
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxObjectGroup = (function () {
|
|
function TmxObjectGroup() {
|
|
}
|
|
return TmxObjectGroup;
|
|
}());
|
|
es.TmxObjectGroup = TmxObjectGroup;
|
|
var TmxObject = (function () {
|
|
function TmxObject() {
|
|
this.shape = new egret.Shape();
|
|
this.textField = new egret.TextField();
|
|
}
|
|
return TmxObject;
|
|
}());
|
|
es.TmxObject = TmxObject;
|
|
var TmxText = (function () {
|
|
function TmxText() {
|
|
}
|
|
return TmxText;
|
|
}());
|
|
es.TmxText = TmxText;
|
|
var TmxAlignment = (function () {
|
|
function TmxAlignment() {
|
|
}
|
|
return TmxAlignment;
|
|
}());
|
|
es.TmxAlignment = TmxAlignment;
|
|
var TmxObjectType;
|
|
(function (TmxObjectType) {
|
|
TmxObjectType[TmxObjectType["basic"] = 0] = "basic";
|
|
TmxObjectType[TmxObjectType["point"] = 1] = "point";
|
|
TmxObjectType[TmxObjectType["tile"] = 2] = "tile";
|
|
TmxObjectType[TmxObjectType["ellipse"] = 3] = "ellipse";
|
|
TmxObjectType[TmxObjectType["polygon"] = 4] = "polygon";
|
|
TmxObjectType[TmxObjectType["polyline"] = 5] = "polyline";
|
|
TmxObjectType[TmxObjectType["text"] = 6] = "text";
|
|
})(TmxObjectType = es.TmxObjectType || (es.TmxObjectType = {}));
|
|
var DrawOrderType;
|
|
(function (DrawOrderType) {
|
|
DrawOrderType[DrawOrderType["unkownOrder"] = -1] = "unkownOrder";
|
|
DrawOrderType[DrawOrderType["TopDown"] = 0] = "TopDown";
|
|
DrawOrderType[DrawOrderType["IndexOrder"] = 1] = "IndexOrder";
|
|
})(DrawOrderType = es.DrawOrderType || (es.DrawOrderType = {}));
|
|
var TmxHorizontalAlignment;
|
|
(function (TmxHorizontalAlignment) {
|
|
TmxHorizontalAlignment[TmxHorizontalAlignment["left"] = 0] = "left";
|
|
TmxHorizontalAlignment[TmxHorizontalAlignment["center"] = 1] = "center";
|
|
TmxHorizontalAlignment[TmxHorizontalAlignment["right"] = 2] = "right";
|
|
TmxHorizontalAlignment[TmxHorizontalAlignment["justify"] = 3] = "justify";
|
|
})(TmxHorizontalAlignment = es.TmxHorizontalAlignment || (es.TmxHorizontalAlignment = {}));
|
|
var TmxVerticalAlignment;
|
|
(function (TmxVerticalAlignment) {
|
|
TmxVerticalAlignment[TmxVerticalAlignment["top"] = 0] = "top";
|
|
TmxVerticalAlignment[TmxVerticalAlignment["center"] = 1] = "center";
|
|
TmxVerticalAlignment[TmxVerticalAlignment["bottom"] = 2] = "bottom";
|
|
})(TmxVerticalAlignment = es.TmxVerticalAlignment || (es.TmxVerticalAlignment = {}));
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TiledMapLoader = (function () {
|
|
function TiledMapLoader() {
|
|
}
|
|
TiledMapLoader.loadTmxMap = function (map, filePath) {
|
|
var xMap = RES.getRes(filePath);
|
|
return this.loadTmxMapData(map, xMap);
|
|
};
|
|
TiledMapLoader.loadTmxMapData = function (map, xMap) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var _i, _a, e, tileset;
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
map.version = xMap["version"];
|
|
map.tiledVersion = xMap["tiledversion"];
|
|
map.width = xMap["width"];
|
|
map.height = xMap["height"];
|
|
map.tileWidth = xMap["tilewidth"];
|
|
map.tileHeight = xMap["tileheight"];
|
|
map.hexSideLength = xMap["hexsidelength"];
|
|
map.orientation = this.parseOrientationType(xMap["orientation"]);
|
|
map.staggerAxis = this.parseStaggerAxisType(xMap["staggeraxis"]);
|
|
map.staggerIndex = this.parseStaggerIndexType(xMap["staggerindex"]);
|
|
map.renderOrder = this.parseRenderOrderType(xMap["renderorder"]);
|
|
map.nextObjectID = xMap["nextobjectid"];
|
|
map.backgroundColor = es.TmxUtils.color16ToUnit(xMap["color"]);
|
|
map.properties = this.parsePropertyDict(xMap["properties"]);
|
|
map.maxTileWidth = map.tileWidth;
|
|
map.maxTileHeight = map.tileHeight;
|
|
map.tilesets = [];
|
|
_i = 0, _a = xMap["tilesets"];
|
|
_b.label = 1;
|
|
case 1:
|
|
if (!(_i < _a.length)) return [3, 4];
|
|
e = _a[_i];
|
|
return [4, this.parseTmxTileset(map, e)];
|
|
case 2:
|
|
tileset = _b.sent();
|
|
map.tilesets.push(tileset);
|
|
this.updateMaxTileSizes(tileset);
|
|
_b.label = 3;
|
|
case 3:
|
|
_i++;
|
|
return [3, 1];
|
|
case 4:
|
|
map.layers = [];
|
|
map.tileLayers = [];
|
|
map.objectGroups = [];
|
|
map.imageLayers = [];
|
|
map.groups = [];
|
|
this.parseLayers(map, xMap, map, map.width, map.height, map.tmxDirectory);
|
|
return [2, map];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.parseLayers = function (container, xEle, map, width, height, tmxDirectory) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var _i, _a, e, layer, _b, tileLayer, objectgroup, imagelayer, newGroup;
|
|
return __generator(this, function (_c) {
|
|
switch (_c.label) {
|
|
case 0:
|
|
_i = 0, _a = ObjectUtils.elements(xEle).where(function (x) {
|
|
return x.type == "tilelayer" || x.type == "objectgroup" || x.type == "imagelayer" || x.type == "group";
|
|
});
|
|
_c.label = 1;
|
|
case 1:
|
|
if (!(_i < _a.length)) return [3, 11];
|
|
e = _a[_i];
|
|
layer = void 0;
|
|
_b = e.type;
|
|
switch (_b) {
|
|
case "tilelayer": return [3, 2];
|
|
case "objectgroup": return [3, 3];
|
|
case "imagelayer": return [3, 4];
|
|
case "group": return [3, 6];
|
|
}
|
|
return [3, 8];
|
|
case 2:
|
|
tileLayer = this.loadTmxLayer(new es.TmxLayer(), map, e, width, height);
|
|
layer = tileLayer;
|
|
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
|
|
container.tileLayers.push(tileLayer);
|
|
return [3, 9];
|
|
case 3:
|
|
objectgroup = this.loadTmxObjectGroup(new es.TmxObjectGroup(), map, e);
|
|
layer = objectgroup;
|
|
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
|
|
container.objectGroups.push(objectgroup);
|
|
return [3, 9];
|
|
case 4: return [4, this.loadTmxImageLayer(new es.TmxImageLayer(), map, e, tmxDirectory)];
|
|
case 5:
|
|
imagelayer = _c.sent();
|
|
layer = imagelayer;
|
|
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
|
|
container.imageLayers.push(imagelayer);
|
|
return [3, 9];
|
|
case 6: return [4, this.loadTmxGroup(new es.TmxGroup(), map, e, width, height, tmxDirectory)];
|
|
case 7:
|
|
newGroup = _c.sent();
|
|
layer = newGroup;
|
|
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
|
|
container.groups.push(newGroup);
|
|
return [3, 9];
|
|
case 8: throw new Error("无效的操作");
|
|
case 9:
|
|
if (container instanceof es.TmxMap || container instanceof es.TmxGroup)
|
|
container.layers.push(layer);
|
|
_c.label = 10;
|
|
case 10:
|
|
_i++;
|
|
return [3, 1];
|
|
case 11: return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.loadTmxGroup = function (group, map, xGroup, width, height, tmxDirectory) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
group.map = map;
|
|
group.name = xGroup["name"] != undefined ? xGroup["name"] : "";
|
|
group.opacity = xGroup["opacity"] != undefined ? xGroup["opacity"] : 1;
|
|
group.visible = xGroup["visible"] != undefined ? xGroup["visible"] : true;
|
|
group.offsetX = xGroup["offsetx"] != undefined ? xGroup["offsetx"] : 0;
|
|
group.offsetY = xGroup["offsety"] != undefined ? xGroup["offsety"] : 0;
|
|
group.properties = this.parsePropertyDict(xGroup["properties"]);
|
|
group.layers = [];
|
|
group.tileLayers = [];
|
|
group.objectGroups = [];
|
|
group.imageLayers = [];
|
|
group.groups = [];
|
|
return [4, this.parseLayers(group, xGroup, map, width, height, tmxDirectory)];
|
|
case 1:
|
|
_a.sent();
|
|
return [2, group];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.loadTmxImageLayer = function (layer, map, xImageLayer, tmxDirectory) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var xImage, _a;
|
|
return __generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
layer.map = map;
|
|
layer.name = xImageLayer["name"];
|
|
layer.width = xImageLayer["width"];
|
|
layer.height = xImageLayer["height"];
|
|
layer.visible = xImageLayer["visible"] != undefined ? xImageLayer["visible"] : true;
|
|
layer.opacity = xImageLayer["opacity"] != undefined ? xImageLayer["opacity"] : 1;
|
|
layer.offsetX = xImageLayer["offsetx"] != undefined ? xImageLayer["offsetx"] : 0;
|
|
layer.offsetY = xImageLayer["offsety"] != undefined ? xImageLayer["offsety"] : 0;
|
|
xImage = xImageLayer["image"];
|
|
if (!xImage) return [3, 2];
|
|
_a = layer;
|
|
return [4, this.loadTmxImage(new es.TmxImage(), xImage, tmxDirectory)];
|
|
case 1:
|
|
_a.image = _b.sent();
|
|
_b.label = 2;
|
|
case 2:
|
|
layer.properties = this.parsePropertyDict(xImageLayer["properties"]);
|
|
return [2, layer];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.loadTmxLayer = function (layer, map, xLayer, width, height) {
|
|
layer.map = map;
|
|
layer.name = xLayer["name"];
|
|
layer.opacity = xLayer["opacity"] != undefined ? xLayer["opacity"] : 1;
|
|
layer.visible = xLayer["visible"] != undefined ? xLayer["visible"] : true;
|
|
layer.offsetX = xLayer["offsetx"] != undefined ? xLayer["offsetx"] : 0;
|
|
layer.offsetY = xLayer["offsety"] != undefined ? xLayer["offsety"] : 0;
|
|
layer.width = xLayer["width"];
|
|
layer.height = xLayer["height"];
|
|
var xData = xLayer["data"];
|
|
var encoding = xData["encoding"] != undefined ? xData["encoding"] : "csv";
|
|
layer.tiles = new Array(width * height);
|
|
if (encoding == "base64") {
|
|
var br = es.TmxUtils.decode(xData.toString(), encoding, xData["compression"]);
|
|
var index = 0;
|
|
for (var j = 0; j < height; j++) {
|
|
for (var i = 0; i < width; i++) {
|
|
var gid = br[index];
|
|
layer.tiles[index++] = gid != 0 ? new es.TmxLayerTile(map, gid, i, j) : null;
|
|
}
|
|
}
|
|
}
|
|
else if (encoding == "csv") {
|
|
var k = 0;
|
|
for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {
|
|
var s = xData_1[_i];
|
|
var gid = s;
|
|
var x = k % width;
|
|
var y = k / width;
|
|
layer.tiles[k++] = gid != 0 ? new es.TmxLayerTile(map, gid, x, y) : null;
|
|
}
|
|
}
|
|
else if (!encoding) {
|
|
var k = 0;
|
|
for (var _a = 0, _b = xData["tile"]; _a < _b.length; _a++) {
|
|
var e = _b[_a];
|
|
var gid = e["gid"] != undefined ? e["gid"] : 0;
|
|
var x = k % width;
|
|
var y = k / width;
|
|
layer.tiles[k++] = gid != 0 ? new es.TmxLayerTile(map, gid, x, y) : null;
|
|
}
|
|
}
|
|
else {
|
|
throw new Error("TmxLayer:未知编码");
|
|
}
|
|
layer.properties = TiledMapLoader.parsePropertyDict(xLayer["properties"]);
|
|
return layer;
|
|
};
|
|
TiledMapLoader.updateMaxTileSizes = function (tileset) {
|
|
tileset.tiles.forEach(function (tile) {
|
|
if (tile.image) {
|
|
if (tile.image.width > tileset.map.maxTileWidth)
|
|
tileset.map.maxTileWidth = tile.image.width;
|
|
if (tile.image.height > tileset.map.maxTileHeight)
|
|
tileset.map.maxTileHeight = tile.image.height;
|
|
}
|
|
});
|
|
tileset.tileRegions.forEach(function (region) {
|
|
var width = region.width;
|
|
var height = region.height;
|
|
if (width > tileset.map.maxTileWidth)
|
|
tileset.map.maxTileWidth = width;
|
|
if (width > tileset.map.maxTileHeight)
|
|
tileset.map.maxTileHeight = height;
|
|
});
|
|
};
|
|
TiledMapLoader.parseOrientationType = function (type) {
|
|
if (type == "unknown")
|
|
return es.OrientationType.unknown;
|
|
if (type == "orthogonal")
|
|
return es.OrientationType.orthogonal;
|
|
if (type == "isometric")
|
|
return es.OrientationType.isometric;
|
|
if (type == "staggered")
|
|
return es.OrientationType.staggered;
|
|
if (type == "hexagonal")
|
|
return es.OrientationType.hexagonal;
|
|
return es.OrientationType.unknown;
|
|
};
|
|
TiledMapLoader.parseStaggerAxisType = function (type) {
|
|
if (type == "y")
|
|
return es.StaggerAxisType.y;
|
|
return es.StaggerAxisType.x;
|
|
};
|
|
TiledMapLoader.parseStaggerIndexType = function (type) {
|
|
if (type == "even")
|
|
return es.StaggerIndexType.even;
|
|
return es.StaggerIndexType.odd;
|
|
};
|
|
TiledMapLoader.parseRenderOrderType = function (type) {
|
|
if (type == "right-up")
|
|
return es.RenderOrderType.rightUp;
|
|
if (type == "left-down")
|
|
return es.RenderOrderType.leftDown;
|
|
if (type == "left-up")
|
|
return es.RenderOrderType.leftUp;
|
|
return es.RenderOrderType.rightDown;
|
|
};
|
|
TiledMapLoader.parsePropertyDict = function (prop) {
|
|
if (!prop)
|
|
return null;
|
|
var dict = new Map();
|
|
for (var _i = 0, prop_1 = prop; _i < prop_1.length; _i++) {
|
|
var p = prop_1[_i];
|
|
var pname = p["name"];
|
|
var valueAttr = p["value"];
|
|
if (p["type"] == "color")
|
|
dict.set(pname, es.TmxUtils.color16ToUnit(valueAttr).toString());
|
|
else
|
|
dict.set(pname, valueAttr);
|
|
}
|
|
return dict;
|
|
};
|
|
TiledMapLoader.parseTmxTileset = function (map, xTileset) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var xFirstGid, firstGid, source, xDocTileset;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
xFirstGid = xTileset["firstgid"];
|
|
firstGid = xFirstGid;
|
|
source = xTileset["source"];
|
|
if (!(source != undefined)) return [3, 2];
|
|
source = map.tmxDirectory + source;
|
|
return [4, RES.getResByUrl(source).catch(function (err) {
|
|
throw new Error(err);
|
|
})];
|
|
case 1:
|
|
xDocTileset = _a.sent();
|
|
return [2, this.loadTmxTileset(new es.TmxTileset(), map, xDocTileset["tileset"], firstGid)];
|
|
case 2: return [2, this.loadTmxTileset(new es.TmxTileset(), map, xTileset, firstGid)];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.loadTmxTileset = function (tileset, map, xTileset, firstGid) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var xImage, _i, _a, e, _b, _c, _d, t, xTile, tile, id, y, column, x;
|
|
return __generator(this, function (_e) {
|
|
switch (_e.label) {
|
|
case 0:
|
|
tileset.map = map;
|
|
tileset.firstGid = firstGid;
|
|
tileset.name = xTileset["name"];
|
|
tileset.tileWidth = xTileset["tilewidth"];
|
|
tileset.tileHeight = xTileset["tileheight"];
|
|
tileset.spacing = xTileset["spacing"] != undefined ? xTileset["spacing"] : 0;
|
|
tileset.margin = xTileset["margin"] != undefined ? xTileset["margin"] : 0;
|
|
tileset.columns = xTileset["columns"];
|
|
tileset.tileCount = xTileset["tilecount"];
|
|
tileset.tileOffset = this.parseTmxTileOffset(xTileset["tileoffset"]);
|
|
xImage = xTileset["image"];
|
|
if (!xImage) return [3, 2];
|
|
return [4, this.loadTmxImage(new es.TmxImage(), xTileset, map.tmxDirectory).then(function (image) {
|
|
tileset.image = image;
|
|
}).catch(function (err) {
|
|
throw new Error(err);
|
|
})];
|
|
case 1:
|
|
_e.sent();
|
|
_e.label = 2;
|
|
case 2:
|
|
tileset.terrains = [];
|
|
if (xTileset["terrains"])
|
|
for (_i = 0, _a = xTileset["terrains"]; _i < _a.length; _i++) {
|
|
e = _a[_i];
|
|
tileset.terrains.push(this.parseTmxTerrain(e));
|
|
}
|
|
tileset.tiles = new Map();
|
|
_b = [];
|
|
for (_c in xTileset["tiles"])
|
|
_b.push(_c);
|
|
_d = 0;
|
|
_e.label = 3;
|
|
case 3:
|
|
if (!(_d < _b.length)) return [3, 6];
|
|
t = _b[_d];
|
|
if (!xTileset["tiles"].hasOwnProperty(t)) return [3, 5];
|
|
xTile = xTileset["tiles"][t];
|
|
return [4, this.loadTmxTilesetTile(new es.TmxTilesetTile(), tileset, xTile, tileset.terrains, map.tmxDirectory)];
|
|
case 4:
|
|
tile = _e.sent();
|
|
tileset.tiles.set(tile.id == undefined ? Number(t) + 1 : tile.id, tile);
|
|
_e.label = 5;
|
|
case 5:
|
|
_d++;
|
|
return [3, 3];
|
|
case 6:
|
|
tileset.properties = this.parsePropertyDict(xTileset["properties"]);
|
|
tileset.tileRegions = new Map();
|
|
if (tileset.image) {
|
|
id = firstGid;
|
|
for (y = tileset.margin; y < tileset.image.height - tileset.margin; y += tileset.tileHeight + tileset.spacing) {
|
|
column = 0;
|
|
for (x = tileset.margin; x < tileset.image.width - tileset.margin; x += tileset.tileWidth + tileset.spacing) {
|
|
tileset.tileRegions.set(id++, new es.Rectangle(x, y, tileset.tileWidth, tileset.tileHeight));
|
|
if (++column >= tileset.columns)
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
tileset.tiles.forEach(function (tile, key) {
|
|
tileset.tileRegions.set(key, new es.Rectangle(0, 0, tile.image.width, tile.image.height));
|
|
});
|
|
}
|
|
return [2, tileset];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.loadTmxTilesetTile = function (tile, tileset, xTile, terrains, tmxDirectory) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var strTerrain, index, _i, strTerrain_1, v, edge, xImage, _a, _b, _c, e, _d, _e, e;
|
|
return __generator(this, function (_f) {
|
|
switch (_f.label) {
|
|
case 0:
|
|
tile.tileset = tileset;
|
|
tile.id = xTile["id"];
|
|
strTerrain = xTile["terrain"];
|
|
if (strTerrain) {
|
|
tile.terrainEdges = new Array(4);
|
|
index = 0;
|
|
for (_i = 0, strTerrain_1 = strTerrain; _i < strTerrain_1.length; _i++) {
|
|
v = strTerrain_1[_i];
|
|
edge = terrains[v];
|
|
tile.terrainEdges[index++] = edge;
|
|
}
|
|
}
|
|
tile.probability = xTile["probability"] != undefined ? xTile["probability"] : 1;
|
|
tile.type = xTile["type"];
|
|
xImage = xTile["image"];
|
|
if (!xImage) return [3, 2];
|
|
_a = tile;
|
|
return [4, this.loadTmxImage(new es.TmxImage(), xImage, tmxDirectory)];
|
|
case 1:
|
|
_a.image = _f.sent();
|
|
_f.label = 2;
|
|
case 2:
|
|
tile.objectGroups = [];
|
|
if (xTile["objectgroup"])
|
|
for (_b = 0, _c = xTile["objectgroup"]; _b < _c.length; _b++) {
|
|
e = _c[_b];
|
|
tile.objectGroups.push(this.loadTmxObjectGroup(new es.TmxObjectGroup(), tileset.map, e));
|
|
}
|
|
tile.animationFrames = [];
|
|
if (xTile["animation"]) {
|
|
for (_d = 0, _e = xTile["animation"]["frame"]; _d < _e.length; _d++) {
|
|
e = _e[_d];
|
|
tile.animationFrames.push(this.loadTmxAnimationFrame(new es.TmxAnimationFrame(), e));
|
|
}
|
|
}
|
|
tile.properties = this.parsePropertyDict(xTile["properties"]);
|
|
if (tile.properties)
|
|
tile.processProperties();
|
|
return [2, tile];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TiledMapLoader.loadTmxAnimationFrame = function (frame, xFrame) {
|
|
frame.gid = xFrame["tileid"];
|
|
frame.duration = xFrame["duration"] / 1000;
|
|
return frame;
|
|
};
|
|
TiledMapLoader.loadTmxObjectGroup = function (group, map, xObjectGroup) {
|
|
group.map = map;
|
|
group.name = xObjectGroup["name"] != undefined ? xObjectGroup["name"] : "";
|
|
group.color = es.TmxUtils.color16ToUnit(xObjectGroup["color"]);
|
|
group.opacity = xObjectGroup["opacity"] != undefined ? xObjectGroup["opacity"] : 1;
|
|
group.visible = xObjectGroup["visible"] != undefined ? xObjectGroup["visible"] : true;
|
|
group.offsetX = xObjectGroup["offsetx"] != undefined ? xObjectGroup["offsetx"] : 0;
|
|
group.offsetY = xObjectGroup["offsety"] != undefined ? xObjectGroup["offsety"] : 0;
|
|
var drawOrderDict = new Map();
|
|
drawOrderDict.set("unknown", es.DrawOrderType.unkownOrder);
|
|
drawOrderDict.set("topdown", es.DrawOrderType.IndexOrder);
|
|
drawOrderDict.set("index", es.DrawOrderType.TopDown);
|
|
var drawOrderValue = xObjectGroup["draworder"];
|
|
if (drawOrderValue)
|
|
group.drawOrder = drawOrderDict.get(drawOrderValue);
|
|
group.objects = [];
|
|
for (var _i = 0, _a = xObjectGroup["objects"]; _i < _a.length; _i++) {
|
|
var e = _a[_i];
|
|
group.objects.push(this.loadTmxObject(new es.TmxObject(), map, e));
|
|
}
|
|
group.properties = this.parsePropertyDict(xObjectGroup["properties"]);
|
|
return group;
|
|
};
|
|
TiledMapLoader.loadTmxObject = function (obj, map, xObject) {
|
|
obj.id = xObject["id"] != undefined ? xObject["id"] : 0;
|
|
obj.name = xObject["name"] != undefined ? xObject["name"] : "";
|
|
obj.x = xObject["x"];
|
|
obj.y = xObject["y"];
|
|
obj.width = xObject["width"] != undefined ? xObject["width"] : 0;
|
|
obj.height = xObject["height"] != undefined ? xObject["height"] : 0;
|
|
obj.type = xObject["type"] != undefined ? xObject["type"] : "";
|
|
obj.visible = xObject["visible"] != undefined ? xObject["visible"] : true;
|
|
obj.rotation = xObject["rotation"] != undefined ? xObject["rotation"] : 0;
|
|
var xGid = xObject["gid"];
|
|
var xEllipse = xObject["ellipse"];
|
|
var xPolygon = xObject["polygon"];
|
|
var xPolyline = xObject["polyline"];
|
|
var xText = xObject["text"];
|
|
var xPoint = xObject["point"];
|
|
if (xGid) {
|
|
obj.tile = new es.TmxLayerTile(map, xGid, Math.round(obj.x), Math.round(obj.y));
|
|
obj.objectType = es.TmxObjectType.tile;
|
|
}
|
|
else if (xEllipse) {
|
|
obj.objectType = es.TmxObjectType.ellipse;
|
|
}
|
|
else if (xPolygon) {
|
|
obj.points = this.parsePoints(xPolygon);
|
|
obj.objectType = es.TmxObjectType.polygon;
|
|
}
|
|
else if (xPolyline) {
|
|
obj.points = this.parsePoints(xPolyline);
|
|
obj.objectType = es.TmxObjectType.polyline;
|
|
}
|
|
else if (xText) {
|
|
obj.text = this.loadTmxText(new es.TmxText(), xText);
|
|
obj.objectType = es.TmxObjectType.text;
|
|
}
|
|
else if (xPoint) {
|
|
obj.objectType = es.TmxObjectType.point;
|
|
}
|
|
else {
|
|
obj.objectType = es.TmxObjectType.basic;
|
|
}
|
|
obj.properties = this.parsePropertyDict(xObject["properties"]);
|
|
return obj;
|
|
};
|
|
TiledMapLoader.loadTmxText = function (text, xText) {
|
|
text.fontFamily = xText["fontfamily"] != undefined ? xText["fontfamily"] : "sans-serif";
|
|
text.pixelSize = xText["pixelsize"] != undefined ? xText["pixelsize"] : 16;
|
|
text.wrap = xText["wrap"] != undefined ? xText["wrap"] : false;
|
|
text.color = es.TmxUtils.color16ToUnit(xText["color"]);
|
|
text.bold = xText["bold"] ? xText["bold"] : false;
|
|
text.italic = xText["italic"] ? xText["italic"] : false;
|
|
text.underline = xText["underline"] ? xText["underline"] : false;
|
|
text.strikeout = xText["strikeout"] ? xText["strikeout"] : false;
|
|
text.kerning = xText["kerning"] ? xText["kerning"] : true;
|
|
text.alignment = this.loadTmxAlignment(new es.TmxAlignment(), xText);
|
|
text.value = xText;
|
|
return text;
|
|
};
|
|
TiledMapLoader.loadTmxAlignment = function (alignment, xText) {
|
|
function firstLetterToUpperCase(str) {
|
|
if (!str || str == "")
|
|
return str;
|
|
return str[0].toString().toUpperCase() + str.substr(1);
|
|
}
|
|
var xHorizontal = xText["halign"] != undefined ? xText["halign"] : "left";
|
|
alignment.horizontal = es.TmxHorizontalAlignment[firstLetterToUpperCase(xHorizontal)];
|
|
var xVertical = xText["valign"] != undefined ? xText["valign"] : "top";
|
|
alignment.vertical = es.TmxVerticalAlignment[firstLetterToUpperCase((xVertical))];
|
|
return alignment;
|
|
};
|
|
TiledMapLoader.parsePoints = function (xPoints) {
|
|
var points = [];
|
|
var index = 0;
|
|
for (var _i = 0, xPoints_1 = xPoints; _i < xPoints_1.length; _i++) {
|
|
var s = xPoints_1[_i];
|
|
points[index++] = this.parsePoint(s);
|
|
}
|
|
return points;
|
|
};
|
|
TiledMapLoader.parsePoint = function (pt) {
|
|
return new es.Vector2(pt.x, pt.y);
|
|
};
|
|
TiledMapLoader.parseTmxTerrain = function (xTerrain) {
|
|
var terrain = new es.TmxTerrain();
|
|
terrain.name = xTerrain["name"];
|
|
terrain.tile = xTerrain["tile"];
|
|
terrain.properties = this.parsePropertyDict(xTerrain["properties"]);
|
|
return terrain;
|
|
};
|
|
TiledMapLoader.parseTmxTileOffset = function (xTileOffset) {
|
|
var tmxTileOffset = new es.TmxTileOffset();
|
|
if (!xTileOffset) {
|
|
tmxTileOffset.x = 0;
|
|
tmxTileOffset.y = 0;
|
|
return tmxTileOffset;
|
|
}
|
|
tmxTileOffset.x = xTileOffset["x"];
|
|
tmxTileOffset.y = xTileOffset["y"];
|
|
return tmxTileOffset;
|
|
};
|
|
TiledMapLoader.loadTmxImage = function (image, xImage, tmxDirectory) {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var xSource, texture;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
xSource = xImage["image"];
|
|
if (xSource != undefined) {
|
|
image.source = tmxDirectory + xSource;
|
|
}
|
|
else {
|
|
image.source = tmxDirectory + xImage;
|
|
}
|
|
return [4, RES.getResByUrl(image.source, null, this, RES.ResourceItem.TYPE_IMAGE).catch(function (err) {
|
|
throw new Error(err);
|
|
})];
|
|
case 1:
|
|
texture = _a.sent();
|
|
image.bitmap = new egret.SpriteSheet(texture);
|
|
image.trans = es.TmxUtils.color16ToUnit(xImage["trans"]);
|
|
image.width = xImage["imagewidth"] != undefined ? xImage["imagewidth"] : texture.textureWidth;
|
|
image.height = xImage["imageheight"] != undefined ? xImage["imageheight"] : texture.textureHeight;
|
|
return [2, image];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return TiledMapLoader;
|
|
}());
|
|
es.TiledMapLoader = TiledMapLoader;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Bitmap = egret.Bitmap;
|
|
var TiledRendering = (function () {
|
|
function TiledRendering() {
|
|
}
|
|
TiledRendering.renderMap = function (map, container, position, scale, layerDepth) {
|
|
var _this = this;
|
|
map.layers.forEach(function (layer) {
|
|
if (layer instanceof es.TmxLayer && layer.visible) {
|
|
_this.renderLayer(layer, container, position, scale, layerDepth);
|
|
}
|
|
else if (layer instanceof es.TmxImageLayer && layer.visible) {
|
|
_this.renderImageLayer(layer, container, position, scale, layerDepth);
|
|
}
|
|
else if (layer instanceof es.TmxGroup && layer.visible) {
|
|
_this.renderGroup(layer, container, position, scale, layerDepth);
|
|
}
|
|
else if (layer instanceof es.TmxObjectGroup && layer.visible) {
|
|
_this.renderObjectGroup(layer, container, position, scale, layerDepth);
|
|
}
|
|
});
|
|
};
|
|
TiledRendering.renderLayer = function (layer, container, position, scale, layerDepth) {
|
|
if (!layer.visible)
|
|
return;
|
|
var tileWidth = layer.map.tileWidth * scale.x;
|
|
var tileHeight = layer.map.tileHeight * scale.y;
|
|
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
|
|
for (var i = 0; i < layer.tiles.length; i++) {
|
|
var tile = layer.tiles[i];
|
|
if (!tile)
|
|
continue;
|
|
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
|
|
}
|
|
};
|
|
TiledRendering.renderLayerRenderCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
|
|
if (layer instanceof es.TmxLayer && layer.visible) {
|
|
this.renderLayerCamera(layer, container, position, scale, layerDepth, camerClipBounds);
|
|
}
|
|
else if (layer instanceof es.TmxImageLayer && layer.visible) {
|
|
this.renderImageLayer(layer, container, position, scale, layerDepth);
|
|
}
|
|
else if (layer instanceof es.TmxGroup && layer.visible) {
|
|
this.renderGroup(layer, container, position, scale, layerDepth);
|
|
}
|
|
else if (layer instanceof es.TmxObjectGroup && layer.visible) {
|
|
this.renderObjectGroup(layer, container, position, scale, layerDepth);
|
|
}
|
|
};
|
|
TiledRendering.renderLayerCamera = function (layer, container, position, scale, layerDepth, camerClipBounds) {
|
|
if (!layer.visible)
|
|
return;
|
|
position = position.add(layer.offset);
|
|
camerClipBounds.location = camerClipBounds.location.subtract(position);
|
|
var tileWidth = layer.map.tileWidth * scale.x;
|
|
var tileHeight = layer.map.tileHeight * scale.y;
|
|
var minX, minY, maxX, maxY = 0;
|
|
if (layer.map.requiresLargeTileCulling) {
|
|
minX = layer.map.worldToTilePositionX(camerClipBounds.left - (layer.map.maxTileWidth * scale.x - tileWidth));
|
|
minY = layer.map.worldToTilePositionY(camerClipBounds.top - (layer.map.maxTileHeight * scale.y - tileHeight));
|
|
maxX = layer.map.worldToTilePositionX(camerClipBounds.right + (layer.map.maxTileWidth * scale.x - tileWidth));
|
|
maxY = layer.map.worldToTilePositionY(camerClipBounds.bottom + (layer.map.maxTileHeight * scale.y - tileHeight));
|
|
}
|
|
else {
|
|
minX = layer.map.worldToTilePositionX(camerClipBounds.left);
|
|
minY = layer.map.worldToTilePositionY(camerClipBounds.top);
|
|
maxX = layer.map.worldToTilePositionX(camerClipBounds.right);
|
|
maxY = layer.map.worldToTilePositionY(camerClipBounds.bottom);
|
|
}
|
|
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
|
|
for (var y = minY; y <= maxY; y++) {
|
|
for (var x = minX; x <= maxX; x++) {
|
|
var tile = layer.getTile(x, y);
|
|
if (tile)
|
|
this.renderTile(tile, container, position, scale, tileWidth, tileHeight, color, layerDepth);
|
|
}
|
|
}
|
|
};
|
|
TiledRendering.renderImageLayer = function (layer, container, position, scale, layerDepth) {
|
|
if (!layer.visible)
|
|
return;
|
|
var color = es.DrawUtils.getColorMatrix(0xFFFFFF);
|
|
var pos = es.Vector2.add(position, new es.Vector2(layer.offsetX, layer.offsetY).multiply(scale));
|
|
if (!layer.image.texture.parent)
|
|
container.addChild(layer.image.texture);
|
|
layer.image.texture.x = pos.x;
|
|
layer.image.texture.y = pos.y;
|
|
layer.image.texture.scaleX = scale.x;
|
|
layer.image.texture.scaleY = scale.y;
|
|
layer.image.texture.filters = [color];
|
|
};
|
|
TiledRendering.renderObjectGroup = function (objGroup, container, position, scale, layerDepth) {
|
|
if (!objGroup.visible)
|
|
return;
|
|
function debugRender(obj, pos) {
|
|
if (!container)
|
|
return;
|
|
if (!es.Core.debugRenderEndabled)
|
|
return;
|
|
if (!obj.textField.parent && obj.name) {
|
|
obj.textField.text = obj.name;
|
|
obj.textField.size = 12;
|
|
obj.textField.fontFamily = "sans-serif";
|
|
if (obj.shape) {
|
|
obj.textField.x = pos.x + (obj.shape.getBounds().width - obj.textField.width) / 2 + obj.shape.getBounds().x;
|
|
obj.textField.y = pos.y - obj.textField.height - 5 + obj.shape.getBounds().y;
|
|
}
|
|
else {
|
|
obj.textField.x = pos.x + (obj.width - obj.textField.width) / 2;
|
|
obj.textField.y = pos.y - obj.textField.height - 5;
|
|
}
|
|
obj.textField.background = true;
|
|
obj.textField.backgroundColor = 0xa0a0a4;
|
|
obj.textField.textColor = 0xffffff;
|
|
container.addChild(obj.textField);
|
|
}
|
|
}
|
|
for (var object in objGroup.objects) {
|
|
var obj = objGroup.objects[object];
|
|
if (!obj.visible)
|
|
continue;
|
|
if (!es.Core.debugRenderEndabled) {
|
|
if (obj.objectType != es.TmxObjectType.tile && obj.objectType != es.TmxObjectType.text)
|
|
continue;
|
|
}
|
|
var pos = es.Vector2.add(position, new es.Vector2(obj.x, obj.y).multiply(scale));
|
|
switch (obj.objectType) {
|
|
case es.TmxObjectType.basic:
|
|
if (!obj.shape.parent) {
|
|
obj.shape.x = obj.x;
|
|
obj.shape.y = obj.y;
|
|
container.addChild(obj.shape);
|
|
obj.shape.graphics.clear();
|
|
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
|
|
obj.shape.graphics.beginFill(0x979798, 0.5);
|
|
obj.shape.graphics.drawRect(0, 0, obj.width * scale.x, obj.height * scale.y);
|
|
obj.shape.graphics.endFill();
|
|
debugRender(obj, pos);
|
|
}
|
|
break;
|
|
case es.TmxObjectType.point:
|
|
var size = objGroup.map.tileWidth * 0.5;
|
|
pos.x -= size * 0.5;
|
|
pos.y -= size * 0.5;
|
|
if (!obj.shape.parent) {
|
|
obj.shape.x = pos.x;
|
|
obj.shape.y = pos.y;
|
|
container.addChild(obj.shape);
|
|
obj.shape.graphics.clear();
|
|
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
|
|
obj.shape.graphics.beginFill(0x979798, 0.5);
|
|
obj.shape.graphics.drawCircle(0, 0, 1);
|
|
obj.shape.graphics.endFill();
|
|
debugRender(obj, pos);
|
|
}
|
|
break;
|
|
case es.TmxObjectType.tile:
|
|
this.renderTilesetTile(objGroup, obj, container, pos, scale, debugRender);
|
|
break;
|
|
case es.TmxObjectType.ellipse:
|
|
pos = new es.Vector2(obj.x + obj.width * 0.5, obj.y + obj.height * 0.5).multiply(scale);
|
|
if (!obj.shape.parent) {
|
|
obj.shape.x = pos.x;
|
|
obj.shape.y = pos.y;
|
|
container.addChild(obj.shape);
|
|
obj.shape.graphics.clear();
|
|
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
|
|
obj.shape.graphics.beginFill(0x979798, 0.5);
|
|
obj.shape.graphics.drawCircle(0, 0, obj.width * 0.5);
|
|
obj.shape.graphics.endFill();
|
|
debugRender(obj, pos);
|
|
}
|
|
break;
|
|
case es.TmxObjectType.polygon:
|
|
case es.TmxObjectType.polyline:
|
|
var points = [];
|
|
for (var i = 0; i < obj.points.length; i++)
|
|
points[i] = es.Vector2.multiply(obj.points[i], scale);
|
|
if (!obj.shape.parent && points.length > 0) {
|
|
obj.shape.x = pos.x;
|
|
obj.shape.y = pos.y;
|
|
container.addChild(obj.shape);
|
|
obj.shape.graphics.clear();
|
|
obj.shape.graphics.lineStyle(1, 0xa0a0a4);
|
|
for (var i = 0; i < points.length; i++) {
|
|
obj.shape.graphics.lineTo(points[i].x, points[i].y);
|
|
}
|
|
obj.shape.graphics.endFill();
|
|
debugRender(obj, pos);
|
|
}
|
|
break;
|
|
case es.TmxObjectType.text:
|
|
if (!obj.textField.parent) {
|
|
obj.textField.x = pos.x;
|
|
obj.textField.y = pos.y;
|
|
container.addChild(obj.textField);
|
|
obj.textField.text = obj.text.value;
|
|
obj.textField.textColor = obj.text.color;
|
|
obj.textField.bold = obj.text.bold != undefined ? obj.text.bold : false;
|
|
obj.textField.italic = obj.text.italic != undefined ? obj.text.italic : false;
|
|
obj.textField.size = obj.text.pixelSize;
|
|
obj.textField.fontFamily = obj.text.fontFamily;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
TiledRendering.renderTilesetTile = function (objGroup, obj, container, pos, scale, debugRender) {
|
|
var tileset = objGroup.map.getTilesetForTileGid(obj.tile.gid);
|
|
var sourceRect = tileset.tileRegions.get(obj.tile.gid);
|
|
if (container) {
|
|
if (tileset.image) {
|
|
if (obj.tile.horizontalFlip && obj.tile.verticalFlip) {
|
|
pos.x += tileset.tileHeight + (sourceRect.height * scale.y - tileset.tileHeight);
|
|
pos.y -= (sourceRect.width * scale.x - tileset.tileWidth);
|
|
}
|
|
else if (obj.tile.horizontalFlip) {
|
|
pos.x += tileset.tileWidth + (sourceRect.height * scale.y - tileset.tileHeight);
|
|
}
|
|
else if (obj.tile.verticalFlip) {
|
|
pos.y += (tileset.tileWidth - sourceRect.width * scale.x);
|
|
}
|
|
else {
|
|
pos.y += (tileset.tileHeight - sourceRect.height * scale.y);
|
|
}
|
|
var texture = tileset.image.bitmap.getTexture("" + obj.tile.gid);
|
|
if (!texture) {
|
|
texture = tileset.image.bitmap.createTexture("" + obj.tile.gid, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
|
|
}
|
|
tileset.image.texture = new Bitmap(texture);
|
|
container.addChild(tileset.image.texture);
|
|
tileset.image.texture.x = pos.x;
|
|
tileset.image.texture.y = pos.y;
|
|
if (obj.tile.verticalFlip && obj.tile.horizontalFlip) {
|
|
tileset.image.texture.scaleX = -1;
|
|
tileset.image.texture.scaleY = -1;
|
|
}
|
|
else if (obj.tile.verticalFlip) {
|
|
tileset.image.texture.scaleX = scale.x;
|
|
tileset.image.texture.scaleY = -1;
|
|
}
|
|
else if (obj.tile.horizontalFlip) {
|
|
tileset.image.texture.scaleX = -1;
|
|
tileset.image.texture.scaleY = scale.y;
|
|
}
|
|
else {
|
|
tileset.image.texture.scaleX = scale.x;
|
|
tileset.image.texture.scaleY = scale.y;
|
|
}
|
|
tileset.image.texture.anchorOffsetX = 0;
|
|
tileset.image.texture.anchorOffsetY = 0;
|
|
debugRender(obj, pos);
|
|
}
|
|
else {
|
|
var tilesetTile = tileset.tiles.get(obj.tile.gid);
|
|
var texture = tilesetTile.image.bitmap.getTexture("" + obj.tile.gid);
|
|
if (!texture) {
|
|
texture = tilesetTile.image.bitmap.createTexture("" + obj.tile.gid, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
|
|
}
|
|
pos.y -= obj.height;
|
|
tilesetTile.image.texture = new Bitmap(texture);
|
|
container.addChild(tilesetTile.image.texture);
|
|
tilesetTile.image.texture.width = obj.width;
|
|
tilesetTile.image.texture.height = obj.height;
|
|
tilesetTile.image.texture.x = pos.x;
|
|
tilesetTile.image.texture.y = pos.y;
|
|
if (obj.tile.verticalFlip && obj.tile.horizontalFlip) {
|
|
tilesetTile.image.texture.scaleX = -1;
|
|
tilesetTile.image.texture.scaleY = -1;
|
|
}
|
|
else if (obj.tile.verticalFlip) {
|
|
tilesetTile.image.texture.scaleX = scale.x;
|
|
tilesetTile.image.texture.scaleY = -1;
|
|
}
|
|
else if (obj.tile.horizontalFlip) {
|
|
tilesetTile.image.texture.scaleX = -1;
|
|
tilesetTile.image.texture.scaleY = scale.y;
|
|
}
|
|
else {
|
|
tilesetTile.image.texture.scaleX = scale.x;
|
|
tilesetTile.image.texture.scaleY = scale.y;
|
|
}
|
|
tilesetTile.image.texture.anchorOffsetX = 0;
|
|
tilesetTile.image.texture.anchorOffsetY = 0;
|
|
}
|
|
}
|
|
};
|
|
TiledRendering.renderGroup = function (group, container, position, scale, layerDepth) {
|
|
var _this = this;
|
|
if (!group.visible)
|
|
return;
|
|
group.layers.forEach(function (layer) {
|
|
if (layer instanceof es.TmxGroup) {
|
|
_this.renderGroup(layer, container, position, scale, layerDepth);
|
|
}
|
|
if (layer instanceof es.TmxObjectGroup) {
|
|
_this.renderObjectGroup(layer, container, position, scale, layerDepth);
|
|
}
|
|
if (layer instanceof es.TmxLayer) {
|
|
_this.renderLayer(layer, container, position, scale, layerDepth);
|
|
}
|
|
if (layer instanceof es.TmxImageLayer) {
|
|
_this.renderImageLayer(layer, container, position, scale, layerDepth);
|
|
}
|
|
});
|
|
};
|
|
TiledRendering.renderTile = function (tile, container, position, scale, tileWidth, tileHeight, color, layerDepth) {
|
|
var gid = tile.gid;
|
|
var tilesetTile = tile.tilesetTile;
|
|
if (tilesetTile && tilesetTile.animationFrames.length > 0)
|
|
gid = tilesetTile.currentAnimationFrameGid;
|
|
var sourceRect = tile.tileset.tileRegions.get(gid);
|
|
var tx = Math.floor(tile.x) * tileWidth;
|
|
var ty = Math.floor(tile.y) * tileHeight;
|
|
var rotation = 0;
|
|
if (tile.horizontalFlip && tile.verticalFlip) {
|
|
tx += tileHeight + (sourceRect.height * scale.y - tileHeight);
|
|
ty -= (sourceRect.width * scale.x - tileWidth);
|
|
}
|
|
else if (tile.horizontalFlip) {
|
|
tx += tileWidth + (sourceRect.height * scale.y - tileHeight);
|
|
}
|
|
else if (tile.verticalFlip) {
|
|
ty += (tileWidth - sourceRect.width * scale.x);
|
|
}
|
|
else {
|
|
ty += (tileHeight - sourceRect.height * scale.y);
|
|
}
|
|
var pos = new es.Vector2(tx, ty).add(position);
|
|
if (tile.tileset.image) {
|
|
if (container) {
|
|
var texture = tile.tileset.image.bitmap.getTexture("" + gid);
|
|
if (!texture) {
|
|
texture = tile.tileset.image.bitmap.createTexture("" + gid, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height);
|
|
}
|
|
tile.tileset.image.texture = new Bitmap(texture);
|
|
container.addChild(tile.tileset.image.texture);
|
|
if (tile.tileset.image.texture.x != pos.x)
|
|
tile.tileset.image.texture.x = pos.x;
|
|
if (tile.tileset.image.texture.y != pos.y)
|
|
tile.tileset.image.texture.y = pos.y;
|
|
if (tile.verticalFlip && tile.horizontalFlip) {
|
|
tile.tileset.image.texture.scaleX = -1;
|
|
tile.tileset.image.texture.scaleY = -1;
|
|
}
|
|
else if (tile.verticalFlip) {
|
|
tile.tileset.image.texture.scaleX = scale.x;
|
|
tile.tileset.image.texture.scaleY = -1;
|
|
}
|
|
else if (tile.horizontalFlip) {
|
|
tile.tileset.image.texture.scaleX = -1;
|
|
tile.tileset.image.texture.scaleY = scale.y;
|
|
}
|
|
else {
|
|
tile.tileset.image.texture.scaleX = scale.x;
|
|
tile.tileset.image.texture.scaleY = scale.y;
|
|
}
|
|
if (tile.tileset.image.texture.rotation != rotation)
|
|
tile.tileset.image.texture.rotation = rotation;
|
|
if (tile.tileset.image.texture.anchorOffsetX != 0)
|
|
tile.tileset.image.texture.anchorOffsetX = 0;
|
|
if (tile.tileset.image.texture.anchorOffsetY != 0)
|
|
tile.tileset.image.texture.anchorOffsetY = 0;
|
|
}
|
|
}
|
|
else {
|
|
if (tilesetTile.image.texture) {
|
|
if (!tilesetTile.image.bitmap.getTexture(gid.toString())) {
|
|
tilesetTile.image.texture = new Bitmap(tilesetTile.image.bitmap.createTexture(gid.toString(), sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height));
|
|
container.addChild(tilesetTile.image.texture);
|
|
}
|
|
tilesetTile.image.texture.x = pos.x;
|
|
tilesetTile.image.texture.y = pos.y;
|
|
tilesetTile.image.texture.scaleX = scale.x;
|
|
tilesetTile.image.texture.scaleY = scale.y;
|
|
tilesetTile.image.texture.rotation = rotation;
|
|
tilesetTile.image.texture.anchorOffsetX = 0;
|
|
tilesetTile.image.texture.anchorOffsetY = 0;
|
|
tilesetTile.image.texture.filters = [color];
|
|
}
|
|
}
|
|
};
|
|
return TiledRendering;
|
|
}());
|
|
es.TiledRendering = TiledRendering;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxTileset = (function (_super) {
|
|
__extends(TmxTileset, _super);
|
|
function TmxTileset() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
TmxTileset.prototype.update = function () {
|
|
this.tiles.forEach(function (value) {
|
|
value.updateAnimatedTiles();
|
|
});
|
|
};
|
|
return TmxTileset;
|
|
}(es.TmxDocument));
|
|
es.TmxTileset = TmxTileset;
|
|
var TmxTileOffset = (function () {
|
|
function TmxTileOffset() {
|
|
}
|
|
return TmxTileOffset;
|
|
}());
|
|
es.TmxTileOffset = TmxTileOffset;
|
|
var TmxTerrain = (function () {
|
|
function TmxTerrain() {
|
|
}
|
|
return TmxTerrain;
|
|
}());
|
|
es.TmxTerrain = TmxTerrain;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxTilesetTile = (function () {
|
|
function TmxTilesetTile() {
|
|
}
|
|
Object.defineProperty(TmxTilesetTile.prototype, "currentAnimationFrameGid", {
|
|
get: function () {
|
|
return this.animationFrames[this._animationCurrentFrame].gid + this.tileset.firstGid;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TmxTilesetTile.prototype.processProperties = function () {
|
|
var value;
|
|
value = this.properties.get("engine.isDestructable");
|
|
if (value)
|
|
this.isDestructable = Boolean(value);
|
|
value = this.properties.get("engine:isSlope");
|
|
if (value)
|
|
this.isSlope = Boolean(value);
|
|
value = this.properties.get("engine:isOneWayPlatform");
|
|
if (value)
|
|
this.isOneWayPlatform = Boolean(value);
|
|
value = this.properties.get("engine:slopeTopLeft");
|
|
if (value)
|
|
this.slopeTopLeft = Number(value);
|
|
value = this.properties.get("engine:slopeTopRight");
|
|
if (value)
|
|
this.slopeTopRight = Number(value);
|
|
};
|
|
TmxTilesetTile.prototype.updateAnimatedTiles = function () {
|
|
if (this.animationFrames.length == 0)
|
|
return;
|
|
this._animationElapsedTime += es.Time.deltaTime;
|
|
if (this._animationElapsedTime > this.animationFrames[this._animationCurrentFrame].duration) {
|
|
this._animationCurrentFrame = es.MathHelper.incrementWithWrap(this._animationCurrentFrame, this.animationFrames.length);
|
|
this._animationElapsedTime = 0;
|
|
}
|
|
};
|
|
return TmxTilesetTile;
|
|
}());
|
|
es.TmxTilesetTile = TmxTilesetTile;
|
|
var TmxAnimationFrame = (function () {
|
|
function TmxAnimationFrame() {
|
|
}
|
|
return TmxAnimationFrame;
|
|
}());
|
|
es.TmxAnimationFrame = TmxAnimationFrame;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TmxUtils = (function () {
|
|
function TmxUtils() {
|
|
}
|
|
TmxUtils.decode = function (data, encoding, compression) {
|
|
compression = compression || "none";
|
|
encoding = encoding || "none";
|
|
switch (encoding) {
|
|
case "base64":
|
|
var decoded = es.Base64Utils.decodeBase64AsArray(data, 4);
|
|
return (compression === "none") ? decoded : es.Base64Utils.decompress(data, decoded, compression);
|
|
case "csv":
|
|
return es.Base64Utils.decodeCSV(data);
|
|
case "none":
|
|
var datas = [];
|
|
for (var i = 0; i < data.length; i++) {
|
|
datas[i] = +data[i].gid;
|
|
}
|
|
return datas;
|
|
default:
|
|
throw new Error("未定义的编码:" + encoding);
|
|
}
|
|
};
|
|
TmxUtils.color16ToUnit = function ($color) {
|
|
if (!$color)
|
|
return 0xFFFFFF;
|
|
var colorStr = "0x" + $color.slice(1);
|
|
return parseInt(colorStr, 16);
|
|
};
|
|
return TmxUtils;
|
|
}());
|
|
es.TmxUtils = TmxUtils;
|
|
})(es || (es = {}));
|
|
var ArrayUtils = (function () {
|
|
function ArrayUtils() {
|
|
}
|
|
ArrayUtils.bubbleSort = function (ary) {
|
|
var isExchange = false;
|
|
for (var i = 0; i < ary.length; i++) {
|
|
isExchange = false;
|
|
for (var j = ary.length - 1; j > i; j--) {
|
|
if (ary[j] < ary[j - 1]) {
|
|
var temp = ary[j];
|
|
ary[j] = ary[j - 1];
|
|
ary[j - 1] = temp;
|
|
isExchange = true;
|
|
}
|
|
}
|
|
if (!isExchange)
|
|
break;
|
|
}
|
|
};
|
|
ArrayUtils.insertionSort = function (ary) {
|
|
var len = ary.length;
|
|
for (var i = 1; i < len; i++) {
|
|
var val = ary[i];
|
|
for (var j = i; j > 0 && ary[j - 1] > val; j--) {
|
|
ary[j] = ary[j - 1];
|
|
}
|
|
ary[j] = val;
|
|
}
|
|
};
|
|
ArrayUtils.binarySearch = function (ary, value) {
|
|
var startIndex = 0;
|
|
var endIndex = ary.length;
|
|
var sub = (startIndex + endIndex) >> 1;
|
|
while (startIndex < endIndex) {
|
|
if (value <= ary[sub])
|
|
endIndex = sub;
|
|
else if (value >= ary[sub])
|
|
startIndex = sub + 1;
|
|
sub = (startIndex + endIndex) >> 1;
|
|
}
|
|
if (ary[startIndex] == value)
|
|
return startIndex;
|
|
return -1;
|
|
};
|
|
ArrayUtils.findElementIndex = function (ary, num) {
|
|
var len = ary.length;
|
|
for (var i = 0; i < len; ++i) {
|
|
if (ary[i] == num)
|
|
return i;
|
|
}
|
|
return null;
|
|
};
|
|
ArrayUtils.getMaxElementIndex = function (ary) {
|
|
var matchIndex = 0;
|
|
var len = ary.length;
|
|
for (var j = 1; j < len; j++) {
|
|
if (ary[j] > ary[matchIndex])
|
|
matchIndex = j;
|
|
}
|
|
return matchIndex;
|
|
};
|
|
ArrayUtils.getMinElementIndex = function (ary) {
|
|
var matchIndex = 0;
|
|
var len = ary.length;
|
|
for (var j = 1; j < len; j++) {
|
|
if (ary[j] < ary[matchIndex])
|
|
matchIndex = j;
|
|
}
|
|
return matchIndex;
|
|
};
|
|
ArrayUtils.getUniqueAry = function (ary) {
|
|
var uAry = [];
|
|
var newAry = [];
|
|
var count = ary.length;
|
|
for (var i = 0; i < count; ++i) {
|
|
var value = ary[i];
|
|
if (uAry.indexOf(value) == -1)
|
|
uAry.push(value);
|
|
}
|
|
count = uAry.length;
|
|
for (var i = count - 1; i >= 0; --i) {
|
|
newAry.unshift(uAry[i]);
|
|
}
|
|
return newAry;
|
|
};
|
|
ArrayUtils.getDifferAry = function (aryA, aryB) {
|
|
aryA = this.getUniqueAry(aryA);
|
|
aryB = this.getUniqueAry(aryB);
|
|
var ary = aryA.concat(aryB);
|
|
var uObj = {};
|
|
var newAry = [];
|
|
var count = ary.length;
|
|
for (var j = 0; j < count; ++j) {
|
|
if (!uObj[ary[j]]) {
|
|
uObj[ary[j]] = {};
|
|
uObj[ary[j]].count = 0;
|
|
uObj[ary[j]].key = ary[j];
|
|
uObj[ary[j]].count++;
|
|
}
|
|
else {
|
|
if (uObj[ary[j]] instanceof Object) {
|
|
uObj[ary[j]].count++;
|
|
}
|
|
}
|
|
}
|
|
for (var i in uObj) {
|
|
if (uObj[i].count != 2) {
|
|
newAry.unshift(uObj[i].key);
|
|
}
|
|
}
|
|
return newAry;
|
|
};
|
|
ArrayUtils.swap = function (array, index1, index2) {
|
|
var temp = array[index1];
|
|
array[index1] = array[index2];
|
|
array[index2] = temp;
|
|
};
|
|
ArrayUtils.clearList = function (ary) {
|
|
if (!ary)
|
|
return;
|
|
var length = ary.length;
|
|
for (var i = length - 1; i >= 0; i -= 1) {
|
|
ary.splice(i, 1);
|
|
}
|
|
};
|
|
ArrayUtils.cloneList = function (ary) {
|
|
if (!ary)
|
|
return null;
|
|
return ary.slice(0, ary.length);
|
|
};
|
|
ArrayUtils.equals = function (ary1, ary2) {
|
|
if (ary1 == ary2)
|
|
return true;
|
|
var length = ary1.length;
|
|
if (length != ary2.length)
|
|
return false;
|
|
while (length--) {
|
|
if (ary1[length] != ary2[length])
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
ArrayUtils.insert = function (ary, index, value) {
|
|
if (!ary)
|
|
return null;
|
|
var length = ary.length;
|
|
if (index > length)
|
|
index = length;
|
|
if (index < 0)
|
|
index = 0;
|
|
if (index == length)
|
|
ary.push(value);
|
|
else if (index == 0)
|
|
ary.unshift(value);
|
|
else {
|
|
for (var i = length - 1; i >= index; i -= 1) {
|
|
ary[i + 1] = ary[i];
|
|
}
|
|
ary[index] = value;
|
|
}
|
|
return value;
|
|
};
|
|
return ArrayUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var Base64Utils = (function () {
|
|
function Base64Utils() {
|
|
}
|
|
Object.defineProperty(Base64Utils, "nativeBase64", {
|
|
get: function () {
|
|
return (typeof (window.atob) === "function");
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Base64Utils.decode = function (input) {
|
|
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
if (this.nativeBase64) {
|
|
return window.atob(input);
|
|
}
|
|
else {
|
|
var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;
|
|
while (i < input.length) {
|
|
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
|
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
|
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
output.push(String.fromCharCode(chr1));
|
|
if (enc3 !== 64) {
|
|
output.push(String.fromCharCode(chr2));
|
|
}
|
|
if (enc4 !== 64) {
|
|
output.push(String.fromCharCode(chr3));
|
|
}
|
|
}
|
|
output = output.join("");
|
|
return output;
|
|
}
|
|
};
|
|
Base64Utils.encode = function (input) {
|
|
input = input.replace(/\r\n/g, "\n");
|
|
if (this.nativeBase64) {
|
|
window.btoa(input);
|
|
}
|
|
else {
|
|
var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;
|
|
while (i < input.length) {
|
|
chr1 = input.charCodeAt(i++);
|
|
chr2 = input.charCodeAt(i++);
|
|
chr3 = input.charCodeAt(i++);
|
|
enc1 = chr1 >> 2;
|
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
enc4 = chr3 & 63;
|
|
if (isNaN(chr2)) {
|
|
enc3 = enc4 = 64;
|
|
}
|
|
else if (isNaN(chr3)) {
|
|
enc4 = 64;
|
|
}
|
|
output.push(this._keyStr.charAt(enc1));
|
|
output.push(this._keyStr.charAt(enc2));
|
|
output.push(this._keyStr.charAt(enc3));
|
|
output.push(this._keyStr.charAt(enc4));
|
|
}
|
|
output = output.join("");
|
|
return output;
|
|
}
|
|
};
|
|
Base64Utils.decodeBase64AsArray = function (input, bytes) {
|
|
bytes = bytes || 1;
|
|
var dec = Base64Utils.decode(input), i, j, len;
|
|
var ar = new Uint32Array(dec.length / bytes);
|
|
for (i = 0, len = dec.length / bytes; i < len; i++) {
|
|
ar[i] = 0;
|
|
for (j = bytes - 1; j >= 0; --j) {
|
|
ar[i] += dec.charCodeAt((i * bytes) + j) << (j << 3);
|
|
}
|
|
}
|
|
return ar;
|
|
};
|
|
Base64Utils.decompress = function (data, decoded, compression) {
|
|
throw new Error("GZIP/ZLIB compressed TMX Tile Map not supported!");
|
|
};
|
|
Base64Utils.decodeCSV = function (input) {
|
|
var entries = input.replace("\n", "").trim().split(",");
|
|
var result = [];
|
|
for (var i = 0; i < entries.length; i++) {
|
|
result.push(+entries[i]);
|
|
}
|
|
return result;
|
|
};
|
|
Base64Utils._keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
return Base64Utils;
|
|
}());
|
|
es.Base64Utils = Base64Utils;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Color = (function () {
|
|
function Color(r, g, b, alpha) {
|
|
if (((r | g | b | alpha) & 0xFFFFFF00) != 0) {
|
|
var clampedR = es.MathHelper.clamp(r, 0, 255);
|
|
var clampedG = es.MathHelper.clamp(g, 0, 255);
|
|
var clampedB = es.MathHelper.clamp(b, 0, 255);
|
|
var clampedA = es.MathHelper.clamp(alpha, 0, 255);
|
|
this._packedValue = (clampedA << 24) | (clampedB << 16) | (clampedG << 8) | (clampedR);
|
|
}
|
|
else {
|
|
this._packedValue = (alpha << 24) | (b << 16) | (g << 8) | r;
|
|
}
|
|
}
|
|
Object.defineProperty(Color.prototype, "b", {
|
|
get: function () {
|
|
return this._packedValue >> 16;
|
|
},
|
|
set: function (value) {
|
|
this._packedValue = (this._packedValue & 0xff00ffff) | (value << 16);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Color.prototype, "g", {
|
|
get: function () {
|
|
return this._packedValue >> 8;
|
|
},
|
|
set: function (value) {
|
|
this._packedValue = (this._packedValue & 0xffff00ff) | (value << 8);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Color.prototype, "r", {
|
|
get: function () {
|
|
return this._packedValue;
|
|
},
|
|
set: function (value) {
|
|
this._packedValue = (this._packedValue & 0xffffff00) | value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Color.prototype, "a", {
|
|
get: function () {
|
|
return this._packedValue >> 24;
|
|
},
|
|
set: function (value) {
|
|
this._packedValue = (this._packedValue & 0x00ffffff) | (value << 24);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Color.prototype, "packedValue", {
|
|
get: function () {
|
|
return this._packedValue;
|
|
},
|
|
set: function (value) {
|
|
this._packedValue = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Color.prototype.equals = function (other) {
|
|
return this._packedValue == other._packedValue;
|
|
};
|
|
return Color;
|
|
}());
|
|
es.Color = Color;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var ContentManager = (function () {
|
|
function ContentManager() {
|
|
this.loadedAssets = new Map();
|
|
}
|
|
ContentManager.prototype.loadRes = function (name, local) {
|
|
var _this = this;
|
|
if (local === void 0) { local = true; }
|
|
return new Promise(function (resolve, reject) {
|
|
var res = _this.loadedAssets.get(name);
|
|
if (res) {
|
|
resolve(res);
|
|
return;
|
|
}
|
|
if (local) {
|
|
RES.getResAsync(name).then(function (data) {
|
|
_this.loadedAssets.set(name, data);
|
|
resolve(data);
|
|
}).catch(function (err) {
|
|
console.error("资源加载错误:", name, err);
|
|
reject(err);
|
|
});
|
|
}
|
|
else {
|
|
RES.getResByUrl(name).then(function (data) {
|
|
_this.loadedAssets.set(name, data);
|
|
resolve(data);
|
|
}).catch(function (err) {
|
|
console.error("资源加载错误:", name, err);
|
|
reject(err);
|
|
});
|
|
}
|
|
});
|
|
};
|
|
ContentManager.prototype.dispose = function () {
|
|
this.loadedAssets.forEach(function (value) {
|
|
var assetsToRemove = value;
|
|
if (RES.destroyRes(assetsToRemove))
|
|
assetsToRemove.dispose();
|
|
});
|
|
this.loadedAssets.clear();
|
|
};
|
|
return ContentManager;
|
|
}());
|
|
es.ContentManager = ContentManager;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var DrawUtils = (function () {
|
|
function DrawUtils() {
|
|
}
|
|
DrawUtils.getColorMatrix = function (color) {
|
|
var colorMatrix = [
|
|
1, 0, 0, 0, 0,
|
|
0, 1, 0, 0, 0,
|
|
0, 0, 1, 0, 0,
|
|
0, 0, 0, 1, 0
|
|
];
|
|
colorMatrix[0] = Math.floor(color / 256 / 256) / 255;
|
|
colorMatrix[6] = Math.floor(color / 256 % 256) / 255;
|
|
colorMatrix[12] = color % 256 / 255;
|
|
return new egret.ColorMatrixFilter(colorMatrix);
|
|
};
|
|
return DrawUtils;
|
|
}());
|
|
es.DrawUtils = DrawUtils;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var EdgeExt = (function () {
|
|
function EdgeExt() {
|
|
}
|
|
EdgeExt.oppositeEdge = function (self) {
|
|
switch (self) {
|
|
case es.Edge.bottom:
|
|
return es.Edge.top;
|
|
case es.Edge.top:
|
|
return es.Edge.bottom;
|
|
case es.Edge.left:
|
|
return es.Edge.right;
|
|
case es.Edge.right:
|
|
return es.Edge.left;
|
|
}
|
|
};
|
|
EdgeExt.isHorizontal = function (self) {
|
|
return self == es.Edge.right || self == es.Edge.left;
|
|
};
|
|
EdgeExt.isVertical = function (self) {
|
|
return self == es.Edge.top || self == es.Edge.bottom;
|
|
};
|
|
return EdgeExt;
|
|
}());
|
|
es.EdgeExt = EdgeExt;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var FuncPack = (function () {
|
|
function FuncPack(func, context) {
|
|
this.func = func;
|
|
this.context = context;
|
|
}
|
|
return FuncPack;
|
|
}());
|
|
es.FuncPack = FuncPack;
|
|
var Emitter = (function () {
|
|
function Emitter() {
|
|
this._messageTable = new Map();
|
|
}
|
|
Emitter.prototype.addObserver = function (eventType, handler, context) {
|
|
var list = this._messageTable.get(eventType);
|
|
if (!list) {
|
|
list = [];
|
|
this._messageTable.set(eventType, list);
|
|
}
|
|
if (list.findIndex(function (funcPack) { return funcPack.func == handler; }) != -1)
|
|
console.warn("您试图添加相同的观察者两次");
|
|
list.push(new FuncPack(handler, context));
|
|
};
|
|
Emitter.prototype.removeObserver = function (eventType, handler) {
|
|
var messageData = this._messageTable.get(eventType);
|
|
var index = messageData.findIndex(function (data) { return data.func == handler; });
|
|
if (index != -1)
|
|
messageData.removeAt(index);
|
|
};
|
|
Emitter.prototype.emit = function (eventType, data) {
|
|
var list = this._messageTable.get(eventType);
|
|
if (list) {
|
|
for (var i = list.length - 1; i >= 0; i--)
|
|
list[i].func.call(list[i].context, data);
|
|
}
|
|
};
|
|
return Emitter;
|
|
}());
|
|
es.Emitter = Emitter;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Edge;
|
|
(function (Edge) {
|
|
Edge[Edge["top"] = 0] = "top";
|
|
Edge[Edge["bottom"] = 1] = "bottom";
|
|
Edge[Edge["left"] = 2] = "left";
|
|
Edge[Edge["right"] = 3] = "right";
|
|
})(Edge = es.Edge || (es.Edge = {}));
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Enumerable = (function () {
|
|
function Enumerable() {
|
|
}
|
|
Enumerable.repeat = function (element, count) {
|
|
var result = [];
|
|
while (count--) {
|
|
result.push(element);
|
|
}
|
|
return result;
|
|
};
|
|
return Enumerable;
|
|
}());
|
|
es.Enumerable = Enumerable;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var GlobalManager = (function () {
|
|
function GlobalManager() {
|
|
}
|
|
Object.defineProperty(GlobalManager.prototype, "enabled", {
|
|
get: function () {
|
|
return this._enabled;
|
|
},
|
|
set: function (value) {
|
|
this.setEnabled(value);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
GlobalManager.prototype.setEnabled = function (isEnabled) {
|
|
if (this._enabled != isEnabled) {
|
|
this._enabled = isEnabled;
|
|
if (this._enabled) {
|
|
this.onEnabled();
|
|
}
|
|
else {
|
|
this.onDisabled();
|
|
}
|
|
}
|
|
};
|
|
GlobalManager.prototype.onEnabled = function () {
|
|
};
|
|
GlobalManager.prototype.onDisabled = function () {
|
|
};
|
|
GlobalManager.prototype.update = function () {
|
|
};
|
|
return GlobalManager;
|
|
}());
|
|
es.GlobalManager = GlobalManager;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TouchState = (function () {
|
|
function TouchState() {
|
|
this.x = 0;
|
|
this.y = 0;
|
|
this.touchPoint = -1;
|
|
this.touchDown = false;
|
|
}
|
|
Object.defineProperty(TouchState.prototype, "position", {
|
|
get: function () {
|
|
return new es.Vector2(this.x, this.y);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TouchState.prototype.reset = function () {
|
|
this.x = 0;
|
|
this.y = 0;
|
|
this.touchDown = false;
|
|
this.touchPoint = -1;
|
|
};
|
|
return TouchState;
|
|
}());
|
|
es.TouchState = TouchState;
|
|
var Input = (function () {
|
|
function Input() {
|
|
}
|
|
Object.defineProperty(Input, "gameTouchs", {
|
|
get: function () {
|
|
return this._gameTouchs;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Input, "resolutionScale", {
|
|
get: function () {
|
|
return this._resolutionScale;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Input, "totalTouchCount", {
|
|
get: function () {
|
|
return this._totalTouchCount;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Input, "touchPosition", {
|
|
get: function () {
|
|
if (!this._gameTouchs[0])
|
|
return es.Vector2.zero;
|
|
return this._gameTouchs[0].position;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Input, "maxSupportedTouch", {
|
|
get: function () {
|
|
return es.Core._instance.stage.maxTouches;
|
|
},
|
|
set: function (value) {
|
|
es.Core._instance.stage.maxTouches = value;
|
|
this.initTouchCache();
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(Input, "touchPositionDelta", {
|
|
get: function () {
|
|
var delta = es.Vector2.subtract(this.touchPosition, this._previousTouchState.position);
|
|
if (delta.length() > 0) {
|
|
this.setpreviousTouchState(this._gameTouchs[0]);
|
|
}
|
|
return delta;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Input.initialize = function () {
|
|
if (this._init)
|
|
return;
|
|
this._init = true;
|
|
es.Core._instance.stage.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.touchBegin, this);
|
|
es.Core._instance.stage.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.touchMove, this);
|
|
es.Core._instance.stage.addEventListener(egret.TouchEvent.TOUCH_END, this.touchEnd, this);
|
|
es.Core._instance.stage.addEventListener(egret.TouchEvent.TOUCH_CANCEL, this.touchEnd, this);
|
|
es.Core._instance.stage.addEventListener(egret.TouchEvent.TOUCH_RELEASE_OUTSIDE, this.touchEnd, this);
|
|
this.initTouchCache();
|
|
};
|
|
Input.scaledPosition = function (position) {
|
|
var scaledPos = new es.Vector2(position.x - this._resolutionOffset.x, position.y - this._resolutionOffset.y);
|
|
return es.Vector2.multiply(scaledPos, this.resolutionScale);
|
|
};
|
|
Input.initTouchCache = function () {
|
|
this._totalTouchCount = 0;
|
|
this._touchIndex = 0;
|
|
this._gameTouchs.length = 0;
|
|
for (var i = 0; i < this.maxSupportedTouch; i++) {
|
|
this._gameTouchs.push(new TouchState());
|
|
}
|
|
};
|
|
Input.touchBegin = function (evt) {
|
|
if (this._touchIndex < this.maxSupportedTouch) {
|
|
this._gameTouchs[this._touchIndex].touchPoint = evt.touchPointID;
|
|
this._gameTouchs[this._touchIndex].touchDown = evt.touchDown;
|
|
this._gameTouchs[this._touchIndex].x = evt.stageX;
|
|
this._gameTouchs[this._touchIndex].y = evt.stageY;
|
|
if (this._touchIndex == 0) {
|
|
this.setpreviousTouchState(this._gameTouchs[0]);
|
|
}
|
|
this._touchIndex++;
|
|
this._totalTouchCount++;
|
|
}
|
|
};
|
|
Input.touchMove = function (evt) {
|
|
if (evt.touchPointID == this._gameTouchs[0].touchPoint) {
|
|
this.setpreviousTouchState(this._gameTouchs[0]);
|
|
}
|
|
var touchIndex = this._gameTouchs.findIndex(function (touch) { return touch.touchPoint == evt.touchPointID; });
|
|
if (touchIndex != -1) {
|
|
var touchData = this._gameTouchs[touchIndex];
|
|
touchData.x = evt.stageX;
|
|
touchData.y = evt.stageY;
|
|
}
|
|
};
|
|
Input.touchEnd = function (evt) {
|
|
var touchIndex = this._gameTouchs.findIndex(function (touch) { return touch.touchPoint == evt.touchPointID; });
|
|
if (touchIndex != -1) {
|
|
var touchData = this._gameTouchs[touchIndex];
|
|
touchData.reset();
|
|
if (touchIndex == 0)
|
|
this._previousTouchState.reset();
|
|
this._totalTouchCount--;
|
|
if (this.totalTouchCount == 0) {
|
|
this._touchIndex = 0;
|
|
}
|
|
}
|
|
};
|
|
Input.setpreviousTouchState = function (touchState) {
|
|
this._previousTouchState = new TouchState();
|
|
this._previousTouchState.x = touchState.position.x;
|
|
this._previousTouchState.y = touchState.position.y;
|
|
this._previousTouchState.touchPoint = touchState.touchPoint;
|
|
this._previousTouchState.touchDown = touchState.touchDown;
|
|
};
|
|
Input._init = false;
|
|
Input._previousTouchState = new TouchState();
|
|
Input._resolutionOffset = new es.Vector2();
|
|
Input._touchIndex = 0;
|
|
Input._gameTouchs = [];
|
|
Input._resolutionScale = es.Vector2.one;
|
|
Input._totalTouchCount = 0;
|
|
return Input;
|
|
}());
|
|
es.Input = Input;
|
|
})(es || (es = {}));
|
|
var KeyboardUtils = (function () {
|
|
function KeyboardUtils() {
|
|
}
|
|
KeyboardUtils.init = function () {
|
|
KeyboardUtils.keyDownDict = {};
|
|
KeyboardUtils.keyUpDict = {};
|
|
document.addEventListener("keydown", KeyboardUtils.onKeyDonwHander);
|
|
document.addEventListener("keyup", KeyboardUtils.onKeyUpHander);
|
|
};
|
|
KeyboardUtils.registerKey = function (key, fun, thisObj, type) {
|
|
if (type === void 0) { type = 0; }
|
|
var args = [];
|
|
for (var _i = 4; _i < arguments.length; _i++) {
|
|
args[_i - 4] = arguments[_i];
|
|
}
|
|
var keyDict = type ? this.keyUpDict : this.keyDownDict;
|
|
keyDict[key] = { "fun": fun, args: args, "thisObj": thisObj };
|
|
};
|
|
KeyboardUtils.unregisterKey = function (key, type) {
|
|
if (type === void 0) { type = 0; }
|
|
var keyDict = type ? this.keyUpDict : this.keyDownDict;
|
|
delete keyDict[key];
|
|
};
|
|
KeyboardUtils.destroy = function () {
|
|
KeyboardUtils.keyDownDict = null;
|
|
KeyboardUtils.keyUpDict = null;
|
|
document.removeEventListener("keydown", this.onKeyDonwHander);
|
|
document.removeEventListener("keyup", this.onKeyUpHander);
|
|
};
|
|
KeyboardUtils.onKeyDonwHander = function (event) {
|
|
if (!KeyboardUtils.keyDownDict)
|
|
return;
|
|
var key = KeyboardUtils.keyCodeToString(event.keyCode);
|
|
var o = KeyboardUtils.keyDownDict[key];
|
|
if (o) {
|
|
var fun = o["fun"];
|
|
var thisObj = o["thisObj"];
|
|
var args = o["args"];
|
|
fun.apply(thisObj, args);
|
|
}
|
|
};
|
|
KeyboardUtils.onKeyUpHander = function (event) {
|
|
if (!KeyboardUtils.keyUpDict)
|
|
return;
|
|
var key = KeyboardUtils.keyCodeToString(event.keyCode);
|
|
var o = KeyboardUtils.keyUpDict[key];
|
|
if (o) {
|
|
var fun = o["fun"];
|
|
var thisObj = o["thisObj"];
|
|
var args = o["args"];
|
|
fun.apply(thisObj, args);
|
|
}
|
|
};
|
|
KeyboardUtils.keyCodeToString = function (keyCode) {
|
|
switch (keyCode) {
|
|
case 8:
|
|
return this.BACK_SPACE;
|
|
case 9:
|
|
return this.TAB;
|
|
case 13:
|
|
return this.ENTER;
|
|
case 16:
|
|
return this.SHIFT;
|
|
case 17:
|
|
return this.CTRL;
|
|
case 19:
|
|
return this.PAUSE_BREAK;
|
|
case 20:
|
|
return this.CAPS_LOCK;
|
|
case 27:
|
|
return this.ESC;
|
|
case 32:
|
|
return this.SPACE;
|
|
case 33:
|
|
return this.PAGE_UP;
|
|
case 34:
|
|
return this.PAGE_DOWN;
|
|
case 35:
|
|
return this.END;
|
|
case 36:
|
|
return this.HOME;
|
|
case 37:
|
|
return this.LEFT;
|
|
case 38:
|
|
return this.UP;
|
|
case 39:
|
|
return this.RIGHT;
|
|
case 40:
|
|
return this.DOWN;
|
|
case 45:
|
|
return this.INSERT;
|
|
case 46:
|
|
return this.DELETE;
|
|
case 91:
|
|
return this.WINDOWS;
|
|
case 112:
|
|
return this.F1;
|
|
case 113:
|
|
return this.F2;
|
|
case 114:
|
|
return this.F3;
|
|
case 115:
|
|
return this.F4;
|
|
case 116:
|
|
return this.F5;
|
|
case 117:
|
|
return this.F6;
|
|
case 118:
|
|
return this.F7;
|
|
case 119:
|
|
return this.F8;
|
|
case 120:
|
|
return this.F9;
|
|
case 122:
|
|
return this.F11;
|
|
case 123:
|
|
return this.F12;
|
|
case 144:
|
|
return this.NUM_LOCK;
|
|
case 145:
|
|
return this.SCROLL_LOCK;
|
|
default:
|
|
return String.fromCharCode(keyCode);
|
|
}
|
|
};
|
|
KeyboardUtils.TYPE_KEY_DOWN = 0;
|
|
KeyboardUtils.TYPE_KEY_UP = 1;
|
|
KeyboardUtils.A = "A";
|
|
KeyboardUtils.B = "B";
|
|
KeyboardUtils.C = "C";
|
|
KeyboardUtils.D = "D";
|
|
KeyboardUtils.E = "E";
|
|
KeyboardUtils.F = "F";
|
|
KeyboardUtils.G = "G";
|
|
KeyboardUtils.H = "H";
|
|
KeyboardUtils.I = "I";
|
|
KeyboardUtils.J = "J";
|
|
KeyboardUtils.K = "K";
|
|
KeyboardUtils.L = "L";
|
|
KeyboardUtils.M = "M";
|
|
KeyboardUtils.N = "N";
|
|
KeyboardUtils.O = "O";
|
|
KeyboardUtils.P = "P";
|
|
KeyboardUtils.Q = "Q";
|
|
KeyboardUtils.R = "R";
|
|
KeyboardUtils.S = "S";
|
|
KeyboardUtils.T = "T";
|
|
KeyboardUtils.U = "U";
|
|
KeyboardUtils.V = "V";
|
|
KeyboardUtils.W = "W";
|
|
KeyboardUtils.X = "X";
|
|
KeyboardUtils.Y = "Y";
|
|
KeyboardUtils.Z = "Z";
|
|
KeyboardUtils.ESC = "Esc";
|
|
KeyboardUtils.F1 = "F1";
|
|
KeyboardUtils.F2 = "F2";
|
|
KeyboardUtils.F3 = "F3";
|
|
KeyboardUtils.F4 = "F4";
|
|
KeyboardUtils.F5 = "F5";
|
|
KeyboardUtils.F6 = "F6";
|
|
KeyboardUtils.F7 = "F7";
|
|
KeyboardUtils.F8 = "F8";
|
|
KeyboardUtils.F9 = "F9";
|
|
KeyboardUtils.F10 = "F10";
|
|
KeyboardUtils.F11 = "F11";
|
|
KeyboardUtils.F12 = "F12";
|
|
KeyboardUtils.NUM_1 = "1";
|
|
KeyboardUtils.NUM_2 = "2";
|
|
KeyboardUtils.NUM_3 = "3";
|
|
KeyboardUtils.NUM_4 = "4";
|
|
KeyboardUtils.NUM_5 = "5";
|
|
KeyboardUtils.NUM_6 = "6";
|
|
KeyboardUtils.NUM_7 = "7";
|
|
KeyboardUtils.NUM_8 = "8";
|
|
KeyboardUtils.NUM_9 = "9";
|
|
KeyboardUtils.NUM_0 = "0";
|
|
KeyboardUtils.TAB = "Tab";
|
|
KeyboardUtils.CTRL = "Ctrl";
|
|
KeyboardUtils.ALT = "Alt";
|
|
KeyboardUtils.SHIFT = "Shift";
|
|
KeyboardUtils.CAPS_LOCK = "Caps Lock";
|
|
KeyboardUtils.ENTER = "Enter";
|
|
KeyboardUtils.SPACE = "Space";
|
|
KeyboardUtils.BACK_SPACE = "Back Space";
|
|
KeyboardUtils.INSERT = "Insert";
|
|
KeyboardUtils.DELETE = "Page Down";
|
|
KeyboardUtils.HOME = "Home";
|
|
KeyboardUtils.END = "Page Down";
|
|
KeyboardUtils.PAGE_UP = "Page Up";
|
|
KeyboardUtils.PAGE_DOWN = "Page Down";
|
|
KeyboardUtils.LEFT = "Left";
|
|
KeyboardUtils.RIGHT = "Right";
|
|
KeyboardUtils.UP = "Up";
|
|
KeyboardUtils.DOWN = "Down";
|
|
KeyboardUtils.PAUSE_BREAK = "Pause Break";
|
|
KeyboardUtils.NUM_LOCK = "Num Lock";
|
|
KeyboardUtils.SCROLL_LOCK = "Scroll Lock";
|
|
KeyboardUtils.WINDOWS = "Windows";
|
|
return KeyboardUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var ListPool = (function () {
|
|
function ListPool() {
|
|
}
|
|
ListPool.warmCache = function (cacheCount) {
|
|
cacheCount -= this._objectQueue.length;
|
|
if (cacheCount > 0) {
|
|
for (var i = 0; i < cacheCount; i++) {
|
|
this._objectQueue.unshift([]);
|
|
}
|
|
}
|
|
};
|
|
ListPool.trimCache = function (cacheCount) {
|
|
while (cacheCount > this._objectQueue.length)
|
|
this._objectQueue.shift();
|
|
};
|
|
ListPool.clearCache = function () {
|
|
this._objectQueue.length = 0;
|
|
};
|
|
ListPool.obtain = function () {
|
|
if (this._objectQueue.length > 0)
|
|
return this._objectQueue.shift();
|
|
return [];
|
|
};
|
|
ListPool.free = function (obj) {
|
|
this._objectQueue.unshift(obj);
|
|
obj.length = 0;
|
|
};
|
|
ListPool._objectQueue = [];
|
|
return ListPool;
|
|
}());
|
|
es.ListPool = ListPool;
|
|
})(es || (es = {}));
|
|
var THREAD_ID = Math.floor(Math.random() * 1000) + "-" + Date.now();
|
|
var nextTick = function (fn) {
|
|
setTimeout(fn, 0);
|
|
};
|
|
var LockUtils = (function () {
|
|
function LockUtils(key) {
|
|
this._keyX = "mutex_key_" + key + "_X";
|
|
this._keyY = "mutex_key_" + key + "_Y";
|
|
this.setItem = egret.localStorage.setItem.bind(localStorage);
|
|
this.getItem = egret.localStorage.getItem.bind(localStorage);
|
|
this.removeItem = egret.localStorage.removeItem.bind(localStorage);
|
|
}
|
|
LockUtils.prototype.lock = function () {
|
|
var _this = this;
|
|
return new Promise(function (resolve, reject) {
|
|
var fn = function () {
|
|
_this.setItem(_this._keyX, THREAD_ID);
|
|
if (!_this.getItem(_this._keyY) === null) {
|
|
nextTick(fn);
|
|
}
|
|
_this.setItem(_this._keyY, THREAD_ID);
|
|
if (_this.getItem(_this._keyX) !== THREAD_ID) {
|
|
setTimeout(function () {
|
|
if (_this.getItem(_this._keyY) !== THREAD_ID) {
|
|
nextTick(fn);
|
|
return;
|
|
}
|
|
resolve();
|
|
_this.removeItem(_this._keyY);
|
|
}, 10);
|
|
}
|
|
else {
|
|
resolve();
|
|
_this.removeItem(_this._keyY);
|
|
}
|
|
};
|
|
fn();
|
|
});
|
|
};
|
|
return LockUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var Pair = (function () {
|
|
function Pair(first, second) {
|
|
this.first = first;
|
|
this.second = second;
|
|
}
|
|
Pair.prototype.clear = function () {
|
|
this.first = this.second = null;
|
|
};
|
|
Pair.prototype.equals = function (other) {
|
|
return this.first == other.first && this.second == other.second;
|
|
};
|
|
return Pair;
|
|
}());
|
|
es.Pair = Pair;
|
|
})(es || (es = {}));
|
|
var RandomUtils = (function () {
|
|
function RandomUtils() {
|
|
}
|
|
RandomUtils.randrange = function (start, stop, step) {
|
|
if (step === void 0) { step = 1; }
|
|
if (step == 0)
|
|
throw new Error('step 不能为 0');
|
|
var width = stop - start;
|
|
if (width == 0)
|
|
throw new Error('没有可用的范围(' + start + ',' + stop + ')');
|
|
if (width < 0)
|
|
width = start - stop;
|
|
var n = Math.floor((width + step - 1) / step);
|
|
return Math.floor(this.random() * n) * step + Math.min(start, stop);
|
|
};
|
|
RandomUtils.randint = function (a, b) {
|
|
a = Math.floor(a);
|
|
b = Math.floor(b);
|
|
if (a > b)
|
|
a++;
|
|
else
|
|
b++;
|
|
return this.randrange(a, b);
|
|
};
|
|
RandomUtils.randnum = function (a, b) {
|
|
return this.random() * (b - a) + a;
|
|
};
|
|
RandomUtils.shuffle = function (array) {
|
|
array.sort(this._randomCompare);
|
|
return array;
|
|
};
|
|
RandomUtils.choice = function (sequence) {
|
|
if (!sequence.hasOwnProperty("length"))
|
|
throw new Error('无法对此对象执行此操作');
|
|
var index = Math.floor(this.random() * sequence.length);
|
|
if (sequence instanceof String)
|
|
return String(sequence).charAt(index);
|
|
else
|
|
return sequence[index];
|
|
};
|
|
RandomUtils.sample = function (sequence, num) {
|
|
var len = sequence.length;
|
|
if (num <= 0 || len < num)
|
|
throw new Error("采样数量不够");
|
|
var selected = [];
|
|
var indices = [];
|
|
for (var i = 0; i < num; i++) {
|
|
var index = Math.floor(this.random() * len);
|
|
while (indices.indexOf(index) >= 0)
|
|
index = Math.floor(this.random() * len);
|
|
selected.push(sequence[index]);
|
|
indices.push(index);
|
|
}
|
|
return selected;
|
|
};
|
|
RandomUtils.random = function () {
|
|
return Math.random();
|
|
};
|
|
RandomUtils.boolean = function (chance) {
|
|
if (chance === void 0) { chance = .5; }
|
|
return (this.random() < chance) ? true : false;
|
|
};
|
|
RandomUtils._randomCompare = function (a, b) {
|
|
return (this.random() > .5) ? 1 : -1;
|
|
};
|
|
return RandomUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var RectangleExt = (function () {
|
|
function RectangleExt() {
|
|
}
|
|
RectangleExt.getSide = function (rect, edge) {
|
|
switch (edge) {
|
|
case es.Edge.top:
|
|
return rect.top;
|
|
case es.Edge.bottom:
|
|
return rect.bottom;
|
|
case es.Edge.left:
|
|
return rect.left;
|
|
case es.Edge.right:
|
|
return rect.right;
|
|
}
|
|
};
|
|
RectangleExt.union = function (first, point) {
|
|
var rect = new es.Rectangle(point.x, point.y, 0, 0);
|
|
var result = new es.Rectangle();
|
|
result.x = Math.min(first.x, rect.x);
|
|
result.y = Math.min(first.y, rect.y);
|
|
result.width = Math.max(first.right, rect.right) - result.x;
|
|
result.height = Math.max(first.bottom, result.bottom) - result.y;
|
|
return result;
|
|
};
|
|
RectangleExt.getHalfRect = function (rect, edge) {
|
|
switch (edge) {
|
|
case es.Edge.top:
|
|
return new es.Rectangle(rect.x, rect.y, rect.width, rect.height / 2);
|
|
case es.Edge.bottom:
|
|
return new es.Rectangle(rect.x, rect.y + rect.height / 2, rect.width, rect.height / 2);
|
|
case es.Edge.left:
|
|
return new es.Rectangle(rect.x, rect.y, rect.width / 2, rect.height);
|
|
case es.Edge.right:
|
|
return new es.Rectangle(rect.x + rect.width / 2, rect.y, rect.width / 2, rect.height);
|
|
}
|
|
};
|
|
RectangleExt.getRectEdgePortion = function (rect, edge, size) {
|
|
if (size === void 0) { size = 1; }
|
|
switch (edge) {
|
|
case es.Edge.top:
|
|
return new es.Rectangle(rect.x, rect.y, rect.width, size);
|
|
case es.Edge.bottom:
|
|
return new es.Rectangle(rect.x, rect.y + rect.height - size, rect.width, size);
|
|
case es.Edge.left:
|
|
return new es.Rectangle(rect.x, rect.y, size, rect.height);
|
|
case es.Edge.right:
|
|
return new es.Rectangle(rect.x + rect.width - size, rect.y, size, rect.height);
|
|
}
|
|
};
|
|
RectangleExt.expandSide = function (rect, edge, amount) {
|
|
amount = Math.abs(amount);
|
|
switch (edge) {
|
|
case es.Edge.top:
|
|
rect.y -= amount;
|
|
rect.height += amount;
|
|
break;
|
|
case es.Edge.bottom:
|
|
rect.height += amount;
|
|
break;
|
|
case es.Edge.left:
|
|
rect.x -= amount;
|
|
rect.width += amount;
|
|
break;
|
|
case es.Edge.right:
|
|
rect.width += amount;
|
|
break;
|
|
}
|
|
};
|
|
RectangleExt.contract = function (rect, horizontalAmount, verticalAmount) {
|
|
rect.x += horizontalAmount;
|
|
rect.y += verticalAmount;
|
|
rect.width -= horizontalAmount * 2;
|
|
rect.height -= verticalAmount * 2;
|
|
};
|
|
return RectangleExt;
|
|
}());
|
|
es.RectangleExt = RectangleExt;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SubpixelNumber = (function () {
|
|
function SubpixelNumber() {
|
|
}
|
|
SubpixelNumber.prototype.update = function (amount) {
|
|
this.remainder += amount;
|
|
var motion = Math.trunc(this.remainder);
|
|
this.remainder -= motion;
|
|
return motion;
|
|
};
|
|
SubpixelNumber.prototype.reset = function () {
|
|
this.remainder = 0;
|
|
};
|
|
return SubpixelNumber;
|
|
}());
|
|
es.SubpixelNumber = SubpixelNumber;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Triangulator = (function () {
|
|
function Triangulator() {
|
|
this.triangleIndices = [];
|
|
this._triPrev = new Array(12);
|
|
this._triNext = new Array(12);
|
|
}
|
|
Triangulator.testPointTriangle = function (point, a, b, c) {
|
|
if (es.Vector2Ext.cross(es.Vector2.subtract(point, a), es.Vector2.subtract(b, a)) < 0)
|
|
return false;
|
|
if (es.Vector2Ext.cross(es.Vector2.subtract(point, b), es.Vector2.subtract(c, b)) < 0)
|
|
return false;
|
|
if (es.Vector2Ext.cross(es.Vector2.subtract(point, c), es.Vector2.subtract(a, c)) < 0)
|
|
return false;
|
|
return true;
|
|
};
|
|
Triangulator.prototype.triangulate = function (points, arePointsCCW) {
|
|
if (arePointsCCW === void 0) { arePointsCCW = true; }
|
|
var count = points.length;
|
|
this.initialize(count);
|
|
var iterations = 0;
|
|
var index = 0;
|
|
while (count > 3 && iterations < 500) {
|
|
iterations++;
|
|
var isEar = true;
|
|
var a = points[this._triPrev[index]];
|
|
var b = points[index];
|
|
var c = points[this._triNext[index]];
|
|
if (es.Vector2Ext.isTriangleCCW(a, b, c)) {
|
|
var k = this._triNext[this._triNext[index]];
|
|
do {
|
|
if (Triangulator.testPointTriangle(points[k], a, b, c)) {
|
|
isEar = false;
|
|
break;
|
|
}
|
|
k = this._triNext[k];
|
|
} while (k != this._triPrev[index]);
|
|
}
|
|
else {
|
|
isEar = false;
|
|
}
|
|
if (isEar) {
|
|
this.triangleIndices.push(this._triPrev[index]);
|
|
this.triangleIndices.push(index);
|
|
this.triangleIndices.push(this._triNext[index]);
|
|
this._triNext[this._triPrev[index]] = this._triNext[index];
|
|
this._triPrev[this._triNext[index]] = this._triPrev[index];
|
|
count--;
|
|
index = this._triPrev[index];
|
|
}
|
|
else {
|
|
index = this._triNext[index];
|
|
}
|
|
}
|
|
this.triangleIndices.push(this._triPrev[index]);
|
|
this.triangleIndices.push(index);
|
|
this.triangleIndices.push(this._triNext[index]);
|
|
if (!arePointsCCW)
|
|
this.triangleIndices.reverse();
|
|
};
|
|
Triangulator.prototype.initialize = function (count) {
|
|
this.triangleIndices.length = 0;
|
|
if (this._triNext.length < count) {
|
|
this._triNext.reverse();
|
|
this._triNext = new Array(Math.max(this._triNext.length * 2, count));
|
|
}
|
|
if (this._triPrev.length < count) {
|
|
this._triPrev.reverse();
|
|
this._triPrev = new Array(Math.max(this._triPrev.length * 2, count));
|
|
}
|
|
for (var i = 0; i < count; i++) {
|
|
this._triPrev[i] = i - 1;
|
|
this._triNext[i] = i + 1;
|
|
}
|
|
this._triPrev[0] = count - 1;
|
|
this._triNext[count - 1] = 0;
|
|
};
|
|
return Triangulator;
|
|
}());
|
|
es.Triangulator = Triangulator;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Vector2Ext = (function () {
|
|
function Vector2Ext() {
|
|
}
|
|
Vector2Ext.isTriangleCCW = function (a, center, c) {
|
|
return this.cross(es.Vector2.subtract(center, a), es.Vector2.subtract(c, center)) < 0;
|
|
};
|
|
Vector2Ext.cross = function (u, v) {
|
|
return u.y * v.x - u.x * v.y;
|
|
};
|
|
Vector2Ext.perpendicular = function (first, second) {
|
|
return new es.Vector2(-1 * (second.y - first.y), second.x - first.x);
|
|
};
|
|
Vector2Ext.normalize = function (vec) {
|
|
var magnitude = Math.sqrt((vec.x * vec.x) + (vec.y * vec.y));
|
|
if (magnitude > es.MathHelper.Epsilon) {
|
|
vec = es.Vector2.divide(vec, new es.Vector2(magnitude));
|
|
}
|
|
else {
|
|
vec.x = vec.y = 0;
|
|
}
|
|
return vec;
|
|
};
|
|
Vector2Ext.transformA = function (sourceArray, sourceIndex, matrix, destinationArray, destinationIndex, length) {
|
|
for (var i = 0; i < length; i++) {
|
|
var position = sourceArray[sourceIndex + i];
|
|
var destination = destinationArray[destinationIndex + i];
|
|
destination.x = (position.x * matrix.m11) + (position.y * matrix.m21) + matrix.m31;
|
|
destination.y = (position.x * matrix.m12) + (position.y * matrix.m22) + matrix.m32;
|
|
destinationArray[destinationIndex + i] = destination;
|
|
}
|
|
};
|
|
Vector2Ext.transformR = function (position, matrix) {
|
|
var x = (position.x * matrix.m11) + (position.y * matrix.m21) + matrix.m31;
|
|
var y = (position.x * matrix.m12) + (position.y * matrix.m22) + matrix.m32;
|
|
return new es.Vector2(x, y);
|
|
};
|
|
Vector2Ext.transform = function (sourceArray, matrix, destinationArray) {
|
|
this.transformA(sourceArray, 0, matrix, destinationArray, 0, sourceArray.length);
|
|
};
|
|
Vector2Ext.round = function (vec) {
|
|
return new es.Vector2(Math.round(vec.x), Math.round(vec.y));
|
|
};
|
|
return Vector2Ext;
|
|
}());
|
|
es.Vector2Ext = Vector2Ext;
|
|
})(es || (es = {}));
|
|
var WebGLUtils = (function () {
|
|
function WebGLUtils() {
|
|
}
|
|
WebGLUtils.getContext = function () {
|
|
var canvas = document.getElementsByTagName('canvas')[0];
|
|
return canvas.getContext('2d');
|
|
};
|
|
return WebGLUtils;
|
|
}());
|
|
var es;
|
|
(function (es) {
|
|
var Layout = (function () {
|
|
function Layout() {
|
|
this.clientArea = new es.Rectangle(0, 0, es.Core.graphicsDevice.viewport.width, es.Core.graphicsDevice.viewport.height);
|
|
this.safeArea = this.clientArea;
|
|
}
|
|
Layout.prototype.place = function (size, horizontalMargin, verticalMargine, alignment) {
|
|
var rc = new es.Rectangle(0, 0, size.x, size.y);
|
|
if ((alignment & Alignment.left) != 0) {
|
|
rc.x = this.clientArea.x + (this.clientArea.width * horizontalMargin);
|
|
}
|
|
else if ((alignment & Alignment.right) != 0) {
|
|
rc.x = this.clientArea.x + (this.clientArea.width * (1 - horizontalMargin)) - rc.width;
|
|
}
|
|
else if ((alignment & Alignment.horizontalCenter) != 0) {
|
|
rc.x = this.clientArea.x + (this.clientArea.width - rc.width) / 2 + (horizontalMargin * this.clientArea.width);
|
|
}
|
|
else {
|
|
}
|
|
if ((alignment & Alignment.top) != 0) {
|
|
rc.y = this.clientArea.y + (this.clientArea.height * verticalMargine);
|
|
}
|
|
else if ((alignment & Alignment.bottom) != 0) {
|
|
rc.y = this.clientArea.y + (this.clientArea.height * (1 - verticalMargine)) - rc.height;
|
|
}
|
|
else if ((alignment & Alignment.verticalCenter) != 0) {
|
|
rc.y = this.clientArea.y + (this.clientArea.height - rc.height) / 2 + (verticalMargine * this.clientArea.height);
|
|
}
|
|
else {
|
|
}
|
|
if (rc.left < this.safeArea.left)
|
|
rc.x = this.safeArea.left;
|
|
if (rc.right > this.safeArea.right)
|
|
rc.x = this.safeArea.right - rc.width;
|
|
if (rc.top < this.safeArea.top)
|
|
rc.y = this.safeArea.top;
|
|
if (rc.bottom > this.safeArea.bottom)
|
|
rc.y = this.safeArea.bottom - rc.height;
|
|
return rc;
|
|
};
|
|
return Layout;
|
|
}());
|
|
es.Layout = Layout;
|
|
var Alignment;
|
|
(function (Alignment) {
|
|
Alignment[Alignment["none"] = 0] = "none";
|
|
Alignment[Alignment["left"] = 1] = "left";
|
|
Alignment[Alignment["right"] = 2] = "right";
|
|
Alignment[Alignment["horizontalCenter"] = 4] = "horizontalCenter";
|
|
Alignment[Alignment["top"] = 8] = "top";
|
|
Alignment[Alignment["bottom"] = 16] = "bottom";
|
|
Alignment[Alignment["verticalCenter"] = 32] = "verticalCenter";
|
|
Alignment[Alignment["topLeft"] = 9] = "topLeft";
|
|
Alignment[Alignment["topRight"] = 10] = "topRight";
|
|
Alignment[Alignment["topCenter"] = 12] = "topCenter";
|
|
Alignment[Alignment["bottomLeft"] = 17] = "bottomLeft";
|
|
Alignment[Alignment["bottomRight"] = 18] = "bottomRight";
|
|
Alignment[Alignment["bottomCenter"] = 20] = "bottomCenter";
|
|
Alignment[Alignment["centerLeft"] = 33] = "centerLeft";
|
|
Alignment[Alignment["centerRight"] = 34] = "centerRight";
|
|
Alignment[Alignment["center"] = 36] = "center";
|
|
})(Alignment = es.Alignment || (es.Alignment = {}));
|
|
})(es || (es = {}));
|
|
var stopwatch;
|
|
(function (stopwatch) {
|
|
var Stopwatch = (function () {
|
|
function Stopwatch(getSystemTime) {
|
|
if (getSystemTime === void 0) { getSystemTime = _defaultSystemTimeGetter; }
|
|
this.getSystemTime = getSystemTime;
|
|
this._stopDuration = 0;
|
|
this._completeSlices = [];
|
|
}
|
|
Stopwatch.prototype.getState = function () {
|
|
if (this._startSystemTime === undefined) {
|
|
return State.IDLE;
|
|
}
|
|
else if (this._stopSystemTime === undefined) {
|
|
return State.RUNNING;
|
|
}
|
|
else {
|
|
return State.STOPPED;
|
|
}
|
|
};
|
|
Stopwatch.prototype.isIdle = function () {
|
|
return this.getState() === State.IDLE;
|
|
};
|
|
Stopwatch.prototype.isRunning = function () {
|
|
return this.getState() === State.RUNNING;
|
|
};
|
|
Stopwatch.prototype.isStopped = function () {
|
|
return this.getState() === State.STOPPED;
|
|
};
|
|
Stopwatch.prototype.slice = function () {
|
|
return this.recordPendingSlice();
|
|
};
|
|
Stopwatch.prototype.getCompletedSlices = function () {
|
|
return Array.from(this._completeSlices);
|
|
};
|
|
Stopwatch.prototype.getCompletedAndPendingSlices = function () {
|
|
return this._completeSlices.concat([this.getPendingSlice()]);
|
|
};
|
|
Stopwatch.prototype.getPendingSlice = function () {
|
|
return this.calculatePendingSlice();
|
|
};
|
|
Stopwatch.prototype.getTime = function () {
|
|
return this.caculateStopwatchTime();
|
|
};
|
|
Stopwatch.prototype.reset = function () {
|
|
this._startSystemTime = this._pendingSliceStartStopwatchTime = this._stopSystemTime = undefined;
|
|
this._stopDuration = 0;
|
|
this._completeSlices = [];
|
|
};
|
|
Stopwatch.prototype.start = function (forceReset) {
|
|
if (forceReset === void 0) { forceReset = false; }
|
|
if (forceReset) {
|
|
this.reset();
|
|
}
|
|
if (this._stopSystemTime !== undefined) {
|
|
var systemNow = this.getSystemTime();
|
|
var stopDuration = systemNow - this._stopSystemTime;
|
|
this._stopDuration += stopDuration;
|
|
this._stopSystemTime = undefined;
|
|
}
|
|
else if (this._startSystemTime === undefined) {
|
|
var systemNow = this.getSystemTime();
|
|
this._startSystemTime = systemNow;
|
|
this._pendingSliceStartStopwatchTime = 0;
|
|
}
|
|
};
|
|
Stopwatch.prototype.stop = function (recordPendingSlice) {
|
|
if (recordPendingSlice === void 0) { recordPendingSlice = false; }
|
|
if (this._startSystemTime === undefined) {
|
|
return 0;
|
|
}
|
|
var systemTimeOfStopwatchTime = this.getSystemTimeOfCurrentStopwatchTime();
|
|
if (recordPendingSlice) {
|
|
this.recordPendingSlice(this.caculateStopwatchTime(systemTimeOfStopwatchTime));
|
|
}
|
|
this._stopSystemTime = systemTimeOfStopwatchTime;
|
|
return this.getTime();
|
|
};
|
|
Stopwatch.prototype.calculatePendingSlice = function (endStopwatchTime) {
|
|
if (this._pendingSliceStartStopwatchTime === undefined) {
|
|
return Object.freeze({ startTime: 0, endTime: 0, duration: 0 });
|
|
}
|
|
if (endStopwatchTime === undefined) {
|
|
endStopwatchTime = this.getTime();
|
|
}
|
|
return Object.freeze({
|
|
startTime: this._pendingSliceStartStopwatchTime,
|
|
endTime: endStopwatchTime,
|
|
duration: endStopwatchTime - this._pendingSliceStartStopwatchTime
|
|
});
|
|
};
|
|
Stopwatch.prototype.caculateStopwatchTime = function (endSystemTime) {
|
|
if (this._startSystemTime === undefined)
|
|
return 0;
|
|
if (endSystemTime === undefined)
|
|
endSystemTime = this.getSystemTimeOfCurrentStopwatchTime();
|
|
return endSystemTime - this._startSystemTime - this._stopDuration;
|
|
};
|
|
Stopwatch.prototype.getSystemTimeOfCurrentStopwatchTime = function () {
|
|
return this._stopSystemTime === undefined ? this.getSystemTime() : this._stopSystemTime;
|
|
};
|
|
Stopwatch.prototype.recordPendingSlice = function (endStopwatchTime) {
|
|
if (this._pendingSliceStartStopwatchTime !== undefined) {
|
|
if (endStopwatchTime === undefined) {
|
|
endStopwatchTime = this.getTime();
|
|
}
|
|
var slice = this.calculatePendingSlice(endStopwatchTime);
|
|
this._pendingSliceStartStopwatchTime = slice.endTime;
|
|
this._completeSlices.push(slice);
|
|
return slice;
|
|
}
|
|
else {
|
|
return this.calculatePendingSlice();
|
|
}
|
|
};
|
|
return Stopwatch;
|
|
}());
|
|
stopwatch.Stopwatch = Stopwatch;
|
|
var State;
|
|
(function (State) {
|
|
State["IDLE"] = "IDLE";
|
|
State["RUNNING"] = "RUNNING";
|
|
State["STOPPED"] = "STOPPED";
|
|
})(State || (State = {}));
|
|
function setDefaultSystemTimeGetter(systemTimeGetter) {
|
|
if (systemTimeGetter === void 0) { systemTimeGetter = Date.now; }
|
|
_defaultSystemTimeGetter = systemTimeGetter;
|
|
}
|
|
stopwatch.setDefaultSystemTimeGetter = setDefaultSystemTimeGetter;
|
|
var _defaultSystemTimeGetter = Date.now;
|
|
})(stopwatch || (stopwatch = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TimeRuler = (function () {
|
|
function TimeRuler() {
|
|
this.showLog = false;
|
|
this._frameKey = 'frame';
|
|
this._logKey = 'log';
|
|
this.markers = [];
|
|
this.stopwacth = new stopwatch.Stopwatch();
|
|
this._markerNameToIdMap = new Map();
|
|
this._logs = new Array(2);
|
|
for (var i = 0; i < this._logs.length; ++i)
|
|
this._logs[i] = new FrameLog();
|
|
this.sampleFrames = this.targetSampleFrames = 1;
|
|
this.width = es.Core.graphicsDevice.viewport.width * 0.8;
|
|
es.Core.emitter.addObserver(es.CoreEvents.GraphicsDeviceReset, this.onGraphicsDeviceReset, this);
|
|
this.onGraphicsDeviceReset();
|
|
}
|
|
Object.defineProperty(TimeRuler, "Instance", {
|
|
get: function () {
|
|
if (!this._instance)
|
|
this._instance = new TimeRuler();
|
|
return this._instance;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
TimeRuler.prototype.startFrame = function () {
|
|
var _this = this;
|
|
var lock = new LockUtils(this._frameKey);
|
|
lock.lock().then(function () {
|
|
_this._updateCount = parseInt(egret.localStorage.getItem(_this._frameKey), 10);
|
|
if (isNaN(_this._updateCount))
|
|
_this._updateCount = 0;
|
|
var count = _this._updateCount;
|
|
count += 1;
|
|
egret.localStorage.setItem(_this._frameKey, count.toString());
|
|
if (_this.enabled && (1 < count && count < TimeRuler.maxSampleFrames))
|
|
return;
|
|
_this._prevLog = _this._logs[_this.frameCount++ & 0x1];
|
|
_this._curLog = _this._logs[_this.frameCount & 0x1];
|
|
var endFrameTime = _this.stopwacth.getTime();
|
|
for (var barIndex = 0; barIndex < _this._prevLog.bars.length; ++barIndex) {
|
|
var prevBar = _this._prevLog.bars[barIndex];
|
|
var nextBar = _this._curLog.bars[barIndex];
|
|
for (var nest = 0; nest < prevBar.nestCount; ++nest) {
|
|
var markerIdx = prevBar.markerNests[nest];
|
|
prevBar.markers[markerIdx].endTime = endFrameTime;
|
|
nextBar.markerNests[nest] = nest;
|
|
nextBar.markers[nest].markerId = prevBar.markers[markerIdx].markerId;
|
|
nextBar.markers[nest].beginTime = 0;
|
|
nextBar.markers[nest].endTime = -1;
|
|
nextBar.markers[nest].color = prevBar.markers[markerIdx].color;
|
|
}
|
|
for (var markerIdx = 0; markerIdx < prevBar.markCount; ++markerIdx) {
|
|
var duration = prevBar.markers[markerIdx].endTime - prevBar.markers[markerIdx].beginTime;
|
|
var markerId = prevBar.markers[markerIdx].markerId;
|
|
var m = _this.markers[markerId];
|
|
m.logs[barIndex].color = prevBar.markers[markerIdx].color;
|
|
if (!m.logs[barIndex].initialized) {
|
|
m.logs[barIndex].min = duration;
|
|
m.logs[barIndex].max = duration;
|
|
m.logs[barIndex].avg = duration;
|
|
m.logs[barIndex].initialized = true;
|
|
}
|
|
else {
|
|
m.logs[barIndex].min = Math.min(m.logs[barIndex].min, duration);
|
|
m.logs[barIndex].max = Math.min(m.logs[barIndex].max, duration);
|
|
m.logs[barIndex].avg += duration;
|
|
m.logs[barIndex].avg *= 0.5;
|
|
if (m.logs[barIndex].samples++ >= TimeRuler.logSnapDuration) {
|
|
m.logs[barIndex].snapMin = m.logs[barIndex].min;
|
|
m.logs[barIndex].snapMax = m.logs[barIndex].max;
|
|
m.logs[barIndex].snapAvg = m.logs[barIndex].avg;
|
|
m.logs[barIndex].samples = 0;
|
|
}
|
|
}
|
|
}
|
|
nextBar.markCount = prevBar.nestCount;
|
|
nextBar.nestCount = prevBar.nestCount;
|
|
}
|
|
_this.stopwacth.reset();
|
|
_this.stopwacth.start();
|
|
});
|
|
};
|
|
TimeRuler.prototype.beginMark = function (markerName, color, barIndex) {
|
|
var _this = this;
|
|
if (barIndex === void 0) { barIndex = 0; }
|
|
var lock = new LockUtils(this._frameKey);
|
|
lock.lock().then(function () {
|
|
if (barIndex < 0 || barIndex >= TimeRuler.maxBars)
|
|
throw new Error("barIndex argument out of range");
|
|
var bar = _this._curLog.bars[barIndex];
|
|
if (bar.markCount >= TimeRuler.maxSamples) {
|
|
throw new Error("exceeded sample count. either set larger number to timeruler.maxsaple or lower sample count");
|
|
}
|
|
if (bar.nestCount >= TimeRuler.maxNestCall) {
|
|
throw new Error("exceeded nest count. either set larger number to timeruler.maxnestcall or lower nest calls");
|
|
}
|
|
var markerId = _this._markerNameToIdMap.get(markerName);
|
|
if (isNaN(markerId)) {
|
|
markerId = _this.markers.length;
|
|
_this._markerNameToIdMap.set(markerName, markerId);
|
|
}
|
|
bar.markerNests[bar.nestCount++] = bar.markCount;
|
|
bar.markers[bar.markCount].markerId = markerId;
|
|
bar.markers[bar.markCount].color = color;
|
|
bar.markers[bar.markCount].beginTime = _this.stopwacth.getTime();
|
|
bar.markers[bar.markCount].endTime = -1;
|
|
});
|
|
};
|
|
TimeRuler.prototype.endMark = function (markerName, barIndex) {
|
|
var _this = this;
|
|
if (barIndex === void 0) { barIndex = 0; }
|
|
var lock = new LockUtils(this._frameKey);
|
|
lock.lock().then(function () {
|
|
if (barIndex < 0 || barIndex >= TimeRuler.maxBars)
|
|
throw new Error("barIndex argument out of range");
|
|
var bar = _this._curLog.bars[barIndex];
|
|
if (bar.nestCount <= 0) {
|
|
throw new Error("call beginMark method before calling endMark method");
|
|
}
|
|
var markerId = _this._markerNameToIdMap.get(markerName);
|
|
if (isNaN(markerId)) {
|
|
throw new Error("Marker " + markerName + " is not registered. Make sure you specifed same name as you used for beginMark method");
|
|
}
|
|
var markerIdx = bar.markerNests[--bar.nestCount];
|
|
if (bar.markers[markerIdx].markerId != markerId) {
|
|
throw new Error("Incorrect call order of beginMark/endMark method. beginMark(A), beginMark(B), endMark(B), endMark(A) But you can't called it like beginMark(A), beginMark(B), endMark(A), endMark(B).");
|
|
}
|
|
bar.markers[markerIdx].endTime = _this.stopwacth.getTime();
|
|
});
|
|
};
|
|
TimeRuler.prototype.getAverageTime = function (barIndex, markerName) {
|
|
if (barIndex < 0 || barIndex >= TimeRuler.maxBars) {
|
|
throw new Error("barIndex argument out of range");
|
|
}
|
|
var result = 0;
|
|
var markerId = this._markerNameToIdMap.get(markerName);
|
|
if (markerId) {
|
|
result = this.markers[markerId].logs[barIndex].avg;
|
|
}
|
|
return result;
|
|
};
|
|
TimeRuler.prototype.resetLog = function () {
|
|
var _this = this;
|
|
var lock = new LockUtils(this._logKey);
|
|
lock.lock().then(function () {
|
|
var count = parseInt(egret.localStorage.getItem(_this._logKey), 10);
|
|
count += 1;
|
|
egret.localStorage.setItem(_this._logKey, count.toString());
|
|
_this.markers.forEach(function (markerInfo) {
|
|
for (var i = 0; i < markerInfo.logs.length; ++i) {
|
|
markerInfo.logs[i].initialized = false;
|
|
markerInfo.logs[i].snapMin = 0;
|
|
markerInfo.logs[i].snapMax = 0;
|
|
markerInfo.logs[i].snapAvg = 0;
|
|
markerInfo.logs[i].min = 0;
|
|
markerInfo.logs[i].max = 0;
|
|
markerInfo.logs[i].avg = 0;
|
|
markerInfo.logs[i].samples = 0;
|
|
}
|
|
});
|
|
});
|
|
};
|
|
TimeRuler.prototype.render = function (position, width) {
|
|
if (position === void 0) { position = this._position; }
|
|
if (width === void 0) { width = this.width; }
|
|
egret.localStorage.setItem(this._frameKey, "0");
|
|
if (!this.showLog)
|
|
return;
|
|
var height = 0;
|
|
var maxTime = 0;
|
|
this._prevLog.bars.forEach(function (bar) {
|
|
if (bar.markCount > 0) {
|
|
height += TimeRuler.barHeight + TimeRuler.barPadding * 2;
|
|
maxTime = Math.max(maxTime, bar.markers[bar.markCount - 1].endTime);
|
|
}
|
|
});
|
|
var frameSpan = 1 / 60 * 1000;
|
|
var sampleSpan = this.sampleFrames * frameSpan;
|
|
if (maxTime > sampleSpan) {
|
|
this._frameAdjust = Math.max(0, this._frameAdjust) + 1;
|
|
}
|
|
else {
|
|
this._frameAdjust = Math.min(0, this._frameAdjust) - 1;
|
|
}
|
|
if (Math.max(this._frameAdjust) > TimeRuler.autoAdjustDelay) {
|
|
this.sampleFrames = Math.min(TimeRuler.maxSampleFrames, this.sampleFrames);
|
|
this.sampleFrames = Math.max(this.targetSampleFrames, (maxTime / frameSpan) + 1);
|
|
this._frameAdjust = 0;
|
|
}
|
|
var msToPs = width / sampleSpan;
|
|
var startY = position.y - (height - TimeRuler.barHeight);
|
|
var y = startY;
|
|
};
|
|
TimeRuler.prototype.onGraphicsDeviceReset = function () {
|
|
var layout = new es.Layout();
|
|
this._position = layout.place(new es.Vector2(this.width, TimeRuler.barHeight), 0, 0.01, es.Alignment.bottomCenter).location;
|
|
};
|
|
TimeRuler.maxBars = 8;
|
|
TimeRuler.maxSamples = 256;
|
|
TimeRuler.maxNestCall = 32;
|
|
TimeRuler.barHeight = 8;
|
|
TimeRuler.maxSampleFrames = 4;
|
|
TimeRuler.logSnapDuration = 120;
|
|
TimeRuler.barPadding = 2;
|
|
TimeRuler.autoAdjustDelay = 30;
|
|
return TimeRuler;
|
|
}());
|
|
es.TimeRuler = TimeRuler;
|
|
var FrameLog = (function () {
|
|
function FrameLog() {
|
|
this.bars = new Array(TimeRuler.maxBars);
|
|
this.bars.fill(new MarkerCollection(), 0, TimeRuler.maxBars);
|
|
}
|
|
return FrameLog;
|
|
}());
|
|
es.FrameLog = FrameLog;
|
|
var MarkerCollection = (function () {
|
|
function MarkerCollection() {
|
|
this.markers = new Array(TimeRuler.maxSamples);
|
|
this.markCount = 0;
|
|
this.markerNests = new Array(TimeRuler.maxNestCall);
|
|
this.nestCount = 0;
|
|
this.markers.fill(new Marker(), 0, TimeRuler.maxSamples);
|
|
this.markerNests.fill(0, 0, TimeRuler.maxNestCall);
|
|
}
|
|
return MarkerCollection;
|
|
}());
|
|
es.MarkerCollection = MarkerCollection;
|
|
var Marker = (function () {
|
|
function Marker() {
|
|
this.markerId = 0;
|
|
this.beginTime = 0;
|
|
this.endTime = 0;
|
|
this.color = 0x000000;
|
|
}
|
|
return Marker;
|
|
}());
|
|
es.Marker = Marker;
|
|
var MarkerInfo = (function () {
|
|
function MarkerInfo(name) {
|
|
this.logs = new Array(TimeRuler.maxBars);
|
|
this.name = name;
|
|
this.logs.fill(new MarkerLog(), 0, TimeRuler.maxBars);
|
|
}
|
|
return MarkerInfo;
|
|
}());
|
|
es.MarkerInfo = MarkerInfo;
|
|
var MarkerLog = (function () {
|
|
function MarkerLog() {
|
|
this.snapMin = 0;
|
|
this.snapMax = 0;
|
|
this.snapAvg = 0;
|
|
this.min = 0;
|
|
this.max = 0;
|
|
this.avg = 0;
|
|
this.samples = 0;
|
|
this.color = 0x000000;
|
|
this.initialized = false;
|
|
}
|
|
return MarkerLog;
|
|
}());
|
|
es.MarkerLog = MarkerLog;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var Bitmap = egret.Bitmap;
|
|
var AssetPacker = (function () {
|
|
function AssetPacker() {
|
|
this.itemsToRaster = [];
|
|
this.useCache = false;
|
|
this.cacheName = "";
|
|
this._sprites = new Map();
|
|
this.allow4096Textures = false;
|
|
}
|
|
AssetPacker.prototype.addTextureToPack = function (texture, customID) {
|
|
this.itemsToRaster.push(new es.TextureToPack(texture, customID));
|
|
};
|
|
AssetPacker.prototype.process = function (allow4096Textures) {
|
|
if (allow4096Textures === void 0) { allow4096Textures = false; }
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var cacheExist;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
this.allow4096Textures = allow4096Textures;
|
|
if (!this.useCache) return [3, 2];
|
|
if (this.cacheName == "") {
|
|
console.error("未指定缓存名称");
|
|
return [2];
|
|
}
|
|
return [4, RES.getResByUrl(this.cacheName)];
|
|
case 1:
|
|
cacheExist = _a.sent();
|
|
if (!cacheExist)
|
|
this.createPack();
|
|
else
|
|
this.loadPack();
|
|
return [3, 3];
|
|
case 2:
|
|
this.createPack();
|
|
_a.label = 3;
|
|
case 3: return [2];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
AssetPacker.prototype.loadPack = function () {
|
|
return __awaiter(this, void 0, void 0, function () {
|
|
var loaderTexture;
|
|
return __generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4, RES.getResByUrl(this.cacheName)];
|
|
case 1:
|
|
loaderTexture = _a.sent();
|
|
if (this.onProcessCompleted)
|
|
this.onProcessCompleted();
|
|
return [2, loaderTexture];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
AssetPacker.prototype.createPack = function () {
|
|
var textures = [];
|
|
var images = [];
|
|
for (var _i = 0, _a = this.itemsToRaster; _i < _a.length; _i++) {
|
|
var itemToRaster = _a[_i];
|
|
textures.push(new Bitmap(itemToRaster.texture));
|
|
images.push(itemToRaster.id);
|
|
}
|
|
var textureSize = this.allow4096Textures ? 4096 : 2048;
|
|
var rectangles = [];
|
|
for (var i = 0; i < textures.length; i++) {
|
|
if (textures[i].width > textureSize || textures[i].height > textureSize) {
|
|
throw new Error("一个纹理的大小比图集的大小大");
|
|
}
|
|
else {
|
|
rectangles.push(new es.Rectangle(0, 0, textures[i].width, textures[i].height));
|
|
}
|
|
}
|
|
var padding = 1;
|
|
var numSpriteSheet = 0;
|
|
while (rectangles.length > 0) {
|
|
var texture = new egret.RenderTexture();
|
|
var packer = new es.RectanglePacker(textureSize, textureSize, padding);
|
|
for (var i = 0; i < rectangles.length; i++)
|
|
packer.insertRectangle(Math.floor(rectangles[i].width), Math.floor(rectangles[i].height), i);
|
|
packer.packRectangles();
|
|
if (packer.rectangleCount > 0) {
|
|
var rect = new es.IntegerRectangle();
|
|
var textureAssets = [];
|
|
var garbageRect = [];
|
|
var garabeTextures = [];
|
|
var garbageImages = [];
|
|
for (var j = 0; j < packer.rectangleCount; j++) {
|
|
rect = packer.getRectangle(j, rect);
|
|
var index = packer.getRectangleId(j);
|
|
texture.drawToTexture(textures[index], new es.Rectangle(rect.x, rect.y, rect.width, rect.height));
|
|
var textureAsset = new es.TextureAsset();
|
|
textureAsset.x = rect.x;
|
|
textureAsset.y = rect.y;
|
|
textureAsset.width = rect.width;
|
|
textureAsset.height = rect.height;
|
|
textureAsset.name = images[index];
|
|
textureAssets.push(textureAsset);
|
|
garbageRect.push(rectangles[index]);
|
|
garabeTextures.push(textures[index].texture);
|
|
garbageImages.push(images[index]);
|
|
}
|
|
for (var _b = 0, garbageRect_1 = garbageRect; _b < garbageRect_1.length; _b++) {
|
|
var garbage = garbageRect_1[_b];
|
|
rectangles.remove(garbage);
|
|
}
|
|
var _loop_9 = function (garbage) {
|
|
textures.removeAll(function (a) { return a.texture.hashCode == garbage.hashCode; });
|
|
};
|
|
for (var _c = 0, garabeTextures_1 = garabeTextures; _c < garabeTextures_1.length; _c++) {
|
|
var garbage = garabeTextures_1[_c];
|
|
_loop_9(garbage);
|
|
}
|
|
for (var _d = 0, garbageImages_1 = garbageImages; _d < garbageImages_1.length; _d++) {
|
|
var garbage = garbageImages_1[_d];
|
|
images.remove(garbage);
|
|
}
|
|
if (this.cacheName != "") {
|
|
texture.saveToFile("image/png", this.cacheName);
|
|
++numSpriteSheet;
|
|
}
|
|
for (var _e = 0, textureAssets_1 = textureAssets; _e < textureAssets_1.length; _e++) {
|
|
var textureAsset = textureAssets_1[_e];
|
|
this._sprites.set(textureAsset.name, texture);
|
|
}
|
|
}
|
|
}
|
|
if (this.onProcessCompleted)
|
|
this.onProcessCompleted();
|
|
};
|
|
AssetPacker.prototype.dispose = function () {
|
|
this._sprites.forEach(function (asset, name) {
|
|
asset.dispose();
|
|
RES.destroyRes(name);
|
|
});
|
|
this._sprites.clear();
|
|
};
|
|
AssetPacker.prototype.getTexture = function (id) {
|
|
return this._sprites.get(id);
|
|
};
|
|
return AssetPacker;
|
|
}());
|
|
es.AssetPacker = AssetPacker;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var IntegerRectangle = (function (_super) {
|
|
__extends(IntegerRectangle, _super);
|
|
function IntegerRectangle() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
return IntegerRectangle;
|
|
}(es.Rectangle));
|
|
es.IntegerRectangle = IntegerRectangle;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var RectanglePacker = (function () {
|
|
function RectanglePacker(width, height, padding) {
|
|
if (padding === void 0) { padding = 0; }
|
|
this._width = 0;
|
|
this._height = 0;
|
|
this._padding = 8;
|
|
this._packedWidth = 0;
|
|
this._packedHeight = 0;
|
|
this._insertList = [];
|
|
this._insertedRectangles = [];
|
|
this._freeAreas = [];
|
|
this._newFreeAreas = [];
|
|
this._sortableSizeStack = [];
|
|
this._rectangleStack = [];
|
|
this._outsideRectangle = new es.IntegerRectangle(width + 1, height + 1, 0, 0);
|
|
this.reset(width, height, padding);
|
|
}
|
|
Object.defineProperty(RectanglePacker.prototype, "rectangleCount", {
|
|
get: function () {
|
|
return this._insertedRectangles.length;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RectanglePacker.prototype, "packedWidth", {
|
|
get: function () {
|
|
return this._packedWidth;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RectanglePacker.prototype, "packedHeight", {
|
|
get: function () {
|
|
return this._packedHeight;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(RectanglePacker.prototype, "padding", {
|
|
get: function () {
|
|
return this._padding;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
RectanglePacker.prototype.reset = function (width, height, padding) {
|
|
if (padding === void 0) { padding = 0; }
|
|
while (this._insertedRectangles.length > 0)
|
|
this.freeRectangle(this._insertedRectangles.pop());
|
|
while (this._freeAreas.length > 0)
|
|
this.freeRectangle(this._freeAreas.pop());
|
|
this._width = width;
|
|
this._height = height;
|
|
this._packedWidth = 0;
|
|
this._packedHeight = 0;
|
|
this._freeAreas.push(this.allocateRectangle(0, 0, this._width, this._height));
|
|
while (this._insertedRectangles.length > 0)
|
|
this.freeSize(this._insertList.pop());
|
|
this._padding = padding;
|
|
};
|
|
RectanglePacker.prototype.insertRectangle = function (width, height, id) {
|
|
var sortableSize = this.allocateSize(width, height, id);
|
|
this._insertList.push(sortableSize);
|
|
};
|
|
RectanglePacker.prototype.packRectangles = function (sort) {
|
|
if (sort === void 0) { sort = true; }
|
|
if (sort)
|
|
this._insertList.sort(function (emp1, emp2) {
|
|
return emp1.width - emp2.width;
|
|
});
|
|
while (this._insertList.length > 0) {
|
|
var sortableSize = this._insertList.pop();
|
|
var width = sortableSize.width;
|
|
var height = sortableSize.height;
|
|
var index = this.getFreeAreaIndex(width, height);
|
|
if (index >= 0) {
|
|
var freeArea = this._freeAreas[index];
|
|
var target = this.allocateRectangle(freeArea.x, freeArea.y, width, height);
|
|
target.id = sortableSize.id;
|
|
this.generateNewFreeAreas(target, this._freeAreas, this._newFreeAreas);
|
|
while (this._newFreeAreas.length > 0)
|
|
this._freeAreas.push(this._newFreeAreas.pop());
|
|
this._insertedRectangles.push(target);
|
|
if (target.right > this._packedWidth)
|
|
this._packedWidth = target.right;
|
|
if (target.bottom > this._packedHeight)
|
|
this._packedHeight = target.bottom;
|
|
}
|
|
this.freeSize(sortableSize);
|
|
}
|
|
return this.rectangleCount;
|
|
};
|
|
RectanglePacker.prototype.getRectangle = function (index, rectangle) {
|
|
var inserted = this._insertedRectangles[index];
|
|
rectangle.x = inserted.x;
|
|
rectangle.y = inserted.y;
|
|
rectangle.width = inserted.width;
|
|
rectangle.height = inserted.height;
|
|
return rectangle;
|
|
};
|
|
RectanglePacker.prototype.getRectangleId = function (index) {
|
|
var inserted = this._insertedRectangles[index];
|
|
return inserted.id;
|
|
};
|
|
RectanglePacker.prototype.generateNewFreeAreas = function (target, areas, results) {
|
|
var x = target.x;
|
|
var y = target.y;
|
|
var right = target.right + 1 + this._padding;
|
|
var bottom = target.bottom + 1 + this._padding;
|
|
var targetWithPadding = null;
|
|
if (this._padding == 0)
|
|
targetWithPadding = target;
|
|
for (var i = areas.length - 1; i >= 0; i--) {
|
|
var area = areas[i];
|
|
if (!(x >= area.right || right <= area.x || y >= area.bottom || bottom <= area.y)) {
|
|
if (targetWithPadding == null)
|
|
targetWithPadding = this.allocateRectangle(target.x, target.y, target.width + this._padding, target.height + this._padding);
|
|
this.generateDividedAreas(targetWithPadding, area, results);
|
|
var topOfStack = areas.pop();
|
|
if (i < areas.length) {
|
|
areas[i] = topOfStack;
|
|
}
|
|
}
|
|
}
|
|
if (targetWithPadding != null && targetWithPadding != target)
|
|
this.freeRectangle(targetWithPadding);
|
|
this.filterSelfSubAreas(results);
|
|
};
|
|
RectanglePacker.prototype.filterSelfSubAreas = function (areas) {
|
|
for (var i = areas.length - 1; i >= 0; i--) {
|
|
var filtered = areas[i];
|
|
for (var j = areas.length - 1; j >= 0; j--) {
|
|
if (i != j) {
|
|
var area = areas[j];
|
|
if (filtered.x >= area.x && filtered.y >= area.y && filtered.right <= area.right && filtered.bottom <= area.bottom) {
|
|
this.freeRectangle(filtered);
|
|
var topOfStack = areas.pop();
|
|
if (i < areas.length) {
|
|
areas[i] = topOfStack;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
RectanglePacker.prototype.generateDividedAreas = function (divider, area, results) {
|
|
var count = 0;
|
|
var rightDelta = area.right - divider.right;
|
|
if (rightDelta > 0) {
|
|
results.push(this.allocateRectangle(divider.right, area.y, rightDelta, area.height));
|
|
count++;
|
|
}
|
|
var leftDelta = divider.x - area.x;
|
|
if (leftDelta > 0) {
|
|
results.push(this.allocateRectangle(area.x, area.y, leftDelta, area.height));
|
|
count++;
|
|
}
|
|
var bottomDelta = area.bottom - divider.bottom;
|
|
if (bottomDelta > 0) {
|
|
results.push(this.allocateRectangle(area.x, divider.bottom, area.width, bottomDelta));
|
|
count++;
|
|
}
|
|
var topDelta = divider.y - area.y;
|
|
if (topDelta > 0) {
|
|
results.push(this.allocateRectangle(area.x, area.y, area.width, topDelta));
|
|
count++;
|
|
}
|
|
if (count == 0 && (divider.width < area.width || divider.height < area.height)) {
|
|
results.push(area);
|
|
}
|
|
else {
|
|
this.freeRectangle(area);
|
|
}
|
|
};
|
|
RectanglePacker.prototype.getFreeAreaIndex = function (width, height) {
|
|
var best = this._outsideRectangle;
|
|
var index = -1;
|
|
var paddedWidth = width + this._padding;
|
|
var paddedHeight = height + this._padding;
|
|
var count = this._freeAreas.length;
|
|
for (var i = count - 1; i >= 0; i--) {
|
|
var free = this._freeAreas[i];
|
|
if (free.x < this._packedWidth || free.y < this.packedHeight) {
|
|
if (free.x < best.x && paddedWidth <= free.width && paddedHeight <= free.height) {
|
|
index = i;
|
|
if ((paddedWidth == free.width && free.width <= free.height && free.right < this._width) ||
|
|
(paddedHeight == free.height && free.height <= free.width)) {
|
|
break;
|
|
}
|
|
best = free;
|
|
}
|
|
}
|
|
else {
|
|
if (free.x < best.x && width <= free.width && height <= free.height) {
|
|
index = i;
|
|
if ((width == free.width && free.width <= free.height && free.right < this._width) ||
|
|
(height == free.height && free.height <= free.width)) {
|
|
break;
|
|
}
|
|
best = free;
|
|
}
|
|
}
|
|
}
|
|
return index;
|
|
};
|
|
RectanglePacker.prototype.allocateSize = function (width, height, id) {
|
|
if (this._sortableSizeStack.length > 0) {
|
|
var size = this._sortableSizeStack.pop();
|
|
size.width = width;
|
|
size.height = height;
|
|
size.id = id;
|
|
return size;
|
|
}
|
|
return new es.SortableSize(width, height, id);
|
|
};
|
|
RectanglePacker.prototype.freeSize = function (size) {
|
|
this._sortableSizeStack.push(size);
|
|
};
|
|
RectanglePacker.prototype.allocateRectangle = function (x, y, width, height) {
|
|
if (this._rectangleStack.length > 0) {
|
|
var rectangle = this._rectangleStack.pop();
|
|
rectangle.x = x;
|
|
rectangle.y = y;
|
|
rectangle.width = width;
|
|
rectangle.height = height;
|
|
rectangle.right = x + width;
|
|
rectangle.bottom = y + height;
|
|
return rectangle;
|
|
}
|
|
return new es.IntegerRectangle(x, y, width, height);
|
|
};
|
|
RectanglePacker.prototype.freeRectangle = function (rectangle) {
|
|
this._rectangleStack.push(rectangle);
|
|
};
|
|
return RectanglePacker;
|
|
}());
|
|
es.RectanglePacker = RectanglePacker;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var SortableSize = (function () {
|
|
function SortableSize(width, height, id) {
|
|
this.width = width;
|
|
this.height = height;
|
|
this.id = id;
|
|
}
|
|
return SortableSize;
|
|
}());
|
|
es.SortableSize = SortableSize;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TextureAssets = (function () {
|
|
function TextureAssets(assets) {
|
|
this.assets = assets;
|
|
}
|
|
return TextureAssets;
|
|
}());
|
|
es.TextureAssets = TextureAssets;
|
|
var TextureAsset = (function () {
|
|
function TextureAsset() {
|
|
}
|
|
return TextureAsset;
|
|
}());
|
|
es.TextureAsset = TextureAsset;
|
|
})(es || (es = {}));
|
|
var es;
|
|
(function (es) {
|
|
var TextureToPack = (function () {
|
|
function TextureToPack(texture, id) {
|
|
this.texture = texture;
|
|
this.id = id;
|
|
}
|
|
return TextureToPack;
|
|
}());
|
|
es.TextureToPack = TextureToPack;
|
|
})(es || (es = {}));
|