{ "info": { "author": "Sean Fisk", "author_email": "sean@seanfisk.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Games/Entertainment", "Topic :: Software Development :: Libraries :: Application Frameworks" ], "description": ".. -*- coding: utf-8; -*-\n.. UTF-8 is used for the em dash, en dash, and the hair space. Check out \n\necs\n===\n\n.. image:: https://travis-ci.org/seanfisk/ecs.png\n :target: https://travis-ci.org/seanfisk/ecs\n\n**ecs is an MIT-licensed Python entity/component system library for games.**\n\nThere are many articles on the Internet advocating a switch to entity-based systems for game logic. However, many authors seem to burn themselves out telling why the old inheritance-based approach is problematic and how an entity system will solve your problems\u200a\u2014\u200awithout ever really explaining what it is or how to do it. *This project attempts to provide an actual implementation for use in real games.*\n\nThe library is called an \"entity/component system\" library rather than an \"entity system,\" as the entity portion is just one building block of the total concept.\n\nThe module is called ``ecs``. ``ces`` is too close to something else, and while there is another library called ``ecs``, it's for an E-Commerce service from Amazon and is unlikely to name-clash in your projects.\n\nAs this module is in somewhat rarefied air, with not a lot of company, the concepts and API may change during development. Inspiration is taken from the `Ash framework`_ for ActionScript 3.0 and `Artemis framework`_ for Java.\n\n.. _Ash framework: http://www.ashframework.org/\n.. _Artemis framework: http://gamadu.com/artemis/index.html\n\nConcepts\n--------\n\n**ecs** stands for **Entity**, **Component**, and **System**. Each of these parts is important. So what are these?\n\n**Entity**\n Simply a unique identifier, used to label components as belonging to a logical grouping.\n\n**Component**\n A collection of data. Has no behavior associated with it.\n\n**System**\n Piece of code to operate on data in components for a single frame.\n\nDetails\n-------\n\necs defines a few core core classes:\n\n* ``Entity``\n* ``Component``\n* ``System``\n* ``EntityManager``\n* ``SystemManager``\n\nThe ``Entity`` class is simply a representation of a unique identifier, and is not to be subclassed. The ``Component`` class is intended to be subclassed for your custom components. ``System`` is also intended to be subclassed for your custom systems.\n\nThe ``EntityManager`` is a database that stores ``Component`` subclasses, referenced by their type and entity ID. The ``SystemManager`` maintains a set of ``System`` instances and allows them to perform their operations.\n\nThe real action happens in the ``update()`` method of your subclassed ``System`` classes. A ``System`` instance queries the ``EntityManager`` database for a set of ``Component`` subclasses and operates on the data contained in them.\n\nCompatibility\n-------------\n\necs is compatible with CPython 2.6, 2.7, 3.3, and PyPy 2.2.0. CPython 3.0\u20133.2 may also work, but Python 3 users are encouraged to upgrade to Python 3.3. If upgrade is not a possibility for you, please file a issue! Tests ensuring compatibility are run continuously on Travis-CI_ and can also be run locally using tox_.\n\n.. _Travis-CI: https://travis-ci.org/seanfisk/ecs\n.. _tox: http://tox.readthedocs.org/en/latest/\n\nExamples, Documentation, Contributions, and Issues\n--------------------------------------------------\n\necs is a very young project. As such, work on examples and documentation is just getting started. However, if you have read some of the articles mentioned on the `Entity Systems wiki`_, use of ecs should be quite clear. The codebase is quite small and simple and has a comprehensive set of tests to go with it. Those with questions of any sort are encouraged to `open an issue`_. Contributions are always welcome!\n\n.. _open an issue: https://github.com/seanfisk/ecs/issues/new\n\nSimilar Projects\n----------------\n\nThis module was written because current entity/component system implementations for Python are scarce or underdeveloped. Here are some other projects similar to this one:\n\n* PyArtemis_, a seemingly unmaintained port of Artemis to Python\n* Marcus von Appen's python-utils_, which include ebs_, an entity system framework similar to ``ecs``. However, ``ebs`` does not draw a distinction between *entity* and *component*, which we feel is significant.\n\n.. _PyArtemis: https://github.com/kernhanda/PyArtemis\n.. _python-utils: https://bitbucket.org/marcusva/python-utils\n.. _ebs: http://python-utilities.readthedocs.org/en/latest/ebs.html\n\nFurther Reading\n---------------\n\nEntity/component systems are a relatively new concept. The canonical source for all entity system-related topics is the `Entity Systems wiki`_, created by Adam Martin. Adam Martin has also written abundantly in his `series of posts about Entity Systems`_, which are a great read for those just getting familiar with the concept.\n\n.. _Entity Systems wiki: http://entity-systems.wikidot.com/es-approaches\n.. _series of posts about Entity Systems: http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/\n\nHistory\n-------\n\necs was originally created by `Kevin Ward`_, and is now maintained by `Sean Fisk`_. I (Sean) am using ecs in a game written using the Panda3D_ game engine.\n\n.. _Kevin Ward: https://github.com/wkevina\n.. _Sean Fisk: https://github.com/seanfisk\n.. _Panda3D: http://www.panda3d.org/", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/seanfisk/ecs", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "ecs", "package_url": "https://pypi.org/project/ecs/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ecs/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/seanfisk/ecs" }, "release_url": "https://pypi.org/project/ecs/0.1/", "requires_dist": null, "requires_python": null, "summary": "An entity/component system library for games", "version": "0.1" }, "last_serial": 967143, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d147ca9212712e665e273b15cecc1de8", "sha256": "ebc506161329338f1eb9ba22df75181716d31b59e82458de1eba64e8ef2fcb33" }, "downloads": -1, "filename": "ecs-0.1.tar.gz", "has_sig": false, "md5_digest": "d147ca9212712e665e273b15cecc1de8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20569, "upload_time": "2014-01-13T08:12:36", "url": "https://files.pythonhosted.org/packages/61/52/4dcd9dd72ef4dec9fedd859e0eb08240f649660eccc0424f467fd9d82d07/ecs-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d147ca9212712e665e273b15cecc1de8", "sha256": "ebc506161329338f1eb9ba22df75181716d31b59e82458de1eba64e8ef2fcb33" }, "downloads": -1, "filename": "ecs-0.1.tar.gz", "has_sig": false, "md5_digest": "d147ca9212712e665e273b15cecc1de8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20569, "upload_time": "2014-01-13T08:12:36", "url": "https://files.pythonhosted.org/packages/61/52/4dcd9dd72ef4dec9fedd859e0eb08240f649660eccc0424f467fd9d82d07/ecs-0.1.tar.gz" } ] }