{"_id":"@antv/g-ecs","_rev":"58-7e584c0110e378551d3be0f76bc906a3","name":"@antv/g-ecs","dist-tags":{"latest":"1.0.0-alpha.3","next":"1.0.0-alpha.15"},"versions":{"1.0.0-alpha.0":{"name":"@antv/g-ecs","version":"1.0.0-alpha.0","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.0","maintainers":[{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"xinming002@gmail.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"4d67e603823ecaf24a9181eb6ce7253795f67042","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.0.tgz","fileCount":20,"integrity":"sha512-ltk/eCFdLPtqLiHBPgROO1p9aML+QC1BSnn6LMEPVrJjFrA0OcLO90EC5gbmm1bnzThqPVcotsGJMezDUGdBZg==","signatures":[{"sig":"MEUCIFTd7dXbHzNUfCevzVz3Gk/YzA9swpAAz68Pfn8da7DyAiEA1Sqc1Qco/J/LOyKCax5wX2hJJcr10uKcG78p0wf//wU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":203522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgt1Z8CRA9TVsSAnZWagAAz6IP/RRI334y4CO3qSBcHDMy\n/13JEMv1dWcbJueMwEVuLaNwQUG3MD5oyCK5bgdM46dhqqB2jDJx07We3TLk\nbrhHcHx7dv2v3HpBXdCq6U5fA1AmNmEw1X6fJRf5caO5g6y/LrFvDgC7rXqW\n8Q2kHNq7F8oaLn6hl1Wuk/JcS4Nuc5CkGkRqv1p/dyhDd/KF0iNcjrHMzpbQ\ntRms7ErFUfv5DFA8NSTIZWmpg4Or/OZFnoE6dMIkGvr7ddNIctfZHC5W4gyi\nb38PKggZEzhTBK2i7O3i1UyZFmCP8UmolpOvTcQSUGybcq2IvjCewDOrp3+M\nXgMDLkQ6/X1q+V418NhfJJoiGGJ4HiJZEFb2NC1JpU0lMqPc34OONR80MvTP\nTVJOMH9zvC+Sb/Iexrqtxy9QFGzj/D5jd/RCy5HzRcO9BtHwfUavFXJnVck4\ndp/AKa+7v4ekCfr9CDzz3xadC4M6DOBla+/Gobcg5fvaEwnMWLV0izBNERXn\nCDso2swGt2l8OjROsZFCqTyXMDIXP2/RbjMnDYziM7nnUKgAVKeci15kZOYi\naun+EovtgrMADk3rA6Myhpz+h2vuw88AzPINTiPlmPT4DnLn0xjbO9i8aNoV\nE9Ta/2RDiM/2CPXn/h+kvn5QCQ7UhLD8sEhGpmQA3eF1yGWaRme2M8i2oycT\nQ1xE\r\n=OhRq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","unpkg":"dist/index.umd.min.js","module":"dist/index.esm.js","gitHead":"1218abbd3b3d843947047e7ee8f65089aa9c44a4","_npmUser":{"name":"zhanba","email":"c5e1856@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.16.1","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.0_1622627963950_0.8085680838803804","host":"s3://npm-registry-packages"}},"1.0.0-alpha.1":{"name":"@antv/g-ecs","version":"1.0.0-alpha.1","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.1","maintainers":[{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"xinming002@gmail.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"0f8274ebe86765072344d513d794632d3aa381bd","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.1.tgz","fileCount":20,"integrity":"sha512-GP+hCRxCpHxyGQZZzxKrYGAr9xDCFPsFW8aZwMLGT2TnE/bv9zfqtC6ArK4VCeJqKLHcEJukrxG6HFUEduIeHw==","signatures":[{"sig":"MEUCIG2Kk5t1F1c5S+/oXlRBcql+dk3/4co4dGAkQapJ7otvAiEApRGirkdRtUvEaCYpTmO9o1tDC5tfliJisQJjiRNJAX8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":203601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwApeCRA9TVsSAnZWagAAPVgP/R9W8aChp8gdVzaJUsx6\nse73oiTwk9nIsvBZ0q56lL59TSP+1inSwgAUDMZ6k7ujc2CjJCjLs/ff8GZj\nxaqemSuk72sv3RpW3IO2tPToXTTGE7WaC617AfUs82MKti7baDDF1Ve/LXzb\nMDtbW2E4PJp9ZqsFqfpZ+sXWni4cFK/8cJXBudO5S5pA0RFoX59ZSsl36/7A\n18MATrQEXv/QH0c/lEr/bLTSlhCBNn0wyauxo/mukOPPJbPaY3jp5b/CFdYz\n36atl7tgGa2au/KWukY3fTTeEm9l4sMv4qm4z7GojNaNIKOtcsJgoRNW1n4K\nXVTXqwFuWJ6atuaUwHnheASv4zoff2Q0UrQpm5x38j7APwoKG66wmvGYAMns\nV2veIMH3NJZ7r5ebu/8+3yMkPG9wcOQxCIlYcGOnISkGWtxZm/C76zunkSkn\ntHXM8ytEnXQ6M3+f/myZt3yYU3ox+GoKG1QoazT/3wReg1ydXBLm+6l+sFRb\nFekCxRSUHFFFtnHIvvkMzmgxNADtrV8iyz+YugQ2Wg7WEKz05+NU/GfHTw8l\n4RXUVLbrLj549ycwA3O4b1D40oL58fLA9y6bd7/UWJvAWmOqtmzuP2bfgWbD\nK+WEo5ybcEemYJt+MQgDU6a16LB37wzFrUSd7nx7QzsdIhVxImvKy3MJN15c\nau4g\r\n=z57D\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","unpkg":"dist/index.umd.min.js","module":"dist/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"84ec7a493b5161bf00356bb887d13a35fd2f0899","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"12.18.2","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.1_1623198302443_0.28616050439515517","host":"s3://npm-registry-packages"}},"1.0.0-alpha.2":{"name":"@antv/g-ecs","version":"1.0.0-alpha.2","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.2","maintainers":[{"name":"cxxxxxn","email":"christy05.chen@gmail.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"xinming002@gmail.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"c1cc08ecca0c0152c81441a628f1c095e08457c0","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.2.tgz","fileCount":20,"integrity":"sha512-05SAvP8UKRyfHj8BJBHrYnfyVTbWncB5/0mYEM94/uA8Xy+XIiLlYx/WjW3EOj0bhGAghk+iVlI0HcTgI/7A9w==","signatures":[{"sig":"MEQCIF2VwtqcHdUdQ0v7BCoWRRpVEb9m4RIYikwhK1O+F3vbAiBXzDzxdVdzRPkXg6CoAzW64UZVdXPx9JalqdHPqzbuyg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":194059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg47s6CRA9TVsSAnZWagAAWj4P+gK0jrJtB8jiO68ISl+Z\nMINXEDmPXsOAMciJm2R5Ws1uaPkvfBKA1eoyl4wAifdjUyp/2JURrBPU7SXV\nrN6VgjzoKkVWh6gCbsvKcj3Ntjzwc98GaHz6iasj0npEh3Svjjz02UcSDg1R\nBwIQd54SKr+UTFc6IVqK8bDhbEVGp+OcW2NVOIMMXyOBj5Kc0XfeMYBU0nsH\nIsgAeJbfIYDrtEq86nAsMgptHI6EEdDE7Rl43zG72xNbncwMgp0bBUWIPNuX\n6EiJaoZu/YMpfGbj041EbtHtUngvZalroYZ3eKqp7owsF9b3vHqzGBf/8N6K\nQ+tFFVhMxH1uxVokH3sEoY0zYhm3DD2BHLReEpyexPe8ellj43pcvETq3Zsd\n5nV58bY255Xc2O2SCjc7fj/cSnmCdObPanpC6rr2eU4/u4fPgwyvCZEGbnfk\n1oAtpRCLa2FAT6d9/bY6Z/0MjzypJ+W4jq3L6pSb+2xrv2N8wgbjfFT1AkD5\nH4LiWy2RLxAYregiXbZk1KHeYcHWVIfhsjjQTA6jlXREgW3PCdc/02r4kiDq\nmtpB6Ld47BXpPIoFE41HOAeSn9rr7CPYKsWYfRBci2QsYVcabhaklrJb6OBm\nz2vp8JEhpKDW/XGhs0OhJIhOJk/tsAQ9g+yOo08eVs55pbqZYlCdi7yFTPOD\nIBwp\r\n=Qzp6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","unpkg":"dist/index.umd.min.js","module":"dist/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"2fe2253d4f856f456d8a4e4929b1dba6fd42de8a","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v12.18.2+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"12.18.2","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.2_1625537338047_0.9681920665290529","host":"s3://npm-registry-packages"}},"1.0.0-alpha.3":{"name":"@antv/g-ecs","version":"1.0.0-alpha.3","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.3","maintainers":[{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"67b3c506478d0b23e88666b69d853e1fcedb379b","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.3.tgz","fileCount":18,"integrity":"sha512-LopPofXrP4gLYMlgiJjo+4wulttsGJZwHitBT1hWSPi1R3rd7cMO0aJAN72R9Cg3kD+uRAmP55jLEppEnGbc7Q==","signatures":[{"sig":"MEYCIQDQplWIT/whx076XucG2oPw+sdyBeoP53y9AGTNsK+xhgIhALNkXwMJLEab8CIoat/ryrsSHAFzIkwfwGOHwJBVa8GG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhB1s7CRA9TVsSAnZWagAAsDkQAIggTfvriMgLpwZFC81a\nD9ax4gg4rhrzLgQ1E6Tdsg3xAyrLDIEU4fImQZWCYeqDHGimoyFrXffsGEAe\n4WuBzknQT5LwJpv1ENzhW/JCOnTQQVt41BU6mcWUTuDH5HriOLwlNxIKpaol\nbJ4BN9vFYyUAtWh0TcmZNEPpL3HghL/8xPCE6svZs3VVNnhKEoOQ9bHTgQj8\nIfiFMkZnI4gXRGN75v1KtZTCKe9DUpxOoPKr1pciuqSiqtD9P8Uk3QE1PQrs\nwuOluXfT+K8wbuvNFe53zfyhvJZuYDjQOZ0Vb5tZbRkR41R2mwOUgE1JJ4tp\naU9MUp072rRVbeOCbgQkN/P8+P9Jof+44xSzIr2d2wlCpsgcHgmTFq+5HZ4a\nOU1hk7LhBPL2rimZeRiw/f+ho3tbTpbkqAzVPYENZ7BWx6HLqNj0IS08FJ0x\nZhM7c/TC0akU9LI9qCqSfsec2V3yNP2dNX5dOkDnZQH1aEMn7dBZu0grLlro\naNnI7ApeAXaSv2IP4YLeEs1cfbmRZfTsuRGUU2umOU8dXxDNKLU3Q5XStD4N\nlXDbI4Pfd4uKxZLirCZTKwlQV6sOPSPXZIdij1HfznTbHgGaiRoVR3D/qJVE\nzUSSRqHe5+wgHqhFO2rqZ7682aMI/69oZKyM+O58fqOPsN6P2FjfWBKaH7Xt\nrwmT\r\n=o+v4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","unpkg":"dist/index.umd.min.js","module":"dist/index.esm.js","gitHead":"89b6ee070dbb7fdc8dd9c07c6466fa5961caf7be","_npmUser":{"name":"zhanba","email":"c5e1856@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.16.1","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.3_1627872058915_0.823692719341812","host":"s3://npm-registry-packages"}},"1.0.0-alpha.4":{"name":"@antv/g-ecs","version":"1.0.0-alpha.4","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.4","maintainers":[{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"4588efa59f1c20b5669076ee4c65d020918c98e3","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.4.tgz","fileCount":18,"integrity":"sha512-TgyWm4ZB0ah+kgdbt2gc/gnyfLpbCenDYd/3CUVchy0xmkM9pb2VQJASYIYhQfGuUHwWEWzw54+gQVtOGN86GQ==","signatures":[{"sig":"MEUCIA8z8WMDPGnEi7z/H3VkB+cWPMlhtecP6aExjQZk2N8PAiEA4qfWrEv/gSEMfhisQkobXTKmueraMMW7bprzdE6g1BE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66970,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhNXaqCRA9TVsSAnZWagAARFcP/jTlT48I8Us5BuKkxmWA\n6M8gaOltwBwKN0yBo2cn9tQtPE16uEiZALUMylWgIQ5qfn8i0ChEsEztw+td\nwaF1twOGlSaqKJIKPpTuxAJOeee+b+N381uyK8+UuHWCtPyPBO6B0CcQW+am\nBVDF19ZC0qi6y/jyT4uVNaZiD0+bFvUisDb+aS/DFIvxinImjIWf6ShToGWL\nHYkICWkhIRIHxLuqzRWk4WfCOCncA1BVY8QVCIsEqclWlDrJiVPLc1E1oc+R\nNAOss3sQ1P3INnGgeD0KkN/T5Dg3bh0NlhhbEIR2CcjiaIG4zadL+KE11m3Z\niTZXydVvQ7UyIVibFhhybnOivZKkuqdVGdugOgs77U95g0t319kbJFbMTYxB\nh5xbrvC+ykHGinvjGaSRs3BU4IvZlsFfTzXVuHuMPqdCA33qerhN9Y9oNYdK\n5efIEs5P/fhyp4XxjF4xJe1yqLdnvi7uVczYaOLZA1TTJXQl/CGmET0ppDhI\nh205OOO1Ho+KejForE6i8L39y9Ed7ozWBZpubL72mI7LsqluXsla4IOP0+il\nH4X1Lb0RTClOYzAMiiuT0qUtwkAM3IzWuHhfGT4bUay0/00II7mF4wB9xJzc\n7vuI3bWmJKqZS6B/uwqeOLMRdHEzIjYyEAo+zzMKZyICRC9EiOlSFJuhHtRD\nDyWa\r\n=JH0U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","unpkg":"dist/index.umd.min.js","module":"dist/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"6.14.14","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.4_1630893738268_0.676279029572215","host":"s3://npm-registry-packages"}},"1.0.0-alpha.5":{"name":"@antv/g-ecs","version":"1.0.0-alpha.5","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.5","maintainers":[{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"5b08ef585bb09cec699b5a00486225a8eb448819","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.5.tgz","fileCount":13,"integrity":"sha512-1X/NU8D+SSg7GmJnD2o+xR6ZNCOemgQYRw/VhjcQeEsv4ot5061AoThL27obbvTHK21UZ/Hg4R0DZxStgKNJwg==","signatures":[{"sig":"MEUCIFB0sWzFTRLVRv5tiikT4ztAy6u0OMKPa+3L75NWdCmQAiEArxODs5ytUo1Hkqy4Btt82r7CgOeSsxfJFS2/3QEzwu8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48239,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOH3eCRA9TVsSAnZWagAA0pMP/i3ENXjrPhelf0taoMoI\nI/mLKAryWuy4Bfkfuz7DeK9QcgyPDvSQp63HrW7cOwRd4T94cU5OIZ/f0yJ+\nM+OPZqVT8yv4Gl2GssjnTeQPE0UhJ5GS/bUdS49SHMZ04FN9WQHrxhh2cpR5\nkcDZLAuMj7BdEQBZnI/dz+bTLIx/hTppP8SrVctq13OVsF02UOd1rKoaCMzF\nj7viUm+xbh8ft0CcXC8vrBLCm+nxuIIjXrZZefWX8AjbkH9l0ekgLTdBRtPq\nBot1vpXxIHH5nfsGWYZj0f8qsFTB6VXYHygaT4b4rB3Rz4K7kaWAUuM/7WYL\nB9kWF31dXtSjCRwQfnq5wlUST/Nc1KKPZNPZB9xpoMWCwAUDtwroqrc5shR4\nqhEJw/VC6O6bWx/NNHYrvO7gZqL8S6bIDX8+Zm0rJudssjpK8S06OSbnsqK1\nv/bPoxRCXs7/iCa5Q2P4O3O9f9LlOqmaKM3FmBR6F7NEtfrRgu1tBMT7ANCK\nmzV6Z5hoAMX8i1hEVOeNzM1CpzzxlitN6NFvbpqOg+o0ODEIYbjho+anK8R9\nUFtOkYpy5y/l7/l1D7w1CAqBDQp8eD+UrLlLIO2fnDe4Z8JAOqxTKcgSvXD4\nUqAWYV/u2GtiJDcTOOSRWQShPowF+441bnMBA/PsEFfLgA0wLq7NTtRW+tqp\nfyrq\r\n=5bva\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"lib/index.d.ts","module":"es/index.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"7d98ce8d3bfed8c01ab2b901a8a1c8c1131c68e3","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.5_1631092190147_0.3989954635822839","host":"s3://npm-registry-packages"}},"1.0.0-alpha.6":{"name":"@antv/g-ecs","version":"1.0.0-alpha.6","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.6","maintainers":[{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"47cc137dd2625be344f82ec969bc24da6a2ec2e6","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.6.tgz","fileCount":24,"integrity":"sha512-vKheAN9qPuASglsYwkYHd58Zn9VgXSnrAr0E/MriSrEv0o+l406wGZ8zdvP/AyMnfpJ+iX9SRMu2GWlPp2WWlg==","signatures":[{"sig":"MEQCIF75YL2fXJPsbp/N6rViRdHwQ6X9Lc1kuUNQUWEHqx9+AiAygW1cjtNMN/89J42Jn6okcDAScsD20gj6BdYpiBHoOA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":88885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOIkrCRA9TVsSAnZWagAAq4EP/3xI5QIJmcHsgBl5I3kl\nUe+5DPrDNC0r4liHYAGCA+jxnVURm9JpVu9lzV9WbADvcjUZanDHoanUGuYd\ne8GcJ7UwFcfkJosGHv4Yq3Vh7OzbYpCXep1hDjozdqCOfxSY3TGJkP4yr19V\n9zgcKCeTpyi9iiGqcN2Vj/PDgmbcO27q1WaHj1l0ZV6IGj3K5fkjYrTLgonf\nDSULNkWvVEry45mvOQg7M85rGLhw3fNpkXxkYgQ9jErgwRWUSFBki51bPQTZ\n7PqJgRoPH4a/FrBhIGeaaWCswg/h5mY/kBIVmF3ucGT6rgly4EPuEhKXXUTv\n+DsBseKUbnnsFs+YqmGf6StDQn3Q6VME30Xq/B4rv8Ls6FrupnSoIkCx3Ke4\nEbwZUK3DyYsEqxCaVxTekWrKLTCRN+pagIvHOHAun/Skuf7jBUzPB8V6DmxO\npTGNjCEkEkCsUVlsPUbHrX2B0388+M6RGLk/LHn2u6oZ+99Ga2sopN4vstWT\nbuYg47VYFwyb8Okc4d60Qc17LdqIVeil+4z9TL4dz/dgmYFRegkUMClkVQsl\nEiLieBrbO4xU+7om86HUlOEkS7wqpef+rb1MctKN7JWp4D3SJdD1t6eu6tVk\nV1esev6hm+UCvfluTftF+DzlQxY1be4O6LFrx2bOzGRI+0b13/9hLoOIosTp\nBPYH\r\n=qz0F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"lib/index.d.ts","module":"es/index.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"bfcb87639cfb109825e1d4515ffef6ea48e2b65f","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.6_1631095083059_0.7152836024398697","host":"s3://npm-registry-packages"}},"1.0.0-alpha.7":{"name":"@antv/g-ecs","version":"1.0.0-alpha.7","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.7","maintainers":[{"name":"iaaron","email":"943720372@qq.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"dfe5e35038e7774588abef7e15f2b24fbad2e39b","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.7.tgz","fileCount":46,"integrity":"sha512-0pRsfcmIRZAqnMJsHJ2V1bRMLb2Oh2gkde96lnw5azAOLTLiRUCg/OgtBX0odb7VNTX6LD4HmjhU1veEblvtLw==","signatures":[{"sig":"MEYCIQCFHxOjQrbUS3dZBfUxYzNXUGc/pqUoZoLigX4+4WXfjQIhAJ2f0UkSU8WxiGyS67vALs6n+MxBIKxcz+l7Kkxo7xi/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPyu3CRA9TVsSAnZWagAApKEP/3T25S9ORidSvB+E/rPd\nQ/5Hfx8vh9bEWg4jAx2LOMzwPkpR9RAd+a7VG3FrqVGVNWnkVbI7sgvlYZmO\niFgFr7yXHcLVUiL09J/Pb6UNS/wkMD62lyRc70rYb1LdFTHcRsMETVYpve4V\nm2q1JtgpnWf1BqlXmcXgl+qVbkxB7rdwSyNkbO6IxBS1gAZME6EzSTIChIgS\ngWR2o45PvKpBdjDqZC5B1O0+6fdlNGSFv8bDowI47nGG+LlgMGhAH9pUNDMC\nQc5O3yaFb7i/8EaipKMsTJ65gtXkBemztZA8wlQ/ywSHY/08V+WCKUobMrK3\n70/JZhs6sGVZWcKcJUFS03YdxSqtO/a0w6FpJbOxbPvn0evMlQSQppAVkKgK\nI4WKFcXvII2nON3rJbYR5xYkC1oSbWCB+lEp6zvPmMhbmXupUhRhzH9LZoom\nX/HB8DeXaT4T3SG5pEGdfhy63TrNba0i/if/vNmDnOJDrInjYLj9Ycu8a+CL\nxhQtNgqX3E6jCIeTi5OS1jRBmEsGpHIOIu/6CTtd+uIMyRPxXohiPVMQ20Ka\nM5DBsSEo1mY/wPNU/6V6GxKb5yrPUIh/pZXyF/01f203xHVvwEqOQ41IUW7p\nn1KvMbWy6JdrPemfrkulAbHz5eM4euVaLPPPQV0pr/fbIrNel5Ams5BYX0aU\nJ6WR\r\n=vhzw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"lib/index.d.ts","module":"es/index.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"9dd75b27ba6bf0c42256b1971cde602a765e7f23","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.7_1631529911403_0.07183220406994817","host":"s3://npm-registry-packages"}},"1.0.0-alpha.8":{"name":"@antv/g-ecs","version":"1.0.0-alpha.8","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.8","maintainers":[{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"ac7f604ed36a551009879e675ae4adcd5a171600","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.8.tgz","fileCount":46,"integrity":"sha512-mJsoDE+qmDbOn0Gab3D8ICMmDRUqEOkzzWhdfx897lmxrlB92u/vAYSRQ2bGmMN5qUxqXzHR0bd/jP6SDemtIA==","signatures":[{"sig":"MEUCIFJLXaydEvkhfukM1jvh6WSW1Sz1/Pdb8WoYWEAeualXAiEAkLwbn7Xqhu+SmL1zpaRMiivEPUS6kSPOelKtY794MJ4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64974},"main":"lib/index.js","types":"lib/index.d.ts","module":"es/index.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"71623c892dc55a274313f2f1b392c6ccd25154c1","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.8_1632712431751_0.9504771980634388","host":"s3://npm-registry-packages"}},"1.0.0-alpha.9":{"name":"@antv/g-ecs","version":"1.0.0-alpha.9","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.9","maintainers":[{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"92a57421839e1088bc2bea85e7e94ee973486684","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.9.tgz","fileCount":20,"integrity":"sha512-UVPuSVPQj9zfWPPCF+F7vLZIJtTCtjPGWl6MnIsEEsAuu9YESrwf1E6Olwzu1rNbo0rNOoD82Hvh5XwQ4Ekv6w==","signatures":[{"sig":"MEQCIAE/68BFTOVqGRXC1CS5HeJ3laavXEyg5C4BlG3fvV7pAiAVPOt8djRti5uKIWxKSOMfexHLrUAjJWLrebumjnKXog==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":194255},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"e2b8bc287c7faa181013d9e5df071ff97d702c94","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"inversify":"^5.0.1","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.9_1636103543894_0.7951157621672642","host":"s3://npm-registry-packages"}},"1.0.0-alpha.10":{"name":"@antv/g-ecs","version":"1.0.0-alpha.10","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.10","maintainers":[{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"69c08213510acb4edce4227f532aadf0e929818e","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.10.tgz","fileCount":18,"integrity":"sha512-2rFys6C+arKASnjxm8vQB2QzKXK1WqxQV3U6XmdEvNg/Ygk/BPqVUmmcZfisEiFuDal/ySvUNWJKKB3JULclyw==","signatures":[{"sig":"MEYCIQD87C1oztRNI8TUIxxC60Oqvps3mOJTBafWaDDldli9BQIhAKTEVWRX+rg7CcQGbAr02orrXleqatVtKWym1lS4Q95T","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66527},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"04974923388e3c1e3c47d591c251380058372376","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"mana-syringe":"^0.1.0","eventemitter3":"^4.0.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.10_1636358177894_0.6652664430478072","host":"s3://npm-registry-packages"}},"1.0.0-alpha.11":{"name":"@antv/g-ecs","version":"1.0.0-alpha.11","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.11","maintainers":[{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"ff56933df46534301b7a94bc43bfd301d9eaeec8","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.11.tgz","fileCount":18,"integrity":"sha512-AnWiOMG86ikBOXZLZI0tPm+jX0MNUac7QJMxy1CSnP0VvI9wRr2KvtKzjjiIJ7QD34I5XykpjEQOCy5N7dPZeQ==","signatures":[{"sig":"MEYCIQCaiYxyU+kwiEpCDg72dlHcOCU7NHHxmb2nk3xVwck0/QIhAP7Y1x1/GBqoxvY4Ot/SuxjJ8Q0U9d/JWWKCpmpEOYBG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61597},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"c01101beb86f98aaa569f97c678c909d4f3faaa3","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"mana-syringe":"^0.1.0","eventemitter3":"^4.0.0","@babel/runtime":"^7.16.0","reflect-metadata":"^0.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.11_1636360177073_0.9386833468417846","host":"s3://npm-registry-packages"}},"1.0.0-alpha.12":{"name":"@antv/g-ecs","version":"1.0.0-alpha.12","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.12","maintainers":[{"name":"yanxiong","email":"496845051@qq.com"},{"name":"susiwen8","email":"susiwen8@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"327f951728e7e5bce7ba7f761fc11f0baf1776e6","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.12.tgz","fileCount":3,"integrity":"sha512-npvdnZdnP9oYoGheH2JdVm48qoNz2D/hVMR3PNaFBmaDp8kU1Nspl33gxQD2JxB01UsatyzmD8gXDJsepJS96Q==","signatures":[{"sig":"MEQCIFz2zeyG5QtnPMgjuEC7Nmfzz/VxXb+qLzUBvVIrDB+1AiBsqAj7e7Ocy0F4HFeqYgZ49ECGuSJM4gBQhHs8SfP1eA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8425},"main":"lib/index.js","types":"es/index.d.ts","module":"es/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs)\n![](https://img.shields.io/badge/language-javascript-red.svg)\n![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n- a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n  const time = performance.now();\n  const delta = time - lastTime;\n  // run all the systems\n  world.execute(delta, time);\n\n  lastTime = time;\n  requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n  static tag = 'c1';\n  p1: number;\n}\nclass C2 extends Component {\n  static tag = 'c2';\n}\nclass C3 extends Component {\n  static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n  static tag = 's1';\n\n  trigger() {\n    return new Matcher().allOf(C1);\n  }\n\n  execute(entities: Entity[]) {\n    entities.forEach((entity) => {\n      const c1 = entity.getComponent(C1);\n      c1.p1++;\n    });\n  }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n- [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n- [Entitas](https://github.com/sschmid/Entitas-CSharp)\n- [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"b8af919853fa578b4aa6c5e84715948085ac0170","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"mana-syringe":"^0.2.1","eventemitter3":"^4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.12_1636685098280_0.8264710438124583","host":"s3://npm-registry-packages"}},"1.0.0-alpha.13":{"name":"@antv/g-ecs","version":"1.0.0-alpha.13","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.13","maintainers":[{"name":"yanxiong","email":"496845051@qq.com"},{"name":"susiwen8","email":"susiwen8@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"c98198cf0ea48809e8b61b6de196e918e4ce530d","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.13.tgz","fileCount":46,"integrity":"sha512-HzBaad5JovVQu8+YigcBEb5719McgIBvRvsM4FuQ93uSaH4Sc/Zg8vUF3g1sKg2Se4+b/S64TaZuoYI0jn55fQ==","signatures":[{"sig":"MEQCIGKFXfQdhVzDdDLG3rG4514oeKjCMFLdE2vSjom/NX2+AiByhiAVQ8FGFm2MCf09Bof0eRCf9DLdo5hzpsTekFyZgQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64665},"main":"lib/index.js","types":"es/index.d.ts","unpkg":"dist/index.umd.js","module":"es/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs) ![](https://img.shields.io/badge/language-javascript-red.svg) ![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n-   a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule, true);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n    static tag = 'c1';\n    p1: number;\n}\nclass C2 extends Component {\n    static tag = 'c2';\n}\nclass C3 extends Component {\n    static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n    static tag = 's1';\n\n    trigger() {\n        return new Matcher().allOf(C1);\n    }\n\n    execute(entities: Entity[]) {\n        entities.forEach((entity) => {\n            const c1 = entity.getComponent(C1);\n            c1.p1++;\n        });\n    }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n    const time = performance.now();\n    const delta = time - lastTime;\n    // run all the systems\n    world.execute(delta, time);\n\n    lastTime = time;\n    requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule, true);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n    static tag = 'c1';\n    p1: number;\n}\nclass C2 extends Component {\n    static tag = 'c2';\n}\nclass C3 extends Component {\n    static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n    static tag = 's1';\n\n    trigger() {\n        return new Matcher().allOf(C1);\n    }\n\n    execute(entities: Entity[]) {\n        entities.forEach((entity) => {\n            const c1 = entity.getComponent(C1);\n            c1.p1++;\n        });\n    }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n-   [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n-   [Entitas](https://github.com/sschmid/Entitas-CSharp)\n-   [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"97b0cd921c395a28d0432b33db157723b7967db1","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"mana-syringe":"^0.2.1","eventemitter3":"^4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.13_1636705788844_0.8898701831506757","host":"s3://npm-registry-packages"}},"1.0.0-alpha.14":{"name":"@antv/g-ecs","version":"1.0.0-alpha.14","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.14","maintainers":[{"name":"yanxiong","email":"496845051@qq.com"},{"name":"susiwen8","email":"susiwen8@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"7801a4e54a123f0998d8802ad21426ce3c20955c","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.14.tgz","fileCount":46,"integrity":"sha512-m0MSgq6Io7Q4+gT/+w5LgUE5+1N8ZPbuMKFhNx4Lc5DlssiA/Y3v2sQb90PQwGIpoyP+KxcsfhJC+SqRnRYYIA==","signatures":[{"sig":"MEUCIHSzEK9C+zaODn110ikOdV2qmHgHxhL41ZUdNMeIHL6rAiEAofa6eZaBU9iy7jESXzPc92RjiMBLe6OGYwFyq7+x7wQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64665},"main":"lib/index.js","types":"es/index.d.ts","unpkg":"dist/index.umd.js","module":"es/index.esm.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs) ![](https://img.shields.io/badge/language-javascript-red.svg) ![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n-   a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule, true);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n    static tag = 'c1';\n    p1: number;\n}\nclass C2 extends Component {\n    static tag = 'c2';\n}\nclass C3 extends Component {\n    static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n    static tag = 's1';\n\n    trigger() {\n        return new Matcher().allOf(C1);\n    }\n\n    execute(entities: Entity[]) {\n        entities.forEach((entity) => {\n            const c1 = entity.getComponent(C1);\n            c1.p1++;\n        });\n    }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n    const time = performance.now();\n    const delta = time - lastTime;\n    // run all the systems\n    world.execute(delta, time);\n\n    lastTime = time;\n    requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule, true);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n    static tag = 'c1';\n    p1: number;\n}\nclass C2 extends Component {\n    static tag = 'c2';\n}\nclass C3 extends Component {\n    static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n    static tag = 's1';\n\n    trigger() {\n        return new Matcher().allOf(C1);\n    }\n\n    execute(entities: Entity[]) {\n        entities.forEach((entity) => {\n            const c1 = entity.getComponent(C1);\n            c1.p1++;\n        });\n    }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n-   [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n-   [Entitas](https://github.com/sschmid/Entitas-CSharp)\n-   [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"a5bedb7fc7482122f6d56b85d9c5654d16677203","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"mana-syringe":"^0.2.2","eventemitter3":"^4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7","@types/lodash":"^4.14.138"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.14_1636710492197_0.2562428691502199","host":"s3://npm-registry-packages"}},"1.0.0-alpha.15":{"name":"@antv/g-ecs","version":"1.0.0-alpha.15","keywords":["util","antv","g"],"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","_id":"@antv/g-ecs@1.0.0-alpha.15","maintainers":[{"name":"zeyuwang","email":"zywangx@gmail.com"},{"name":"yanxiong","email":"496845051@qq.com"},{"name":"susiwen8","email":"susiwen8@gmail.com"},{"name":"freestyle21","email":"675861708@qq.com"},{"name":"soundquiet","email":"fulingsun515@gmail.com"},{"name":"elaine.q.10","email":"yilin.qyl@antfin.com"},{"name":"sturuby","email":"xingya.shi@gmail.com"},{"name":"lviser","email":"liuvigongzuoshi@gmail.com"},{"name":"sakuya223","email":"360965398@qq.com"},{"name":"serializedowen","email":"wjh199455@gmail.com"},{"name":"xdzhao","email":"zhaoxiaodong@zju.edu.cn"},{"name":"yangzhanmei","email":"15809244435@163.com"},{"name":"wjgogogo","email":"906626481@qq.com"},{"name":"leungwensen","email":"leungwensen@gmail.com"},{"name":"dori","email":"418466938@qq.com"},{"name":"iaaron","email":"943720372@qq.com"},{"name":"yard","email":"zjwengyidong@outlook.com"},{"name":"simaq","email":"sima.zhang1990@gmail.com"},{"name":"dxq613","email":"dxq613@gmail.com"},{"name":"intchous","email":"h.a.p.p.y.y.x.d@163.com"},{"name":"susan_ann","email":"lisuwe_n@163.com"},{"name":"jinke.li","email":"1359518268@qq.com"},{"name":"lzxue","email":"120635640@qq.com"},{"name":"army8735","email":"army8735@qq.com"},{"name":"atool","email":"i@hust.cc"},{"name":"baizn","email":"576375879@qq.com"},{"name":"dengfuping","email":"dengfuping_develop@163.com"},{"name":"neoddish","email":"neoddish@outlook.com"},{"name":"jeffy2012","email":"yuanjiefeng@gmail.com"},{"name":"zqlu","email":"zqlu.cn@gmail.com"},{"name":"afc163","email":"afc163@gmail.com"},{"name":"pomelo-nwu","email":"czynwu@gmail.com"},{"name":"kopiluwaky","email":"yanyanwang93@gmail.com"},{"name":"ccnuzindex","email":"ccnuzindex@gmail.com"},{"name":"panyuqi","email":"pyqiverson@gmail.com"},{"name":"bubkoo","email":"bubkoo.wy@gmail.com"},{"name":"zengyue","email":"yezengyue@gmail.com"},{"name":"kasmine","email":"736929286@qq.com"},{"name":"boyu.zlj","email":"boyu.zlj@antfin.com"},{"name":"l1ud0ngq1","email":"lliudongqi@gmail.com"},{"name":"newbyvector","email":"vectorse@126.com"},{"name":"winniexing","email":"wanyingxing@gmail.com"},{"name":"chenluli","email":"chenluuli@gmail.com"},{"name":"kn9117","email":"1175863618@qq.com"},{"name":"xdddst","email":"deng25st@163.com"},{"name":"semious2020","email":"semious@163.com"},{"name":"esora","email":"tygyh2012@gmail.com"},{"name":"nadia_liu","email":"1803275951@qq.com"},{"name":"bbsqq","email":"1491812683@qq.com"},{"name":"mxz96102","email":"mxz96102@qq.com"},{"name":"openwayne","email":"openwayne@gmail.com"},{"name":"pearmini","email":"subairui@icloud.com"},{"name":"pddpd","email":"pddpengdi@gmail.com"},{"name":"yiqianyao","email":"2912401452@qq.com"},{"name":"zhanba","email":"c5e1856@gmail.com"},{"name":"cxxxxxn","email":"christy05.chen@gmail.com"}],"homepage":"https://github.com/antvis/g#readme","bugs":{"url":"https://github.com/antvis/g/issues"},"dist":{"shasum":"d78cbe8ace86817bf45ec771054a191d31efc518","tarball":"https://registry.npmjs.org/@antv/g-ecs/-/g-ecs-1.0.0-alpha.15.tgz","fileCount":46,"integrity":"sha512-2pjlJPSC272B4XYS2D2z9VyPdgtAnAtf6GEeDHJNeKi9JU8lOfmUBN910pjpb/UqCa48dUxmFY5Af4XUY1P4gA==","signatures":[{"sig":"MEUCIQCIbLlGYnQeQkXDVDjPKxXZI1E9pKtu2cTzEX0LR+UQYQIgdcoJH+S9lVGlbL6ngnRYwC8fp7MefwkRzqgDOxm4plg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":64627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlgz3CRA9TVsSAnZWagAAFu4P/RaP5uwhfca0C5K5PIS3\nO7MWaIeo2KphW7YDf1w4oUk3oldQ6zc5lXn9D8/M03jPU16pr6MiRi2sewOb\naHh6guWX+o9Bh85RKt8sADos/gIOTuKqGIdi2YNvQIxOi8Zu17Z9xpaUc9A5\nC2Y2x/OBHwrConnH4aGAVHwaiALnRJhmhG8sQ/rh8A18HRmPXd30DtmBCa94\nzXH5Nj8zp5G/SOC/tDnKG6AI1CWxE5O0xfEtYK9VJAfy0WKOZ2NN/2CZqIx/\ng8J/DYqAlnaC7mBrCtiDUm45FbprlqeWSZD6G6C0neyAm/vvNDoWJLVxHhJ2\naEnY3+x8YkDqIMLuE+ejaGPlveOnvEUYtrkQvh42cbDirgiLl5jaKJ5zR6VZ\nHKqqt2A8slhgWLGU6qtSyY2uP+NAGv/dXmhyh10KHBNKg8JYB4F+6fH0l4FF\n1MrWSNuhm9P0iLcO5Z7UdDhtSvc4f16SLYSswnftSWttgshrM8tZHNzVDHKB\n3TqTIZ/Zglh6J0nHfX/DDTbsH0WNnl2qVztXMuFPZUZssYnWdkWofs16hPxb\nJuK5tUsSwtu8Xlw4mZRoiAVsNgfeUU0se3m/pnKbAXToOBylsYU6YS9fp5lp\nEHlvzuUpa9aGZl8G6NZOIjXULkzPxRwIpaQlRSX9daMWK7wPIvKFoubmLQgT\nDzBX\r\n=6Dwv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"es/index.d.ts","unpkg":"dist/index.umd.js","module":"es/index.js","readme":"English | [简体中文](./README-zh_CN.md)\n\n# g-ecs\n\n[![](https://img.shields.io/travis/antvis/g-ecs.svg)](https://travis-ci.org/antvis/g-ecs) ![](https://img.shields.io/badge/language-javascript-red.svg) ![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n-   a simple ECS implement for G\n\n## Architecture\n\nA typical ECS architecture(borrow from ecsy), we use `Matcher` instead of `Query`:\n\n![](https://blog.mozvr.com/content/images/2019/10/ECSY-Architecture.svg)\n\n## Usage\n\n```javascript\nimport { Container } from 'inversify';\nimport { Component, System, World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule, true);\n\n// create a world\nconst world = container.get(World);\n\n// register components\nclass C1 extends Component {\n    static tag = 'c1';\n    p1: number;\n}\nclass C2 extends Component {\n    static tag = 'c2';\n}\nclass C3 extends Component {\n    static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n\n// register systems\nclass S1 extends System {\n    static tag = 's1';\n\n    trigger() {\n        return new Matcher().allOf(C1);\n    }\n\n    execute(entities: Entity[]) {\n        entities.forEach((entity) => {\n            const c1 = entity.getComponent(C1);\n            c1.p1++;\n        });\n    }\n}\nworld.registerSystem(S1);\n\n// create an entity\nconst entity = world.createEntity();\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n\n// make a loop\nlet lastTime = performance.now();\nconst run = () => {\n    const time = performance.now();\n    const delta = time - lastTime;\n    // run all the systems\n    world.execute(delta, time);\n\n    lastTime = time;\n    requestAnimationFrame(run);\n};\nrun();\n```\n\n## World\n\nA world is the container of ECS. We get a world from container instead of creating it manually.\n\n```javascript\nimport { Container } from 'inversify';\nimport { World, containerModule } from '@antv/g-ecs';\n\n// create a container\nconst container = new Container();\n// load ECS module\ncontainer.load(containerModule, true);\n\n// create a world\nconst world = container.get(World);\n```\n\n### createEntity\n\nCreate a new entity:\n\n```javascript\nconst entity = world.createEntity();\n```\n\n### registerComponent\n\n```javascript\nclass C1 extends Component {\n    static tag = 'c1';\n    p1: number;\n}\nclass C2 extends Component {\n    static tag = 'c2';\n}\nclass C3 extends Component {\n    static tag = 'c3';\n}\nworld.registerComponent(C1).registerComponent(C2).registerComponent(C3);\n```\n\n### registerSystem\n\n```javascript\nclass S1 extends System {\n    static tag = 's1';\n\n    trigger() {\n        return new Matcher().allOf(C1);\n    }\n\n    execute(entities: Entity[]) {\n        entities.forEach((entity) => {\n            const c1 = entity.getComponent(C1);\n            c1.p1++;\n        });\n    }\n}\nworld.registerSystem(S1);\n```\n\n## Entitiy\n\n### addComponent\n\nWe can add a component and its initial data to an entity:\n\n```javascript\nentity.addComponent(C1, { p1: 2 }).addComponent(C2).addComponent(C3);\n```\n\n### removeComponent\n\nWe can remove a component from an entity:\n\n```javascript\nentity.removeComponent(C1);\n```\n\n## Component\n\n## System\n\n## See also\n\n-   [ecsy](https://blog.mozvr.com/introducing-ecsy/)\n-   [Entitas](https://github.com/sschmid/Entitas-CSharp)\n-   [EntitasCookBook](https://github.com/mzaks/EntitasCookBook)\n","gitHead":"c0f918d5477e3099b9bfa3ecb077cc411c0b2e3a","_npmUser":{"name":"panyuqi","email":"pyqiverson@gmail.com"},"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"_npmVersion":"lerna/3.22.1/node@v14.17.5+x64 (darwin)","description":"A simple ECS implement","directories":{},"_nodeVersion":"14.17.5","dependencies":{"mana-syringe":"^0.2.2","eventemitter3":"^4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.39.3","@types/jest":"^25.0.0","npm-run-all":"^4.1.5","webpack-cli":"^3.3.7"},"_npmOperationalInternal":{"tmp":"tmp/g-ecs_1.0.0-alpha.15_1637223671544_0.8625963916904442","host":"s3://npm-registry-packages"}}},"time":{"created":"2021-06-02T09:59:23.575Z","modified":"2026-09-21T08:45:12.308Z","1.0.0-alpha.0":"2021-06-02T09:59:24.065Z","1.0.0-alpha.1":"2021-06-09T00:25:02.752Z","1.0.0-alpha.2":"2021-07-06T02:08:58.227Z","1.0.0-alpha.3":"2021-08-02T02:40:59.144Z","1.0.0-alpha.4":"2021-09-06T02:02:18.429Z","1.0.0-alpha.5":"2021-09-08T09:09:50.351Z","1.0.0-alpha.6":"2021-09-08T09:58:03.216Z","1.0.0-alpha.7":"2021-09-13T10:45:11.524Z","1.0.0-alpha.8":"2021-09-27T03:13:51.865Z","1.0.0-alpha.9":"2021-11-05T09:12:24.124Z","1.0.0-alpha.10":"2021-11-08T07:56:18.091Z","1.0.0-alpha.11":"2021-11-08T08:29:37.235Z","1.0.0-alpha.12":"2021-11-12T02:44:58.418Z","1.0.0-alpha.13":"2021-11-12T08:29:49.006Z","1.0.0-alpha.14":"2021-11-12T09:48:12.390Z","1.0.0-alpha.15":"2021-11-18T08:21:11.666Z"},"bugs":{"url":"https://github.com/antvis/g/issues"},"author":{"name":"https://github.com/orgs/antvis/people"},"license":"MIT","homepage":"https://github.com/antvis/g#readme","keywords":["util","antv","g"],"repository":{"url":"git+https://github.com/antvis/g.git","type":"git"},"description":"A simple ECS implement","maintainers":[{"email":"yunji.me@outlook.com","name":"lvisei"},{"email":"943720372@qq.com","name":"iaaron"},{"email":"jinke.li666@gmail.com","name":"jinke.li"},{"email":"120635640@qq.com","name":"lzxue"},{"email":"army8735@qq.com","name":"army8735"},{"email":"dengfuping_private@163.com","name":"dengfuping"},{"email":"afc163@gmail.com","name":"afc163"},{"email":"chenluuli@gmail.com","name":"chenluli"},{"email":"1175863618@qq.com","name":"kn9117"},{"email":"1491812683@qq.com","name":"bbsqq"},{"email":"zhuyuxin0627@gmail.com","name":"banxuan"},{"email":"ojh496845051@gmail.com","name":"yanxiong"},{"email":"wzwahl36@qq.com","name":"atool"},{"email":"610999886@qq.com","name":"pearl_wang"},{"email":"787982239@qq.com","name":"interstellarmt"},{"email":"alex_zjt@163.com","name":"alex_zjt"},{"email":"duxinyue.dxy@antgroup.com","name":"duxinyue023"},{"email":"mrwang1212@126.com","name":"wang1212"},{"email":"gaofh1023@163.com","name":"gaofuhong"}],"readme":"","readmeFilename":""}