01fae027f57b5daf17b10376ef3c59e76884a3c5.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. System.register(["__unresolved_0", "cc", "__unresolved_1", "__unresolved_2", "__unresolved_3", "__unresolved_4", "__unresolved_5"], function (_export, _context) {
  2. "use strict";
  3. var _reporterNs, _cclegacy, ECSComp, ECSEntity, ECSMatcher, ECSModel, ECSComblockSystem, ECSRootSystem, ECSSystem, _crd, ecs;
  4. function _reportPossibleCrUseOfECSComp(extras) {
  5. _reporterNs.report("ECSComp", "./ECSComp", _context.meta, extras);
  6. }
  7. function _reportPossibleCrUseOfECSEntity(extras) {
  8. _reporterNs.report("ECSEntity", "./ECSEntity", _context.meta, extras);
  9. }
  10. function _reportPossibleCrUseOfECSMatcher(extras) {
  11. _reporterNs.report("ECSMatcher", "./ECSMatcher", _context.meta, extras);
  12. }
  13. function _reportPossibleCrUseOfCompCtor(extras) {
  14. _reporterNs.report("CompCtor", "./ECSModel", _context.meta, extras);
  15. }
  16. function _reportPossibleCrUseOfCompType(extras) {
  17. _reporterNs.report("CompType", "./ECSModel", _context.meta, extras);
  18. }
  19. function _reportPossibleCrUseOfECSModel(extras) {
  20. _reporterNs.report("ECSModel", "./ECSModel", _context.meta, extras);
  21. }
  22. function _reportPossibleCrUseOfEntityCtor(extras) {
  23. _reporterNs.report("EntityCtor", "./ECSModel", _context.meta, extras);
  24. }
  25. function _reportPossibleCrUseOfECSComblockSystem(extras) {
  26. _reporterNs.report("ECSComblockSystem", "./ECSSystem", _context.meta, extras);
  27. }
  28. function _reportPossibleCrUseOfECSRootSystem(extras) {
  29. _reporterNs.report("ECSRootSystem", "./ECSSystem", _context.meta, extras);
  30. }
  31. function _reportPossibleCrUseOfECSSystem(extras) {
  32. _reporterNs.report("ECSSystem", "./ECSSystem", _context.meta, extras);
  33. }
  34. _export("ecs", void 0);
  35. return {
  36. setters: [function (_unresolved_) {
  37. _reporterNs = _unresolved_;
  38. }, function (_cc) {
  39. _cclegacy = _cc.cclegacy;
  40. }, function (_unresolved_2) {
  41. ECSComp = _unresolved_2.ECSComp;
  42. }, function (_unresolved_3) {
  43. ECSEntity = _unresolved_3.ECSEntity;
  44. }, function (_unresolved_4) {
  45. ECSMatcher = _unresolved_4.ECSMatcher;
  46. }, function (_unresolved_5) {
  47. ECSModel = _unresolved_5.ECSModel;
  48. }, function (_unresolved_6) {
  49. ECSComblockSystem = _unresolved_6.ECSComblockSystem;
  50. ECSRootSystem = _unresolved_6.ECSRootSystem;
  51. ECSSystem = _unresolved_6.ECSSystem;
  52. }],
  53. execute: function () {
  54. _crd = true;
  55. _cclegacy._RF.push({}, "be87fT76plLkaUKEYpkuV0n", "ECS", undefined);
  56. (function (_ecs) {
  57. /** 实体 - 一个概念上的定义,指的是游戏世界中的一个独特物体,是一系列组件的集合 */
  58. /** 组件 - 一堆数据的集合,即不存在任何的行为,只用来存储状态 */
  59. /** 系统 - 关注实体上组件数据变化,处理游戏逻辑 */
  60. /** 根系统 - 驱动游戏中所有系统工作 */
  61. /** 处理游戏逻辑系统对象 - 继承此对象实现自定义业务逻辑 */
  62. /** 实体 - 一个概念上的定义,指的是游戏世界中的一个独特物体,是一系列组件的集合 */
  63. var Entity = _ecs.Entity = _crd && ECSEntity === void 0 ? (_reportPossibleCrUseOfECSEntity({
  64. error: Error()
  65. }), ECSEntity) : ECSEntity;
  66. var Comp = _ecs.Comp = _crd && ECSComp === void 0 ? (_reportPossibleCrUseOfECSComp({
  67. error: Error()
  68. }), ECSComp) : ECSComp;
  69. var System = _ecs.System = _crd && ECSSystem === void 0 ? (_reportPossibleCrUseOfECSSystem({
  70. error: Error()
  71. }), ECSSystem) : ECSSystem;
  72. var RootSystem = _ecs.RootSystem = _crd && ECSRootSystem === void 0 ? (_reportPossibleCrUseOfECSRootSystem({
  73. error: Error()
  74. }), ECSRootSystem) : ECSRootSystem;
  75. var ComblockSystem = _ecs.ComblockSystem = _crd && ECSComblockSystem === void 0 ? (_reportPossibleCrUseOfECSComblockSystem({
  76. error: Error()
  77. }), ECSComblockSystem) : ECSComblockSystem; //#region 接口
  78. /** 组件接口 */
  79. /** 实体匹配器接口 */
  80. /**
  81. * 监听组件首次添加到实体上时,在ComblockSystem上实现这个接口
  82. * 1. entityEnter会在update方法之前执行,实体进入后,不会再次进入entityEnter方法中
  83. * 2. 当实体从当前System移除,下次再次符合条件进入System也会执行上述流程
  84. * @example
  85. export class RoleUpgradeSystem extends ecs.ComblockSystem implements ecs.IEntityEnterSystem {
  86. filter(): ecs.IMatcher {
  87. return ecs.allOf(RoleUpgradeComp, RoleModelLevelComp);
  88. }
  89. entityEnter(e: Role): void {
  90. e.remove(RoleUpgradeComp);
  91. }
  92. }
  93. */
  94. /** 监听组件从实体上移除时,在ComblockSystem上实现这个接口 */
  95. /** 监听系统第一次执行update处理实体时,在ComblockSystem上实现这个接口 */
  96. /** 监听系统执行update处理实体时,在ComblockSystem上实现这个接口 */
  97. //#endregion
  98. /**
  99. * 注册组件到ecs系统中
  100. * @param name 由于js打包会改变类名,所以这里必须手动传入组件的名称
  101. * @param canNew 标识是否可以new对象。想继承自Cocos Creator的组件就不能去new,需要写成@ecs.register('name', false)
  102. * @example
  103. // 注册实体
  104. @ecs.register('Role')
  105. export class Role extends ecs.Entity {
  106. }
  107. // 注册数据组件
  108. @ecs.register('RoleModel')
  109. export class RoleModelComp extends ecs.Comp {
  110. id: number = -1;
  111. reset() {
  112. this.id = -1;
  113. }
  114. }
  115. // 注册系统组件
  116. @ecs.register('Initialize')
  117. export class InitResSystem extends ecs.ComblockSystem implements ecs.IEntityEnterSystem {
  118. }
  119. // 注册显示对象组件
  120. @ccclass('RoleViewComp')
  121. @ecs.register('RoleView', false)
  122. export class RoleViewComp extends CCComp {
  123. onLoad(){
  124. }
  125. }
  126. */
  127. function register(name, canNew) {
  128. if (canNew === void 0) {
  129. canNew = true;
  130. }
  131. return function (ctor) {
  132. // 注册系统
  133. if (ctor.s) {
  134. var system = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  135. error: Error()
  136. }), ECSModel) : ECSModel).systems.get(name);
  137. if (system == null) {
  138. system = new ecs.System();
  139. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  140. error: Error()
  141. }), ECSModel) : ECSModel).systems.set(name, system);
  142. }
  143. system.add(new ctor());
  144. } // 注册实体
  145. else if (ctor.tid == undefined) {
  146. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  147. error: Error()
  148. }), ECSModel) : ECSModel).entityCtors.set(ctor, name);
  149. } // 注册组件
  150. else {
  151. if (ctor.tid === -1) {
  152. ctor.tid = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  153. error: Error()
  154. }), ECSModel) : ECSModel).compTid++;
  155. ctor.compName = name;
  156. if (canNew) {
  157. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  158. error: Error()
  159. }), ECSModel) : ECSModel).compCtors.push(ctor); // 注册不同类型的组件
  160. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  161. error: Error()
  162. }), ECSModel) : ECSModel).compPools.set(ctor.tid, []);
  163. } else {
  164. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  165. error: Error()
  166. }), ECSModel) : ECSModel).compCtors.push(null);
  167. }
  168. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  169. error: Error()
  170. }), ECSModel) : ECSModel).compAddOrRemove.set(ctor.tid, []);
  171. } else {
  172. throw new Error("\u91CD\u590D\u6CE8\u518C\u7EC4\u4EF6\uFF1A " + name + ".");
  173. }
  174. }
  175. };
  176. }
  177. _ecs.register = register;
  178. function getEntity(ctor) {
  179. // 获取实体对象名
  180. var entityName = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  181. error: Error()
  182. }), ECSModel) : ECSModel).entityCtors.get(ctor);
  183. if (entityName == undefined) console.error(ctor.name + " \u5B9E\u4F53\u6CA1\u6709\u6CE8\u518C"); // 获取实体对象池
  184. var entitys = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  185. error: Error()
  186. }), ECSModel) : ECSModel).entityPool.get(entityName) || [];
  187. var entity = entitys.pop(); // 缓存中没有同类实体,则创建一个新的
  188. if (!entity) {
  189. entity = new ctor();
  190. entity.eid = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  191. error: Error()
  192. }), ECSModel) : ECSModel).eid++; // 实体唯一编号
  193. entity.name = entityName;
  194. } // 触发实体初始化逻辑
  195. if (entity.init) {
  196. entity.isValid = true;
  197. entity.init();
  198. } else console.error(ctor.name + " \u5B9E\u4F53\u7F3A\u5C11 init \u65B9\u6CD5\u521D\u59CB\u5316\u9ED8\u8BA4\u7EC4\u4EF6");
  199. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  200. error: Error()
  201. }), ECSModel) : ECSModel).eid2Entity.set(entity.eid, entity);
  202. return entity;
  203. }
  204. _ecs.getEntity = getEntity;
  205. function query(matcher) {
  206. var group = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  207. error: Error()
  208. }), ECSModel) : ECSModel).groups.get(matcher.mid);
  209. if (!group) {
  210. group = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  211. error: Error()
  212. }), ECSModel) : ECSModel).createGroup(matcher);
  213. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  214. error: Error()
  215. }), ECSModel) : ECSModel).eid2Entity.forEach(group.onComponentAddOrRemove, group);
  216. }
  217. return group.matchEntities;
  218. }
  219. _ecs.query = query;
  220. function clear() {
  221. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  222. error: Error()
  223. }), ECSModel) : ECSModel).eid2Entity.forEach(entity => {
  224. entity.destroy();
  225. });
  226. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  227. error: Error()
  228. }), ECSModel) : ECSModel).groups.forEach(group => {
  229. group.clear();
  230. });
  231. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  232. error: Error()
  233. }), ECSModel) : ECSModel).compAddOrRemove.forEach(callbackLst => {
  234. callbackLst.length = 0;
  235. });
  236. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  237. error: Error()
  238. }), ECSModel) : ECSModel).eid2Entity.clear();
  239. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  240. error: Error()
  241. }), ECSModel) : ECSModel).groups.clear();
  242. }
  243. _ecs.clear = clear;
  244. function getEntityByEid(eid) {
  245. return (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  246. error: Error()
  247. }), ECSModel) : ECSModel).eid2Entity.get(eid);
  248. }
  249. _ecs.getEntityByEid = getEntityByEid;
  250. function activeEntityCount() {
  251. return (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  252. error: Error()
  253. }), ECSModel) : ECSModel).eid2Entity.size;
  254. }
  255. _ecs.activeEntityCount = activeEntityCount;
  256. /** 创建实体 */
  257. function createEntity() {
  258. var entity = new Entity();
  259. entity.eid = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  260. error: Error()
  261. }), ECSModel) : ECSModel).eid++; // 实体id也是有限的资源
  262. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  263. error: Error()
  264. }), ECSModel) : ECSModel).eid2Entity.set(entity.eid, entity);
  265. return entity;
  266. }
  267. /**
  268. * 指定一个组件创建实体,返回组件对象。
  269. * @param ctor
  270. */
  271. function createEntityWithComp(ctor) {
  272. var entity = createEntity();
  273. return entity.add(ctor);
  274. } //#region 过滤器
  275. /**
  276. * 表示只关心这些组件的添加和删除动作。虽然实体可能有这些组件之外的组件,但是它们的添加和删除没有被关注,所以不会存在对关注之外的组件
  277. * 进行添加操作引发Group重复添加实体。
  278. * @param args
  279. * @example
  280. * ecs.allOf(AComponent, BComponent, CComponent);
  281. */
  282. function allOf() {
  283. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  284. error: Error()
  285. }), ECSMatcher) : ECSMatcher)().allOf(...arguments);
  286. }
  287. _ecs.allOf = allOf;
  288. function anyOf() {
  289. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  290. error: Error()
  291. }), ECSMatcher) : ECSMatcher)().anyOf(...arguments);
  292. }
  293. _ecs.anyOf = anyOf;
  294. function onlyOf() {
  295. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  296. error: Error()
  297. }), ECSMatcher) : ECSMatcher)().onlyOf(...arguments);
  298. }
  299. _ecs.onlyOf = onlyOf;
  300. function excludeOf() {
  301. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  302. error: Error()
  303. }), ECSMatcher) : ECSMatcher)().excludeOf(...arguments);
  304. }
  305. _ecs.excludeOf = excludeOf;
  306. function getSingleton(ctor) {
  307. if (!(_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  308. error: Error()
  309. }), ECSModel) : ECSModel).tid2comp.has(ctor.tid)) {
  310. var comp = createEntityWithComp(ctor);
  311. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  312. error: Error()
  313. }), ECSModel) : ECSModel).tid2comp.set(ctor.tid, comp);
  314. }
  315. return (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  316. error: Error()
  317. }), ECSModel) : ECSModel).tid2comp.get(ctor.tid);
  318. }
  319. _ecs.getSingleton = getSingleton;
  320. function addSingleton(obj) {
  321. var tid = obj.constructor.tid;
  322. if (!(_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  323. error: Error()
  324. }), ECSModel) : ECSModel).tid2comp.has(tid)) {
  325. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  326. error: Error()
  327. }), ECSModel) : ECSModel).tid2comp.set(tid, obj);
  328. }
  329. }
  330. _ecs.addSingleton = addSingleton;
  331. })(ecs || _export("ecs", ecs = {}));
  332. _cclegacy._RF.pop();
  333. _crd = false;
  334. }
  335. };
  336. });
  337. //# sourceMappingURL=01fae027f57b5daf17b10376ef3c59e76884a3c5.js.map