# Xonotic entity component system ## guidelines * avoid #if and #ifdef * avoid string * avoid declaring entity fields outside of components * uncrustify relentlessly * shared code in $file, prog specific code uses prefix: { client: cl_, server: sv_, menu: ui_ }. $file must exist * component naming =~ com_$component_$name * system naming =~ sys_$system_$name * event naming =~ evt_$component_$name * global naming =~ g_$name * cvar naming =~ xon_$name ## components COMPONENT($component); .int com_$component_$property; ## entities entity e = new(foo); IL_PUSH(g_components, e); e.com_$component = true; e.com_$component_$property = 42; ## systems SYSTEM($system, 30, 10); sys_$system_update(entity this, float dt) { code; } ## events ### declaring EVENT($component_$name, (entity this)); ### emitting emit($event, it); ### listening entity listener = new_pure(someListener); subscribe(listener, $event, void(entity this) { code; });