Added ECS docs

This commit is contained in:
Brychan Dempsey 2021-06-03 13:25:17 +12:00
parent c664129459
commit 4f4c6e4c5e
3 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,49 @@
# Component
### Contents
[About](#About)
## About
Components are raw data that gets associated with an entity.
For an Object-Oriented language like Java, they are objects.
Each component is an array of objects, containing the data that should be associated with the entity.
E.g.: A position component is defined such as:
``` java
class position{
double x = 0.0;
double y = 0.0;
}
```
<br>
As the component is simply an object, the associated data can be anything, including scripts:
``` java
class script{
String statement = "";
Function<void> foo = () -> {
statement += "boo";
};
}
```
<br>
<br>
Two different usages of this data can then be applied:
1. System-less data usage - which stores data but does not have a system that interacts with it every frame
and
2. System-based interaction - which utilises the current data (of one or more components) to check if certain conditions have been met.
I.e.:
The `position` component might not have a `position_system`, but may be utilised by the `collision_system`, which may use `position.x` and `position.y` to determine the location of the entity.
See [System](./system/system.md) for more information.

37
docs/entity/entity.md Normal file
View File

@ -0,0 +1,37 @@
# Entity
### Contents
[About](#About)
[Usage](#Usage)
[Notes](#Notes)
## About
An 'entity' is a unique ID.
For most implementations, it makes sense to use a simple integer value - usually in a packed array (*reuses the most minimal value it can*)
E.g.: The ID 101 would be the next selected value for a new entity.
>100 | 101 | 102| 103| 104| ...|
>:----:|:-----:|:----:|:----:|:----:|:----|
><span style="color:gray">used|unused|<span style="color:gray">used|<span style="color:gray">used| unused| <span style="color:gray">....
<br>
**This ID represents a specific instance of a game object**
e.g. character, vehicle, effect etc.
___An entity contains no further data.___
In order to be useful, its identifier must be registered to one or more [components](./component/component.md).
## Usage
*some specific usage info here*
``` java
void todo();
```
## Notes
* The only requirement for a Entity is that it has a unique ID. An [entity manager](./manager/entity_manager.md) could implement a more complex ID system such as using a packed array for only a small region of IDs, or using named IDs by use of a dictionary or ordered hash-map
* The maximum number of entities is limited by the size of the container used to store it. E.g., for a 32-bit unsigned integer, there are ~4.3 billion ID's available. But keep in mind that such a large amount of IDs will take significant time for each system to consider.

24
docs/system/system.md Normal file
View File

@ -0,0 +1,24 @@
# System
### Contents
[About](#About)
## About
The system runs operations that must be performed on its assoiciated components.
Typically, this is expected to be run every frame, though this is not a strict requirement.
Examples of the `system` include the `health_system`; which reads the value of the entitie's `health` component and ensures h > 0.
``` java
void health_system(){
for (i = 0; i < registeredComponents.size(); i++){
if (registeredComponents[i].health <= 0){
registeredComponents[i].dead = true;
if (registeredComponents[i].isPlayer){
GameOver();
}
}
}
}
```