--- /dev/null
+# Change Log
+
+## 2013-08-17 - Python scripting, and a more robust build system
+
+Two big changes in this release:
+
+1. Python scripting support (alpha).
+
+ - Bridges the EntityX entity-component system into Python.
+ - Components and entities can both be defined in Python.
+ - Systems must still be defined in C++, for performance reasons.
+
+ Note that there is one major design difference between the Python ECS model and the C++ model: entities in Python can receive and handle events.
+
+ See the [README](https://github.com/alecthomas/entityx/blob/master/entityx/python/README.md) for help, and the [C++](https://github.com/alecthomas/entityx/blob/master/entityx/python/PythonSystem_test.cc) and [Python](https://github.com/alecthomas/entityx/tree/master/entityx/python/entityx/tests) test source for more examples.
+
+2. Updated the build system to
EntityX is an EC system that uses C++11 features to provide type-safe component management, event delivery, etc. It was built during the creation of a 2D space shooter.
+## Recent Notable Changes
+
+- Python scripting system (alpha).
+- Revamped build system, including selectable smart pointer implementation (Boost or stdlib).
+
+See the [ChangeLog](https://github.com/alecthomas/entityx/blob/master/CHANGELOG.md) for a full list.
+
## Overview
In EntityX data associated with an entity is called a `Component`. `Systems` encapsulate logic and can use as many component types as necessary. An `EventManager` allows systems to interact without being tightly coupled. Finally, a `Manager` object ties all of the systems together for convenience.
### Components (entity data)
-The idea with ECS is to not have any functionality in the component. All logic should be contained in Systems.
+The general idea with the EntityX interpretation of ECS is to have as little functionality in components as possible. All logic should be contained in Systems.
-To that end Components are typically [POD types](http://en.wikipedia.org/wiki/Plain_Old_Data_Structures) containing self-contained sets of related data. Implementations are [curiously recurring template pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) (CRTP) subclasses of `Component<T>`.
+To that end Components are typically [POD types](http://en.wikipedia.org/wiki/Plain_Old_Data_Structures) consisting of self-contained sets of related data. Implementations are [curiously recurring template pattern](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) (CRTP) subclasses of `Component<T>`.
#### Creating components
-# Python Scripting System for EntityX
+# Python Scripting System for EntityX (α Alpha)
This system adds the ability to extend entity logic with Python scripts. The goal is to allow ad-hoc behaviour to be assigned to entities, in contract to the more pure entity-component system approach.
+## Limitations
+
+Planned features that are currently unimplemented:
+
+- Emitting events from Python.
+
## Concepts
- Python scripts are attached to entities with `PythonComponent`.
Here's an example:
-```
+```c++
namespace py = boost::python;
struct Position : public Component<Position> {
the protected member `entities`. Here's a collision example, where the proxy
only delivers collision events to the colliding entities themselves:
-```
+```c++
struct CollisionEvent : public Event<CollisionEvent> {
CollisionEvent(Entity a, Entity b) : a(a), b(b) {}
Finally, initialize the `mygame` module once, before using `PythonSystem`, with something like this:
-```
+```c++
// This should only be performed once, at application initialization time.
CHECK(PyImport_AppendInittab("mygame", initmygame) != -1)
<< "Failed to initialize mygame Python module";
Then create and destroy `PythonSystem` as necessary:
-```
+```c++
// Initialize the PythonSystem.
vector<string> paths;
paths.push_back(MYGAME_PYTHON_PATH);
assert self.direction
assert self.position
assert self.position2
- assert self.position is self.position
+ assert self.position is self.position2