]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/ecs/README.md
Merge branch 'master' into Juhu/strafehud
[xonotic/xonotic-data.pk3dir.git] / qcsrc / ecs / README.md
1 # Xonotic entity component system
2
3 ## guidelines
4
5 * avoid #if and #ifdef
6 * avoid string
7 * avoid declaring entity fields outside of components
8 * uncrustify relentlessly
9 * shared code in $file, prog specific code uses prefix: { client: cl_, server: sv_, menu: ui_ }. $file must exist
10 * component naming =~ com_$component_$name
11 * system naming =~ sys_$system_$name
12 * event naming =~ evt_$component_$name
13 * global naming =~ g_$name
14 * cvar naming =~ xon_$name
15
16 ## components
17
18     COMPONENT($component);
19     .int com_$component_$property;
20
21 ## entities
22
23     entity e = new(foo);
24     IL_PUSH(g_components, e);
25     e.com_$component = true;
26     e.com_$component_$property = 42;
27
28 ## systems
29
30     SYSTEM($system, 30, 10);
31     sys_$system_update(entity this, float dt) {
32         code;
33     }
34
35 ## events
36
37 ### declaring
38
39     EVENT($component_$name, (entity this));
40
41 ### emitting
42
43     emit($event, it);
44
45 ### listening
46
47     entity listener = new_pure(someListener);
48     subscribe(listener, $event, void(entity this) { code; });