Added ECS docs
This commit is contained in:
parent
c664129459
commit
4f4c6e4c5e
49
docs/component/component.md
Normal file
49
docs/component/component.md
Normal 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
37
docs/entity/entity.md
Normal 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
24
docs/system/system.md
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user