c5e5c7bde9de8428d7299c082b15f0b6b145d037.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  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. const Entity = _ecs.Entity = _crd && ECSEntity === void 0 ? (_reportPossibleCrUseOfECSEntity({
  64. error: Error()
  65. }), ECSEntity) : ECSEntity;
  66. const Comp = _ecs.Comp = _crd && ECSComp === void 0 ? (_reportPossibleCrUseOfECSComp({
  67. error: Error()
  68. }), ECSComp) : ECSComp;
  69. const System = _ecs.System = _crd && ECSSystem === void 0 ? (_reportPossibleCrUseOfECSSystem({
  70. error: Error()
  71. }), ECSSystem) : ECSSystem;
  72. const RootSystem = _ecs.RootSystem = _crd && ECSRootSystem === void 0 ? (_reportPossibleCrUseOfECSRootSystem({
  73. error: Error()
  74. }), ECSRootSystem) : ECSRootSystem;
  75. const 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 = true) {
  128. return function (ctor) {
  129. // 注册系统
  130. if (ctor.s) {
  131. var system = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  132. error: Error()
  133. }), ECSModel) : ECSModel).systems.get(name);
  134. if (system == null) {
  135. system = new ecs.System();
  136. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  137. error: Error()
  138. }), ECSModel) : ECSModel).systems.set(name, system);
  139. }
  140. system.add(new ctor());
  141. } // 注册实体
  142. else if (ctor.tid == undefined) {
  143. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  144. error: Error()
  145. }), ECSModel) : ECSModel).entityCtors.set(ctor, name);
  146. } // 注册组件
  147. else {
  148. if (ctor.tid === -1) {
  149. ctor.tid = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  150. error: Error()
  151. }), ECSModel) : ECSModel).compTid++;
  152. ctor.compName = name;
  153. if (canNew) {
  154. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  155. error: Error()
  156. }), ECSModel) : ECSModel).compCtors.push(ctor); // 注册不同类型的组件
  157. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  158. error: Error()
  159. }), ECSModel) : ECSModel).compPools.set(ctor.tid, []);
  160. } else {
  161. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  162. error: Error()
  163. }), ECSModel) : ECSModel).compCtors.push(null);
  164. }
  165. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  166. error: Error()
  167. }), ECSModel) : ECSModel).compAddOrRemove.set(ctor.tid, []);
  168. } else {
  169. throw new Error(`重复注册组件: ${name}.`);
  170. }
  171. }
  172. };
  173. }
  174. _ecs.register = register;
  175. function getEntity(ctor) {
  176. // 获取实体对象名
  177. var entityName = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  178. error: Error()
  179. }), ECSModel) : ECSModel).entityCtors.get(ctor);
  180. if (entityName == undefined) console.error(`${ctor.name} 实体没有注册`); // 获取实体对象池
  181. var entitys = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  182. error: Error()
  183. }), ECSModel) : ECSModel).entityPool.get(entityName) || [];
  184. var entity = entitys.pop(); // 缓存中没有同类实体,则创建一个新的
  185. if (!entity) {
  186. entity = new ctor();
  187. entity.eid = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  188. error: Error()
  189. }), ECSModel) : ECSModel).eid++; // 实体唯一编号
  190. entity.name = entityName;
  191. } // 触发实体初始化逻辑
  192. if (entity.init) {
  193. entity.isValid = true;
  194. entity.init();
  195. } else console.error(`${ctor.name} 实体缺少 init 方法初始化默认组件`);
  196. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  197. error: Error()
  198. }), ECSModel) : ECSModel).eid2Entity.set(entity.eid, entity);
  199. return entity;
  200. }
  201. _ecs.getEntity = getEntity;
  202. function query(matcher) {
  203. let group = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  204. error: Error()
  205. }), ECSModel) : ECSModel).groups.get(matcher.mid);
  206. if (!group) {
  207. group = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  208. error: Error()
  209. }), ECSModel) : ECSModel).createGroup(matcher);
  210. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  211. error: Error()
  212. }), ECSModel) : ECSModel).eid2Entity.forEach(group.onComponentAddOrRemove, group);
  213. }
  214. return group.matchEntities;
  215. }
  216. _ecs.query = query;
  217. function clear() {
  218. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  219. error: Error()
  220. }), ECSModel) : ECSModel).eid2Entity.forEach(entity => {
  221. entity.destroy();
  222. });
  223. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  224. error: Error()
  225. }), ECSModel) : ECSModel).groups.forEach(group => {
  226. group.clear();
  227. });
  228. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  229. error: Error()
  230. }), ECSModel) : ECSModel).compAddOrRemove.forEach(callbackLst => {
  231. callbackLst.length = 0;
  232. });
  233. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  234. error: Error()
  235. }), ECSModel) : ECSModel).eid2Entity.clear();
  236. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  237. error: Error()
  238. }), ECSModel) : ECSModel).groups.clear();
  239. }
  240. _ecs.clear = clear;
  241. function getEntityByEid(eid) {
  242. return (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  243. error: Error()
  244. }), ECSModel) : ECSModel).eid2Entity.get(eid);
  245. }
  246. _ecs.getEntityByEid = getEntityByEid;
  247. function activeEntityCount() {
  248. return (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  249. error: Error()
  250. }), ECSModel) : ECSModel).eid2Entity.size;
  251. }
  252. _ecs.activeEntityCount = activeEntityCount;
  253. /** 创建实体 */
  254. function createEntity() {
  255. let entity = new Entity();
  256. entity.eid = (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  257. error: Error()
  258. }), ECSModel) : ECSModel).eid++; // 实体id也是有限的资源
  259. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  260. error: Error()
  261. }), ECSModel) : ECSModel).eid2Entity.set(entity.eid, entity);
  262. return entity;
  263. }
  264. /**
  265. * 指定一个组件创建实体,返回组件对象。
  266. * @param ctor
  267. */
  268. function createEntityWithComp(ctor) {
  269. let entity = createEntity();
  270. return entity.add(ctor);
  271. } //#region 过滤器
  272. /**
  273. * 表示只关心这些组件的添加和删除动作。虽然实体可能有这些组件之外的组件,但是它们的添加和删除没有被关注,所以不会存在对关注之外的组件
  274. * 进行添加操作引发Group重复添加实体。
  275. * @param args
  276. * @example
  277. * ecs.allOf(AComponent, BComponent, CComponent);
  278. */
  279. function allOf(...args) {
  280. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  281. error: Error()
  282. }), ECSMatcher) : ECSMatcher)().allOf(...args);
  283. }
  284. _ecs.allOf = allOf;
  285. function anyOf(...args) {
  286. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  287. error: Error()
  288. }), ECSMatcher) : ECSMatcher)().anyOf(...args);
  289. }
  290. _ecs.anyOf = anyOf;
  291. function onlyOf(...args) {
  292. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  293. error: Error()
  294. }), ECSMatcher) : ECSMatcher)().onlyOf(...args);
  295. }
  296. _ecs.onlyOf = onlyOf;
  297. function excludeOf(...args) {
  298. return new (_crd && ECSMatcher === void 0 ? (_reportPossibleCrUseOfECSMatcher({
  299. error: Error()
  300. }), ECSMatcher) : ECSMatcher)().excludeOf(...args);
  301. }
  302. _ecs.excludeOf = excludeOf;
  303. function getSingleton(ctor) {
  304. if (!(_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  305. error: Error()
  306. }), ECSModel) : ECSModel).tid2comp.has(ctor.tid)) {
  307. let comp = createEntityWithComp(ctor);
  308. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  309. error: Error()
  310. }), ECSModel) : ECSModel).tid2comp.set(ctor.tid, comp);
  311. }
  312. return (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  313. error: Error()
  314. }), ECSModel) : ECSModel).tid2comp.get(ctor.tid);
  315. }
  316. _ecs.getSingleton = getSingleton;
  317. function addSingleton(obj) {
  318. let tid = obj.constructor.tid;
  319. if (!(_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  320. error: Error()
  321. }), ECSModel) : ECSModel).tid2comp.has(tid)) {
  322. (_crd && ECSModel === void 0 ? (_reportPossibleCrUseOfECSModel({
  323. error: Error()
  324. }), ECSModel) : ECSModel).tid2comp.set(tid, obj);
  325. }
  326. }
  327. _ecs.addSingleton = addSingleton;
  328. })(ecs || _export("ecs", ecs = {}));
  329. _cclegacy._RF.pop();
  330. _crd = false;
  331. }
  332. };
  333. });
  334. //# sourceMappingURL=c5e5c7bde9de8428d7299c082b15f0b6b145d037.js.map