-test runner support before/after everty test callback funcion
-added some basic tests for template allocation
-added function to allocate new template from different template and list of addition and removed components
-fixed bug with events called on destroyed entities (crash)
-don't call event on system for unsupported entity
-added "entity_id" property to EntitiesData
*updated build scripts
*removed tls variables from code (needed to support WebAssembly)
*some mmutils tweaks
*some fixes
*pthread TLS thread ID implementation
-added Atomic file (reimplementation of atomics templates for emscripten)
-added emscripten support to ecs.std
*replaced array[..] = array[ .. ] sclice copy with mempcy
*added own std library (allocator, alloca, Mutex)
*changed tamplates for collecting components for systems
-fixed issue with multiple optional components registering for system
-addEntity now returns pointer instead of reference (it's has more sense)
-added function addEntityCopy(EntityID) which adds copy of entity with it's whole data
-changed "absent" to "excluded" everywhere
-added Events support:
*systems are scanned by handleEvent() function
*generate system callers for events
*event sending have (untested) multithreaded support
*EventInput structure in System has input components for event
-beginRegister() and endRegister() was added (every register functions must be called between this calls, update calls can't be called there)
-SystemCallers and Systems dependecies is rebuild always in endRegister();
-beginRegister() clear all SystemCallers and Systems dependencies
-possibility to get System ID and execution state
-JobGroup has now pointer to it's parent (SystemCaller)
-SystemCaller clean up destructor
-Multithreaded IDManager.getNewID()
*use implementation with free IDs stack (instead of classic pool)
-support for multiple UpdatePasses. Passes are added by name, and must be called between begin() end() functions.
-removed mutex from addEntity()
-commit() function added. Used to commit all changes made while update() call. Called automatically by begin() end() functions.
*system has arrays of read only and modified components
*new attribute "readonly" usable for variables which should be visible as read only. Const can be used instead for enable checks by compiler.
*JobGroup was added. JobGroup contain array of jobs and array of dependencies (JobGroups)
*new function generateDependencies() generate exclusion between systems, and then generate dependencies for SystemCallers and JobGroups
-fixed issue with jobs generating (empty blocks with only newly added entities was used, and led to crash)
-fixed small typo mistake
-Multithreading support:
*multithreaded update - updateMT(), function generates jobs to execute
*added dispatch callback function to dispatch generated jobs (setJobDispachFunc)
*added getID callback for get thread ID by EntityManager
-added Job structure. Job has one function "execute()".
-calling partial info update (required to multithreading)
-multithreaded removeEntity, addCompoenents, removeComponents. Every thread has own data and remove/change lists.
-multithreaded addEntity (WIP)
-fixed issue with duplicating components
-simpler and faster "findBlockWithFreeSpace" function
-CallDataAllocator, allocator for CallDatas (used for Jobs)
-fixed some bugs/issues
-support for AbsenComponents. Absen components can't exist in entity which are
used by system. There are three possibilities to add absen component. Add
'@absen' property to EntitiesData mebmer, create AbsenComponents enum with fields
names corresponding to components names, or create AbsenComponents AliasSeq
with strings expressions corresponding to components names.