Commit graph

102 commits

Author SHA1 Message Date
41f1c6474b -fully working betterC for windows
*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
2019-10-10 22:08:22 +02:00
beab56033c -events are simplified to handleEvent(Entity*,Event) (use entity.getComponent to get entity components) 2019-08-13 11:13:26 +00:00
9402e917f2 -added function to create EntityTemplate form Entity 2019-08-10 16:32:57 +00:00
1be08eb534 -added pure annotation for some functions
-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
2019-08-10 16:20:50 +00:00
dfdb56d501 -system name getter
-added error checking for event handling in registerSystem
-now only valid handleEvent() functions are taken by system during register
2019-08-10 15:35:36 +00:00
b04ab77e0c -added components change caching (no HashMap searching during components adding or removing) 2019-06-18 17:49:51 +02:00
235bbb49f2 -block allocator now track allocated blocks and is able to free memory
-jobs data is now allocated in System struct
-written memory cleanup (AddressSanitizer don't show any leak)
2019-06-18 16:45:38 +02:00
9824b587fb -fixed stack-overflow error 2019-06-18 13:57:31 +02:00
9220a28f7c -fixed issue with ExcludedComponents as enum or alias
-removed way to add excluded component by adding attribiute @excluded (it's very stupid way)
2019-04-06 20:27:28 +00:00
eaf2d1581c -removed next two mixins:
*catchFunc
*catchEntityFunc
2019-04-06 16:28:59 +00:00
f39d5ab403 -removed next mixin genParamsChecking() 2019-04-06 15:30:49 +00:00
0608fe6e89 -added new listener callback: onChangeEntity. Callback is called when entity optional components are changed. There is no info about which components are changed (added/removed), but should be in the future).This is probably slowest callback. 2019-03-28 20:25:08 +01:00
7a33e4f94f -renamed callbacks:
*onAdd -> onAddEntity
*onRemove -> onRemoveEntity
*update -> onUpdate
2019-03-28 18:01:43 +01:00
280d7b8ec4 -onAdd/onRemove order is determined by system priority
-fixed many bug with onAdd/onRemove
-onAdd/onRemove now works even when system haven't update callback
2019-03-28 12:19:30 +01:00
4ac80d7025 -onAdd/onRemove called when components are changed 2019-03-24 14:42:21 +00:00
e4be23ee96 -onRemove() called when entity is removed from EntityManager 2019-03-23 21:47:39 +00:00
1841c9c244 -working onAdd listener when new Entity is added to EntityManager 2019-03-23 20:34:50 +00:00
3aad89fc56 -fillInputData created as local function in register process
-call onAdd (WIP)
2019-03-23 20:18:26 +00:00
6bbc8b5152 -git now should ignore .dub/dub.json
-added onAdd/onRemove to test
-added onAdd/onRemove callbacks for system
-generating onAdd/onRemove listeners
2019-03-23 19:48:24 +00:00
204ce9dc79 -almost every funtion is marked as @nogc and nothrow (only problem with HashMap) 2018-11-02 16:36:38 +01:00
3bc5ff2423 -changes in gitignore
-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
2018-11-02 15:39:46 +01:00
16a5696840 -removed UpdateBySystems version switch (it's now default behaviour)
-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
2018-10-27 17:34:27 +02:00
f666dfd1d5 -onBegin() return type was changed from void to bool
-disabling system execution in onBegin() funciton
2018-10-26 17:43:51 +02:00
d3f7593afc -BlockAllocator is no longer template
-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.
2018-10-25 11:46:08 +02:00
430ce8074c -multithreading jobs dependencies:
*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
2018-10-20 11:42:29 +02:00
5dd24b6462 -Systems, Components and Events now must have proper mixin. Mixins are located in ecs.core module. (i.e. mixin ECS.Component)
-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
2018-10-14 17:00:53 +02:00
3a767babc0 -call update by Systems instead of EntityTypes (version UpdateBySystems)
-memory packing (every block in EntityType except last one are always full)
2018-10-10 18:35:20 +02:00
fddfc78ec1 -removed system components sorting due to fact that it's make an issue
-workaround for DMD phobos issues
2018-10-02 15:36:00 +02:00
e4573f1ec7 -better compile time code generation
-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.
2018-10-01 17:17:40 +02:00
125c9e7d40 -support for 'length' parameter in EntitiesData (for convenience) 2018-10-01 15:08:14 +02:00
0e13fafefd -removed 'InputStruct' version switch (now it's default behaviour)
-checking if System struct has valid update(EntitiesData) prototype
2018-10-01 13:17:31 +02:00
d5780a6252 -working update() with EntitiesData structure input
-added support for 'const' components input (read only, future usage)
2018-09-30 23:12:20 +02:00
ed589bbd71 -added absen components list to system
-added ECS uda attributes
-added InputStruct version switch (gets update() input as structure of arrays)
-initial (WIP) EntitiesData update() input structure compile time parsing
2018-09-29 23:10:31 +02:00
c18ac54265 -LinearLayout proggress:
*EntityTemplate.getComponent
 *Adding/removing components for Entitites
-better code for adding components
2018-09-26 10:57:42 +02:00
cb9bac5dde -LinearLayout implemntation:
*Entity.getComponent works
 *adding/removing objects work
 *update work
2018-09-26 09:02:16 +02:00
8cb5d6ce62 -EntitesBlock freeing
-IDManager now increment counter on ID releasing (previously while creating new ID)
2018-09-20 20:33:55 +02:00
45110e236c -fixed removingComponents issue (object was transferred to another block, but count of entities in block doesn't increase)
-functions to get System by ID or ECS System by Type
-added system_id to system
-fixed issue with registering systems without update() function
2018-09-20 19:12:53 +02:00
4ad81fe116 -changes in EntityAlocator
* renamed to BlockAllocator
 * now it's template with compile time assingable block_size and block_in_allocation variables
-WIP Event management
 * probably working sendSelfEvent()
 * registerEvent()
-added win_dll.d as Windows DLL require functionality
2018-09-19 17:50:05 +02:00
cb0f56b0fb -EntityAllocator fixed issue with not initialized block pointer
-deffered adding entities
-deffered adding and removeing components
2018-09-17 14:46:30 +02:00
b3dce6560a -suport system callback: onCreate, onDestroy, onBegin, onEnd
-support for optional Components for System
-Components IDs in Systems are now stored as ushorts
2018-09-16 22:40:55 +02:00
8fdb56e840 -fixed crash on getComponent when component doesn't exist
-fixed Components ids sorting
-added deferred object removing
-new EntityManager functions: begin(), end().
2018-09-16 14:16:18 +02:00
a066a97f01 -added removeComponents() function (removing by ids array, or components types)
-sorting IDs in addComponents() and removeComponents()
2018-09-14 12:03:27 +02:00
5b2a6e9890 -added EntityBlocks allocating in blocks (no memory freeing, currently block contain 128 EntityBlocks) 2018-09-13 22:37:37 +02:00
1aa1fbf36b -support for system priority
-fixed callers system pointer update
-fixed HashMap issue
2018-09-13 22:04:43 +02:00
4b19907c03 -formatted all files with dfmt
-more messy tests
-some documentation
-some useful code moved to functions
-adding components to existing entity
-opportunity to get entity by ID
-fixed calculating deltas
-sorting IDs arrays for allocating Templates
-fixed alignment caluclation
-added compile-time checks for "component_id" member existing in component
2018-09-13 00:10:48 +02:00
d3222eefbb -some usefull functions for IDManager
-added EntityManager.removeEntity(EntityID)
-EntitiesBlock now has ID usefull for updating first_free_block in EntityInfo
2018-09-12 17:38:41 +02:00
ae53e13d42 -add systemCaller to entity only if their components matches
-System onEnable() and onDisable() callbacks
2018-09-12 15:28:10 +02:00
17551b08a5 -IDManager
-times counting for tests
2018-09-12 14:01:35 +02:00
9c5a60447c Update for all entities 2018-09-10 18:52:31 +02:00
4d35bc2a1b Support more than one bucket for given entity type 2018-09-10 18:34:40 +02:00