优化框架性能,Time支持传入引擎dt

This commit is contained in:
yhh
2021-05-13 16:58:24 +08:00
parent 84922794fb
commit 9c7703eb2d
11 changed files with 374 additions and 417 deletions

View File

@@ -750,7 +750,7 @@ declare module es {
/** /**
* 获取EntitySystem处理器 * 获取EntitySystem处理器
*/ */
getEntityProcessor<T extends EntitySystem>(): T; getEntityProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T;
} }
} }
declare module transform { declare module transform {
@@ -1834,7 +1834,7 @@ declare module es {
update(): void; update(): void;
lateUpdate(): void; lateUpdate(): void;
end(): void; end(): void;
getProcessor<T extends EntitySystem>(): T; getProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T;
protected notifyEntityChanged(entity: Entity): void; protected notifyEntityChanged(entity: Entity): void;
protected removeFromProcessors(entity: Entity): void; protected removeFromProcessors(entity: Entity): void;
} }

View File

@@ -1627,8 +1627,8 @@ var es;
/** /**
* 获取EntitySystem处理器 * 获取EntitySystem处理器
*/ */
Scene.prototype.getEntityProcessor = function () { Scene.prototype.getEntityProcessor = function (type) {
return this.entityProcessors.getProcessor(); return this.entityProcessors.getProcessor(type);
}; };
return Scene; return Scene;
}()); }());
@@ -3408,12 +3408,20 @@ var es;
* @param entities * @param entities
*/ */
EntityProcessingSystem.prototype.process = function (entities) { EntityProcessingSystem.prototype.process = function (entities) {
var _this = this; if (entities.length == 0)
entities.forEach(function (entity) { return _this.processEntity(entity); }); return;
for (var i = 0, s = entities.length; i < s; ++i) {
var entity = entities[i];
this.processEntity(entity);
}
}; };
EntityProcessingSystem.prototype.lateProcess = function (entities) { EntityProcessingSystem.prototype.lateProcess = function (entities) {
var _this = this; if (entities.length == 0)
entities.forEach(function (entity) { return _this.lateProcessEntity(entity); }); return;
for (var i = 0, s = entities.length; i < s; ++i) {
var entity = entities[i];
this.lateProcessEntity(entity);
}
}; };
return EntityProcessingSystem; return EntityProcessingSystem;
}(es.EntitySystem)); }(es.EntitySystem));
@@ -3689,34 +3697,24 @@ var es;
* 立即从组件列表中删除所有组件 * 立即从组件列表中删除所有组件
*/ */
ComponentList.prototype.removeAllComponents = function () { ComponentList.prototype.removeAllComponents = function () {
var e_6, _a; if (this._components.length > 0) {
try { for (var i = 0, s = this._components.length; i < s; ++i) {
for (var _b = __values(this._components), _c = _b.next(); !_c.done; _c = _b.next()) { this.handleRemove(this._components[i]);
var component = _c.value;
this.handleRemove(component);
} }
this.componentsByType.clear();
this.componentsToAddByType.clear();
this._components.length = 0;
this._updatableComponents.length = 0;
this._componentsToAdd = {};
this._componentsToRemove = {};
this._componentsToAddList.length = 0;
this._componentsToRemoveList.length = 0;
} }
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_6) throw e_6.error; }
}
this.componentsByType.clear();
this.componentsToAddByType.clear();
this._components.length = 0;
this._updatableComponents.length = 0;
this._componentsToAdd = {};
this._componentsToRemove = {};
this._componentsToAddList.length = 0;
this._componentsToRemoveList.length = 0;
}; };
ComponentList.prototype.deregisterAllComponents = function () { ComponentList.prototype.deregisterAllComponents = function () {
var e_7, _a; if (this._components.length > 0) {
try { for (var i = 0, s = this._components.length; i < s; ++i) {
for (var _b = __values(this._components), _c = _b.next(); !_c.done; _c = _b.next()) { var component = this._components[i];
var component = _c.value;
if (!component) if (!component)
continue; continue;
// 处理IUpdatable // 处理IUpdatable
@@ -3726,32 +3724,17 @@ var es;
this._entity.scene.entityProcessors.onComponentRemoved(this._entity); this._entity.scene.entityProcessors.onComponentRemoved(this._entity);
} }
} }
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_7) throw e_7.error; }
}
}; };
ComponentList.prototype.registerAllComponents = function () { ComponentList.prototype.registerAllComponents = function () {
var e_8, _a; if (this._components.length > 0) {
try { for (var i = 0, s = this._components.length; i < s; ++i) {
for (var _b = __values(this._components), _c = _b.next(); !_c.done; _c = _b.next()) { var component = this._components[i];
var component = _c.value;
if (es.isIUpdatable(component)) if (es.isIUpdatable(component))
this._updatableComponents.push(component); this._updatableComponents.push(component);
this.addBits(component); this.addBits(component);
this._entity.scene.entityProcessors.onComponentAdded(this._entity); this._entity.scene.entityProcessors.onComponentAdded(this._entity);
} }
} }
catch (e_8_1) { e_8 = { error: e_8_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_8) throw e_8.error; }
}
}; };
ComponentList.prototype.decreaseBits = function (component) { ComponentList.prototype.decreaseBits = function (component) {
var bits = this._entity.componentBits; var bits = this._entity.componentBits;
@@ -3898,66 +3881,31 @@ var es;
} }
}; };
ComponentList.prototype.onEntityTransformChanged = function (comp) { ComponentList.prototype.onEntityTransformChanged = function (comp) {
var e_9, _a, e_10, _b; if (this._components.length > 0) {
try { for (var i = 0, s = this._components.length; i < s; ++i) {
for (var _c = __values(this._components), _d = _c.next(); !_d.done; _d = _c.next()) { var component = this._components[i];
var component = _d.value;
if (component.enabled) if (component.enabled)
component.onEntityTransformChanged(comp); component.onEntityTransformChanged(comp);
} }
} }
catch (e_9_1) { e_9 = { error: e_9_1 }; } if (this._componentsToAddList.length > 0) {
finally { for (var i = 0, s = this._componentsToAddList.length; i < s; ++i) {
try { var component = this._componentsToAddList[i];
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_9) throw e_9.error; }
}
try {
for (var _e = __values(this._componentsToAddList), _f = _e.next(); !_f.done; _f = _e.next()) {
var component = _f.value;
if (component.enabled) if (component.enabled)
component.onEntityTransformChanged(comp); component.onEntityTransformChanged(comp);
} }
} }
catch (e_10_1) { e_10 = { error: e_10_1 }; }
finally {
try {
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
}
finally { if (e_10) throw e_10.error; }
}
}; };
ComponentList.prototype.onEntityEnabled = function () { ComponentList.prototype.onEntityEnabled = function () {
var e_11, _a; if (this._components.length > 0) {
try { for (var i = 0, s = this._components.length; i < s; i++)
for (var _b = __values(this._components), _c = _b.next(); !_c.done; _c = _b.next()) { this._components[i].onEnabled();
var component = _c.value;
component.onEnabled();
}
}
catch (e_11_1) { e_11 = { error: e_11_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_11) throw e_11.error; }
} }
}; };
ComponentList.prototype.onEntityDisabled = function () { ComponentList.prototype.onEntityDisabled = function () {
var e_12, _a; if (this._components.length > 0) {
try { for (var i = 0, s = this._components.length; i < s; i++)
for (var _b = __values(this._components), _c = _b.next(); !_c.done; _c = _b.next()) { this._components[i].onDisabled();
var component = _c.value;
component.onDisabled();
}
}
catch (e_12_1) { e_12 = { error: e_12_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_12) throw e_12.error; }
} }
}; };
/** /**
@@ -4182,15 +4130,19 @@ var es;
* @param name * @param name
*/ */
EntityList.prototype.findEntity = function (name) { EntityList.prototype.findEntity = function (name) {
for (var i = 0, s = this._entities.length; i < s; ++i) { if (this._entities.length > 0) {
var entity = this._entities[i]; for (var i = 0, s = this._entities.length; i < s; ++i) {
if (entity[i].name == name) var entity = this._entities[i];
return entity; if (entity.name == name)
return entity;
}
} }
for (var i = 0, s = this._entitiesToAddedList.length; i < s; ++i) { if (this._entitiesToAddedList.length > 0) {
var entity = this._entitiesToAddedList[i]; for (var i = 0, s = this._entitiesToAddedList.length; i < s; ++i) {
if (entity.name == name) var entity = this._entitiesToAddedList[i];
return entity; if (entity.name == name)
return entity;
}
} }
return null; return null;
}; };
@@ -4200,10 +4152,12 @@ var es;
* @returns * @returns
*/ */
EntityList.prototype.findEntityById = function (id) { EntityList.prototype.findEntityById = function (id) {
for (var i = 0, s = this._entities.length; i < s; ++i) { if (this._entities.length > 0) {
var entity = this._entities[i]; for (var i = 0, s = this._entities.length; i < s; ++i) {
if (entity.id == id) var entity = this._entities[i];
return entity; if (entity.id == id)
return entity;
}
} }
return this._entitiesToAdded[id]; return this._entitiesToAdded[id];
}; };
@@ -4213,21 +4167,23 @@ var es;
* @param tag * @param tag
*/ */
EntityList.prototype.entitiesWithTag = function (tag) { EntityList.prototype.entitiesWithTag = function (tag) {
var e_13, _a; var e_6, _a;
var list = this.getTagList(tag); var list = this.getTagList(tag);
var returnList = es.ListPool.obtain(); var returnList = es.ListPool.obtain();
try { if (list.size > 0) {
for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) {
var entity = list_1_1.value;
returnList.push(entity);
}
}
catch (e_13_1) { e_13 = { error: e_13_1 }; }
finally {
try { try {
if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1); for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) {
var entity = list_1_1.value;
returnList.push(entity);
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1);
}
finally { if (e_6) throw e_6.error; }
} }
finally { if (e_13) throw e_13.error; }
} }
return returnList; return returnList;
}; };
@@ -4237,20 +4193,22 @@ var es;
* @returns * @returns
*/ */
EntityList.prototype.entityWithTag = function (tag) { EntityList.prototype.entityWithTag = function (tag) {
var e_14, _a; var e_7, _a;
var list = this.getTagList(tag); var list = this.getTagList(tag);
try { if (list.size > 0) {
for (var list_2 = __values(list), list_2_1 = list_2.next(); !list_2_1.done; list_2_1 = list_2.next()) {
var entity = list_2_1.value;
return entity;
}
}
catch (e_14_1) { e_14 = { error: e_14_1 }; }
finally {
try { try {
if (list_2_1 && !list_2_1.done && (_a = list_2.return)) _a.call(list_2); for (var list_2 = __values(list), list_2_1 = list_2.next(); !list_2_1.done; list_2_1 = list_2.next()) {
var entity = list_2_1.value;
return entity;
}
}
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (list_2_1 && !list_2_1.done && (_a = list_2.return)) _a.call(list_2);
}
finally { if (e_7) throw e_7.error; }
} }
finally { if (e_14) throw e_14.error; }
} }
return null; return null;
}; };
@@ -4259,20 +4217,24 @@ var es;
* @param type * @param type
*/ */
EntityList.prototype.findComponentOfType = function (type) { EntityList.prototype.findComponentOfType = function (type) {
for (var i = 0, s = this._entities.length; i < s; i++) { if (this._entities.length > 0) {
var entity = this._entities[i]; for (var i = 0, s = this._entities.length; i < s; i++) {
if (entity.enabled) { var entity = this._entities[i];
var comp = entity.getComponent(type); if (entity.enabled) {
if (comp) var comp = entity.getComponent(type);
return comp; if (comp)
return comp;
}
} }
} }
for (var i = 0; i < this._entitiesToAddedList.length; i++) { if (this._entitiesToAddedList.length > 0) {
var entity = this._entitiesToAddedList[i]; for (var i = 0; i < this._entitiesToAddedList.length; i++) {
if (entity.enabled) { var entity = this._entitiesToAddedList[i];
var comp = entity.getComponent(type); if (entity.enabled) {
if (comp) var comp = entity.getComponent(type);
return comp; if (comp)
return comp;
}
} }
} }
return null; return null;
@@ -4283,25 +4245,20 @@ var es;
* @param type * @param type
*/ */
EntityList.prototype.findComponentsOfType = function (type) { EntityList.prototype.findComponentsOfType = function (type) {
var e_15, _a;
var comps = es.ListPool.obtain(); var comps = es.ListPool.obtain();
for (var i = 0; i < this._entities.length; i++) { if (this._entities.length > 0) {
if (this._entities[i].enabled) for (var i = 0, s = this._entities.length; i < s; i++) {
this._entities[i].getComponents(type, comps); var entity = this._entities[i];
}
try {
for (var _b = __values(this._entitiesToAddedList), _c = _b.next(); !_c.done; _c = _b.next()) {
var entity = _c.value;
if (entity.enabled) if (entity.enabled)
entity.getComponents(type, comps); entity.getComponents(type, comps);
} }
} }
catch (e_15_1) { e_15 = { error: e_15_1 }; } if (this._entitiesToAddedList.length > 0) {
finally { for (var i = 0, s = this._entitiesToAddedList.length; i < s; i++) {
try { var entity = this._entitiesToAddedList[i];
if (_c && !_c.done && (_a = _b.return)) _a.call(_b); if (entity.enabled)
entity.getComponents(type, comps);
} }
finally { if (e_15) throw e_15.error; }
} }
return comps; return comps;
}; };
@@ -4315,68 +4272,46 @@ var es;
for (var _i = 0; _i < arguments.length; _i++) { for (var _i = 0; _i < arguments.length; _i++) {
types[_i] = arguments[_i]; types[_i] = arguments[_i];
} }
var e_16, _a, e_17, _b, e_18, _c;
var entities = []; var entities = [];
for (var i = 0; i < this._entities.length; i++) { if (this._entities.length > 0) {
if (this._entities[i].enabled) { for (var i = 0, s = this._entities.length; i < s; i++) {
var meet = true; if (this._entities[i].enabled) {
try { var meet = true;
for (var types_1 = __values(types), types_1_1 = types_1.next(); !types_1_1.done; types_1_1 = types_1.next()) { if (types.length > 0)
var type = types_1_1.value; for (var t = 0, ts = types.length; t < ts; t++) {
var hasComp = this._entities[i].hasComponent(type); var type = types[t];
if (!hasComp) { var hasComp = this._entities[i].hasComponent(type);
meet = false; if (!hasComp) {
break; meet = false;
break;
}
} }
if (meet) {
entities.push(this._entities[i]);
} }
} }
catch (e_16_1) { e_16 = { error: e_16_1 }; }
finally {
try {
if (types_1_1 && !types_1_1.done && (_a = types_1.return)) _a.call(types_1);
}
finally { if (e_16) throw e_16.error; }
}
if (meet) {
entities.push(this._entities[i]);
}
} }
} }
try { if (this._entitiesToAddedList.length > 0) {
for (var _d = __values(this._entitiesToAddedList), _e = _d.next(); !_e.done; _e = _d.next()) { for (var i = 0, s = this._entitiesToAddedList.length; i < s; i++) {
var entity = _e.value; var entity = this._entitiesToAddedList[i];
if (entity.enabled) { if (entity.enabled) {
var meet = true; var meet = true;
try { if (types.length > 0)
for (var types_2 = __values(types), types_2_1 = types_2.next(); !types_2_1.done; types_2_1 = types_2.next()) { for (var t = 0, ts = types.length; t < ts; t++) {
var type = types_2_1.value; var type = types[t];
var hasComp = entity.hasComponent(type); var hasComp = entity.hasComponent(type);
if (!hasComp) { if (!hasComp) {
meet = false; meet = false;
break; break;
} }
} }
}
catch (e_18_1) { e_18 = { error: e_18_1 }; }
finally {
try {
if (types_2_1 && !types_2_1.done && (_c = types_2.return)) _c.call(types_2);
}
finally { if (e_18) throw e_18.error; }
}
if (meet) { if (meet) {
entities.push(entity); entities.push(entity);
} }
} }
} }
} }
catch (e_17_1) { e_17 = { error: e_17_1 }; }
finally {
try {
if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
}
finally { if (e_17) throw e_17.error; }
}
return entities; return entities;
}; };
return EntityList; return EntityList;
@@ -4425,12 +4360,12 @@ var es;
}; };
EntityProcessorList.prototype.end = function () { EntityProcessorList.prototype.end = function () {
}; };
EntityProcessorList.prototype.getProcessor = function () { EntityProcessorList.prototype.getProcessor = function (type) {
if (this._processors.length == 0) if (this._processors.length == 0)
return null; return null;
for (var i = 0, s = this._processors.length; i < s; ++i) { for (var i = 0, s = this._processors.length; i < s; ++i) {
var processor = this._processors[i]; var processor = this._processors[i];
if (processor instanceof es.EntitySystem) if (processor instanceof type)
return processor; return processor;
} }
return null; return null;
@@ -4583,53 +4518,25 @@ var es;
return this.isInterested(e.componentBits); return this.isInterested(e.componentBits);
}; };
Matcher.prototype.isInterested = function (components) { Matcher.prototype.isInterested = function (components) {
var e_19, _a, e_20, _b, e_21, _c;
if (this.allSet.length != 0) { if (this.allSet.length != 0) {
try { for (var i = 0, s = this.allSet.length; i < s; ++i) {
for (var _d = __values(this.allSet), _e = _d.next(); !_e.done; _e = _d.next()) { var type = this.allSet[i];
var s = _e.value; if (!components.get(es.ComponentTypeManager.getIndexFor(type)))
if (!components.get(es.ComponentTypeManager.getIndexFor(s))) return false;
return false;
}
}
catch (e_19_1) { e_19 = { error: e_19_1 }; }
finally {
try {
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
}
finally { if (e_19) throw e_19.error; }
} }
} }
if (this.exclusionSet.length != 0) { if (this.exclusionSet.length != 0) {
try { for (var i = 0, s = this.exclusionSet.length; i < s; ++i) {
for (var _f = __values(this.exclusionSet), _g = _f.next(); !_g.done; _g = _f.next()) { var type = this.exclusionSet[i];
var s = _g.value; if (components.get(es.ComponentTypeManager.getIndexFor(type)))
if (components.get(es.ComponentTypeManager.getIndexFor(s))) return false;
return false;
}
}
catch (e_20_1) { e_20 = { error: e_20_1 }; }
finally {
try {
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
}
finally { if (e_20) throw e_20.error; }
} }
} }
if (this.oneSet.length != 0) { if (this.oneSet.length != 0) {
try { for (var i = 0, s = this.oneSet.length; i < s; ++i) {
for (var _h = __values(this.oneSet), _j = _h.next(); !_j.done; _j = _h.next()) { var type = this.oneSet[i];
var s = _j.value; if (components.get(es.ComponentTypeManager.getIndexFor(type)))
if (components.get(es.ComponentTypeManager.getIndexFor(s))) return true;
return true;
}
}
catch (e_21_1) { e_21 = { error: e_21_1 }; }
finally {
try {
if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
}
finally { if (e_21) throw e_21.error; }
} }
} }
return true; return true;
@@ -4639,20 +4546,10 @@ var es;
for (var _i = 0; _i < arguments.length; _i++) { for (var _i = 0; _i < arguments.length; _i++) {
types[_i] = arguments[_i]; types[_i] = arguments[_i];
} }
var e_22, _a;
var t; var t;
try { for (var i = 0, s = types.length; i < s; ++i) {
for (var types_3 = __values(types), types_3_1 = types_3.next(); !types_3_1.done; types_3_1 = types_3.next()) { t = types[i];
t = types_3_1.value; this.allSet.push(t);
this.allSet.push(t);
}
}
catch (e_22_1) { e_22 = { error: e_22_1 }; }
finally {
try {
if (types_3_1 && !types_3_1.done && (_a = types_3.return)) _a.call(types_3);
}
finally { if (e_22) throw e_22.error; }
} }
return this; return this;
}; };
@@ -4661,20 +4558,10 @@ var es;
for (var _i = 0; _i < arguments.length; _i++) { for (var _i = 0; _i < arguments.length; _i++) {
types[_i] = arguments[_i]; types[_i] = arguments[_i];
} }
var e_23, _a;
var t; var t;
try { for (var i = 0, s = types.length; i < s; ++i) {
for (var types_4 = __values(types), types_4_1 = types_4.next(); !types_4_1.done; types_4_1 = types_4.next()) { t = types[i];
t = types_4_1.value; this.exclusionSet.push(t);
this.exclusionSet.push(t);
}
}
catch (e_23_1) { e_23 = { error: e_23_1 }; }
finally {
try {
if (types_4_1 && !types_4_1.done && (_a = types_4.return)) _a.call(types_4);
}
finally { if (e_23) throw e_23.error; }
} }
return this; return this;
}; };
@@ -4683,19 +4570,9 @@ var es;
for (var _i = 0; _i < arguments.length; _i++) { for (var _i = 0; _i < arguments.length; _i++) {
types[_i] = arguments[_i]; types[_i] = arguments[_i];
} }
var e_24, _a; for (var i = 0, s = types.length; i < s; ++i) {
try { var t = types[i];
for (var types_5 = __values(types), types_5_1 = types_5.next(); !types_5_1.done; types_5_1 = types_5.next()) { this.oneSet.push(t);
var t = types_5_1.value;
this.oneSet.push(t);
}
}
catch (e_24_1) { e_24 = { error: e_24_1 }; }
finally {
try {
if (types_5_1 && !types_5_1.done && (_a = types_5.return)) _a.call(types_5);
}
finally { if (e_24) throw e_24.error; }
} }
return this; return this;
}; };
@@ -4933,11 +4810,18 @@ var es;
function Time() { function Time() {
} }
Time.update = function (currentTime) { Time.update = function (currentTime) {
if (currentTime == -1) if (currentTime == -1) {
currentTime = Date.now(); currentTime = Date.now();
}
if (this._lastTime == -1) if (this._lastTime == -1)
this._lastTime = currentTime; this._lastTime = currentTime;
var dt = (currentTime - this._lastTime) / 1000; var dt = 0;
if (currentTime == -1) {
dt = (currentTime - this._lastTime) / 1000;
}
else {
dt = currentTime;
}
if (dt > this.maxDeltaTime) if (dt > this.maxDeltaTime)
dt = this.maxDeltaTime; dt = this.maxDeltaTime;
this.totalTime += dt; this.totalTime += dt;
@@ -7781,7 +7665,7 @@ var es;
* @param layerMask * @param layerMask
*/ */
SpatialHash.prototype.overlapRectangle = function (rect, results, layerMask) { SpatialHash.prototype.overlapRectangle = function (rect, results, layerMask) {
var e_25, _a; var e_8, _a;
this._overlapTestBox.updateBox(rect.width, rect.height); this._overlapTestBox.updateBox(rect.width, rect.height);
this._overlapTestBox.position = rect.location; this._overlapTestBox.position = rect.location;
var resultCounter = 0; var resultCounter = 0;
@@ -7812,12 +7696,12 @@ var es;
return resultCounter; return resultCounter;
} }
} }
catch (e_25_1) { e_25 = { error: e_25_1 }; } catch (e_8_1) { e_8 = { error: e_8_1 }; }
finally { finally {
try { try {
if (potentials_1_1 && !potentials_1_1.done && (_a = potentials_1.return)) _a.call(potentials_1); if (potentials_1_1 && !potentials_1_1.done && (_a = potentials_1.return)) _a.call(potentials_1);
} }
finally { if (e_25) throw e_25.error; } finally { if (e_8) throw e_8.error; }
} }
return resultCounter; return resultCounter;
}; };
@@ -7829,7 +7713,7 @@ var es;
* @param layerMask * @param layerMask
*/ */
SpatialHash.prototype.overlapCircle = function (circleCenter, radius, results, layerMask) { SpatialHash.prototype.overlapCircle = function (circleCenter, radius, results, layerMask) {
var e_26, _a; var e_9, _a;
var bounds = new es.Rectangle(circleCenter.x - radius, circleCenter.y - radius, radius * 2, radius * 2); var bounds = new es.Rectangle(circleCenter.x - radius, circleCenter.y - radius, radius * 2, radius * 2);
this._overlapTestCircle.radius = radius; this._overlapTestCircle.radius = radius;
this._overlapTestCircle.position = circleCenter; this._overlapTestCircle.position = circleCenter;
@@ -7862,12 +7746,12 @@ var es;
return resultCounter; return resultCounter;
} }
} }
catch (e_26_1) { e_26 = { error: e_26_1 }; } catch (e_9_1) { e_9 = { error: e_9_1 }; }
finally { finally {
try { try {
if (potentials_2_1 && !potentials_2_1.done && (_a = potentials_2.return)) _a.call(potentials_2); if (potentials_2_1 && !potentials_2_1.done && (_a = potentials_2.return)) _a.call(potentials_2);
} }
finally { if (e_26) throw e_26.error; } finally { if (e_9) throw e_9.error; }
} }
return resultCounter; return resultCounter;
}; };
@@ -8981,7 +8865,7 @@ var es;
var messageData = this._messageTable.get(eventType); var messageData = this._messageTable.get(eventType);
var index = messageData.findIndex(function (data) { return data.func == handler; }); var index = messageData.findIndex(function (data) { return data.func == handler; });
if (index != -1) if (index != -1)
new es.List(messageData).removeAt(index); messageData.splice(index, 1);
}; };
/** /**
* 触发该事件 * 触发该事件
@@ -12565,7 +12449,7 @@ var es;
* 创建一个Set从一个Enumerable.List< T>。 * 创建一个Set从一个Enumerable.List< T>。
*/ */
List.prototype.toSet = function () { List.prototype.toSet = function () {
var e_27, _a; var e_10, _a;
var result = new Set(); var result = new Set();
try { try {
for (var _b = __values(this._elements), _c = _b.next(); !_c.done; _c = _b.next()) { for (var _b = __values(this._elements), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -12573,12 +12457,12 @@ var es;
result.add(x); result.add(x);
} }
} }
catch (e_27_1) { e_27 = { error: e_27_1 }; } catch (e_10_1) { e_10 = { error: e_10_1 }; }
finally { finally {
try { try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b); if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
} }
finally { if (e_27) throw e_27.error; } finally { if (e_10) throw e_10.error; }
} }
return result; return result;
}; };
@@ -12827,7 +12711,7 @@ var es;
* 计算可见性多边形并返回三角形扇形的顶点减去中心顶点。返回的数组来自ListPool * 计算可见性多边形并返回三角形扇形的顶点减去中心顶点。返回的数组来自ListPool
*/ */
VisibilityComputer.prototype.end = function () { VisibilityComputer.prototype.end = function () {
var e_28, _a; var e_11, _a;
var output = es.ListPool.obtain(); var output = es.ListPool.obtain();
this.updateSegments(); this.updateSegments();
this._endPoints.sort(this._radialComparer.compare); this._endPoints.sort(this._radialComparer.compare);
@@ -12866,12 +12750,12 @@ var es;
} }
} }
} }
catch (e_28_1) { e_28 = { error: e_28_1 }; } catch (e_11_1) { e_11 = { error: e_11_1 }; }
finally { finally {
try { try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b); if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
} }
finally { if (e_28) throw e_28.error; } finally { if (e_11) throw e_11.error; }
} }
} }
VisibilityComputer._openSegments.clear(); VisibilityComputer._openSegments.clear();
@@ -12987,7 +12871,7 @@ var es;
* 处理片段,以便我们稍后对它们进行分类 * 处理片段,以便我们稍后对它们进行分类
*/ */
VisibilityComputer.prototype.updateSegments = function () { VisibilityComputer.prototype.updateSegments = function () {
var e_29, _a; var e_12, _a;
try { try {
for (var _b = __values(this._segments), _c = _b.next(); !_c.done; _c = _b.next()) { for (var _b = __values(this._segments), _c = _b.next(); !_c.done; _c = _b.next()) {
var segment = _c.value; var segment = _c.value;
@@ -13005,12 +12889,12 @@ var es;
segment.p2.begin = !segment.p1.begin; segment.p2.begin = !segment.p1.begin;
} }
} }
catch (e_29_1) { e_29 = { error: e_29_1 }; } catch (e_12_1) { e_12 = { error: e_12_1 }; }
finally { finally {
try { try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b); if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
} }
finally { if (e_29) throw e_29.error; } finally { if (e_12) throw e_12.error; }
} }
// 如果我们有一个聚光灯,我们需要存储前两个段的角度。 // 如果我们有一个聚光灯,我们需要存储前两个段的角度。
// 这些是光斑的边界,我们将用它们来过滤它们之外的任何顶点。 // 这些是光斑的边界,我们将用它们来过滤它们之外的任何顶点。

File diff suppressed because one or more lines are too long

View File

@@ -250,8 +250,8 @@ module es {
/** /**
* 获取EntitySystem处理器 * 获取EntitySystem处理器
*/ */
public getEntityProcessor<T extends EntitySystem>(): T { public getEntityProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T {
return this.entityProcessors.getProcessor<T>(); return this.entityProcessors.getProcessor<T>(type);
} }
} }
} }

View File

@@ -27,11 +27,23 @@ module es {
* @param entities * @param entities
*/ */
protected process(entities: Entity[]) { protected process(entities: Entity[]) {
entities.forEach(entity => this.processEntity(entity)); if (entities.length == 0)
return;
for (let i = 0, s = entities.length; i < s; ++ i) {
let entity = entities[i];
this.processEntity(entity);
}
} }
protected lateProcess(entities: Entity[]) { protected lateProcess(entities: Entity[]) {
entities.forEach(entity => this.lateProcessEntity(entity)); if (entities.length == 0)
return;
for (let i = 0, s = entities.length; i < s; ++ i) {
let entity = entities[i];
this.lateProcessEntity(entity);
}
} }
} }
} }

View File

@@ -73,40 +73,48 @@ module es {
* 立即从组件列表中删除所有组件 * 立即从组件列表中删除所有组件
*/ */
public removeAllComponents() { public removeAllComponents() {
for (let component of this._components) { if (this._components.length > 0) {
this.handleRemove(component); for (let i = 0, s = this._components.length; i < s; ++ i) {
} this.handleRemove(this._components[i]);
}
this.componentsByType.clear(); this.componentsByType.clear();
this.componentsToAddByType.clear(); this.componentsToAddByType.clear();
this._components.length = 0; this._components.length = 0;
this._updatableComponents.length = 0; this._updatableComponents.length = 0;
this._componentsToAdd = {}; this._componentsToAdd = {};
this._componentsToRemove = {}; this._componentsToRemove = {};
this._componentsToAddList.length = 0; this._componentsToAddList.length = 0;
this._componentsToRemoveList.length = 0; this._componentsToRemoveList.length = 0;
}
} }
public deregisterAllComponents() { public deregisterAllComponents() {
for (let component of this._components) { if (this._components.length > 0) {
if (!component) continue; for (let i = 0, s = this._components.length; i < s; ++ i) {
let component = this._components[i];
// 处理IUpdatable if (!component) continue;
if (isIUpdatable(component))
new es.List(this._updatableComponents).remove(component); // 处理IUpdatable
if (isIUpdatable(component))
this.decreaseBits(component); new es.List(this._updatableComponents).remove(component);
this._entity.scene.entityProcessors.onComponentRemoved(this._entity);
this.decreaseBits(component);
this._entity.scene.entityProcessors.onComponentRemoved(this._entity);
}
} }
} }
public registerAllComponents() { public registerAllComponents() {
for (let component of this._components) { if (this._components.length > 0) {
if (isIUpdatable(component)) for (let i = 0, s = this._components.length; i < s; ++ i) {
this._updatableComponents.push(component); let component = this._components[i];
if (isIUpdatable(component))
this.addBits(component); this._updatableComponents.push(component);
this._entity.scene.entityProcessors.onComponentAdded(this._entity);
this.addBits(component);
this._entity.scene.entityProcessors.onComponentAdded(this._entity);
}
} }
} }
@@ -275,25 +283,35 @@ module es {
} }
public onEntityTransformChanged(comp: transform.Component) { public onEntityTransformChanged(comp: transform.Component) {
for (let component of this._components) { if (this._components.length > 0 ){
if (component.enabled) for (let i = 0, s = this._components.length; i < s; ++ i) {
component.onEntityTransformChanged(comp); let component = this._components[i];
if (component.enabled)
component.onEntityTransformChanged(comp);
}
} }
for (let component of this._componentsToAddList) { if (this._componentsToAddList.length > 0) {
if (component.enabled) for (let i = 0, s = this._componentsToAddList.length; i < s; ++ i) {
component.onEntityTransformChanged(comp); let component = this._componentsToAddList[i];
if (component.enabled)
component.onEntityTransformChanged(comp);
}
} }
} }
public onEntityEnabled() { public onEntityEnabled() {
for (let component of this._components) if (this._components.length > 0) {
component.onEnabled(); for (let i = 0, s = this._components.length; i < s; i ++)
this._components[i].onEnabled();
}
} }
public onEntityDisabled() { public onEntityDisabled() {
for (let component of this._components) if (this._components.length > 0) {
component.onDisabled(); for (let i = 0, s = this._components.length; i < s; i ++)
this._components[i].onDisabled();
}
} }
} }
} }

View File

@@ -179,16 +179,20 @@ module es {
* @param name * @param name
*/ */
public findEntity(name: string) { public findEntity(name: string) {
for (let i = 0, s = this._entities.length; i < s; ++ i) { if (this._entities.length > 0) {
let entity = this._entities[i]; for (let i = 0, s = this._entities.length; i < s; ++ i) {
if (entity[i].name == name) let entity = this._entities[i];
return entity; if (entity.name == name)
return entity;
}
} }
for (let i = 0, s = this._entitiesToAddedList.length; i < s; ++ i) { if (this._entitiesToAddedList.length > 0) {
let entity = this._entitiesToAddedList[i]; for (let i = 0, s = this._entitiesToAddedList.length; i < s; ++ i) {
if (entity.name == name) let entity = this._entitiesToAddedList[i];
return entity; if (entity.name == name)
return entity;
}
} }
return null; return null;
@@ -200,12 +204,14 @@ module es {
* @returns * @returns
*/ */
public findEntityById(id: number) { public findEntityById(id: number) {
for (let i = 0, s = this._entities.length; i < s; ++ i) { if (this._entities.length > 0) {
let entity = this._entities[i]; for (let i = 0, s = this._entities.length; i < s; ++ i) {
if (entity.id == id) let entity = this._entities[i];
return entity; if (entity.id == id)
return entity;
}
} }
return this._entitiesToAdded[id]; return this._entitiesToAdded[id];
} }
@@ -218,10 +224,12 @@ module es {
let list = this.getTagList(tag); let list = this.getTagList(tag);
let returnList = ListPool.obtain<Entity>(); let returnList = ListPool.obtain<Entity>();
for (let entity of list) { if (list.size > 0) {
returnList.push(entity); for (let entity of list) {
returnList.push(entity);
}
} }
return returnList; return returnList;
} }
@@ -233,8 +241,10 @@ module es {
public entityWithTag(tag: number) { public entityWithTag(tag: number) {
let list = this.getTagList(tag); let list = this.getTagList(tag);
for (let entity of list) { if (list.size > 0) {
return entity; for (let entity of list) {
return entity;
}
} }
return null; return null;
@@ -245,21 +255,25 @@ module es {
* @param type * @param type
*/ */
public findComponentOfType<T extends Component>(type): T { public findComponentOfType<T extends Component>(type): T {
for (let i = 0, s = this._entities.length; i < s; i++) { if (this._entities.length > 0 ){
let entity = this._entities[i]; for (let i = 0, s = this._entities.length; i < s; i++) {
if (entity.enabled) { let entity = this._entities[i];
let comp = entity.getComponent<T>(type); if (entity.enabled) {
if (comp) let comp = entity.getComponent<T>(type);
return comp; if (comp)
return comp;
}
} }
} }
for (let i = 0; i < this._entitiesToAddedList.length; i++) { if (this._entitiesToAddedList.length > 0) {
let entity = this._entitiesToAddedList[i]; for (let i = 0; i < this._entitiesToAddedList.length; i++) {
if (entity.enabled) { let entity = this._entitiesToAddedList[i];
let comp = entity.getComponent<T>(type); if (entity.enabled) {
if (comp) let comp = entity.getComponent<T>(type);
return comp; if (comp)
return comp;
}
} }
} }
@@ -273,14 +287,20 @@ module es {
*/ */
public findComponentsOfType<T extends Component>(type): T[] { public findComponentsOfType<T extends Component>(type): T[] {
let comps = ListPool.obtain<T>(); let comps = ListPool.obtain<T>();
for (let i = 0; i < this._entities.length; i++) { if (this._entities.length > 0) {
if (this._entities[i].enabled) for (let i = 0, s = this._entities.length; i < s; i++) {
this._entities[i].getComponents(type, comps); let entity = this._entities[i];
if (entity.enabled)
entity.getComponents(type, comps);
}
} }
for (let entity of this._entitiesToAddedList) { if (this._entitiesToAddedList.length > 0) {
if (entity.enabled) for (let i = 0, s = this._entitiesToAddedList.length; i < s; i ++) {
entity.getComponents(type, comps); let entity = this._entitiesToAddedList[i];
if (entity.enabled)
entity.getComponents(type, comps);
}
} }
return comps; return comps;
@@ -291,41 +311,51 @@ module es {
* @param types * @param types
* @returns * @returns
*/ */
public findEntitesOfComponent(...types): Entity[] { public findEntitesOfComponent(...types: any[]): Entity[] {
let entities = []; let entities = [];
for (let i = 0; i < this._entities.length; i++) { if (this._entities.length > 0) {
if (this._entities[i].enabled) { for (let i = 0, s = this._entities.length; i < s; i++) {
let meet = true; if (this._entities[i].enabled) {
for (let type of types) { let meet = true;
let hasComp = this._entities[i].hasComponent(type); if (types.length > 0)
if (!hasComp) { for (let t = 0, ts = types.length; t < ts; t ++) {
meet = false; let type = types[t];
break; let hasComp = this._entities[i].hasComponent(type);
if (!hasComp) {
meet = false;
break;
}
}
if (meet) {
entities.push(this._entities[i]);
} }
} }
if (meet) {
entities.push(this._entities[i]);
}
} }
} }
for (let entity of this._entitiesToAddedList) { if (this._entitiesToAddedList.length > 0) {
if (entity.enabled) { for (let i = 0, s = this._entitiesToAddedList.length; i < s; i ++) {
let meet = true; let entity = this._entitiesToAddedList[i];
for (let type of types) { if (entity.enabled) {
let hasComp = entity.hasComponent(type); let meet = true;
if (!hasComp) { if (types.length > 0)
meet = false; for (let t = 0, ts = types.length; t < ts; t ++) {
break; let type = types[t];
let hasComp = entity.hasComponent(type);
if (!hasComp) {
meet = false;
break;
}
}
if (meet) {
entities.push(entity);
} }
} }
if (meet) {
entities.push(entity);
}
} }
} }
return entities; return entities;
} }

View File

@@ -52,13 +52,13 @@ module es {
} }
public getProcessor<T extends EntitySystem>(): T { public getProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T {
if (this._processors.length == 0) if (this._processors.length == 0)
return null; return null;
for (let i = 0, s = this._processors.length; i < s; ++ i) { for (let i = 0, s = this._processors.length; i < s; ++ i) {
let processor = this._processors[i]; let processor = this._processors[i];
if (processor instanceof EntitySystem) if (processor instanceof type)
return processor as T; return processor as T;
} }

View File

@@ -26,22 +26,25 @@ module es {
public isInterested(components: Bits) { public isInterested(components: Bits) {
if (this.allSet.length != 0) { if (this.allSet.length != 0) {
for (let s of this.allSet) { for (let i = 0, s = this.allSet.length; i < s; ++ i) {
if (!components.get(ComponentTypeManager.getIndexFor(s))) let type = this.allSet[i];
if (!components.get(ComponentTypeManager.getIndexFor(type)))
return false; return false;
} }
} }
if (this.exclusionSet.length != 0) { if (this.exclusionSet.length != 0) {
for (let s of this.exclusionSet) { for (let i = 0, s = this.exclusionSet.length; i < s; ++ i) {
if (components.get(ComponentTypeManager.getIndexFor(s))) let type = this.exclusionSet[i];
if (components.get(ComponentTypeManager.getIndexFor(type)))
return false; return false;
} }
} }
if (this.oneSet.length != 0) { if (this.oneSet.length != 0) {
for (let s of this.oneSet) { for (let i = 0, s = this.oneSet.length; i < s; ++ i) {
if (components.get(ComponentTypeManager.getIndexFor(s))) let type = this.oneSet[i];
if (components.get(ComponentTypeManager.getIndexFor(type)))
return true; return true;
} }
} }
@@ -51,7 +54,8 @@ module es {
public all(...types: any[]): Matcher { public all(...types: any[]): Matcher {
let t; let t;
for (t of types) { for (let i = 0, s = types.length; i < s; ++ i) {
t = types[i];
this.allSet.push(t); this.allSet.push(t);
} }
@@ -60,7 +64,8 @@ module es {
public exclude(...types: any[]) { public exclude(...types: any[]) {
let t; let t;
for (t of types) { for (let i = 0, s = types.length; i < s; ++ i) {
t = types[i];
this.exclusionSet.push(t); this.exclusionSet.push(t);
} }
@@ -68,7 +73,8 @@ module es {
} }
public one(...types: any[]) { public one(...types: any[]) {
for (const t of types) { for (let i = 0, s = types.length; i < s; ++ i) {
const t = types[i];
this.oneSet.push(t); this.oneSet.push(t);
} }

View File

@@ -18,12 +18,19 @@ module es {
private static _lastTime = -1; private static _lastTime = -1;
public static update(currentTime: number) { public static update(currentTime: number) {
if (currentTime == -1) if (currentTime == -1) {
currentTime = Date.now(); currentTime = Date.now();
}
if (this._lastTime == -1) if (this._lastTime == -1)
this._lastTime = currentTime; this._lastTime = currentTime;
let dt = (currentTime - this._lastTime) / 1000; let dt = 0;
if (currentTime == -1) {
dt = (currentTime - this._lastTime) / 1000;
} else {
dt = currentTime;
}
if (dt > this.maxDeltaTime) if (dt > this.maxDeltaTime)
dt = this.maxDeltaTime; dt = this.maxDeltaTime;
this.totalTime += dt; this.totalTime += dt;

View File

@@ -50,7 +50,7 @@ module es {
let messageData = this._messageTable.get(eventType); let messageData = this._messageTable.get(eventType);
let index = messageData.findIndex(data => data.func == handler); let index = messageData.findIndex(data => data.func == handler);
if (index != -1) if (index != -1)
new es.List(messageData).removeAt(index); messageData.splice(index, 1);
} }
/** /**