Commit graph

107 commits

Author SHA1 Message Date
Stephen Seo 6124a45453 Replace garbage-collection-like cleanup
Entity IDs are now guaranteed to not change for a living entity.
Cleanup is replaced by using a std::unordered_set to store deleted
Entity IDs to be reclaimed on later calls to addEntity().
2017-12-01 14:00:49 +09:00
Stephen Seo 477580ad34 Minor fixes to documentation 2017-11-24 15:06:57 +09:00
Stephen Seo 60bf841c11 Change CleanupReturnType to std::vector 2017-11-24 14:58:00 +09:00
Stephen Seo 506b027655 Fix bug with duplicate signatures
Fixed bug where if forMatchingSignatures and forMatchingSignaturesPtr
was called with some signatures in the TypeList being duplicates, then
only the first duplicate and function pair would be called, and all
other functions paired with other duplicate signatures would not be
called.
2017-11-15 15:36:04 +09:00
Stephen Seo 6b0e950c84 Improve efficiency of stored function calling
Previously, every called function iterated through all entities for
calling the function on matching entities.

Now, callForMatchingFunctions iterates through all entities once,
stores matching entities for each function, then calls the functions on
the matching entities.
2017-11-14 13:51:24 +09:00
Stephen Seo 248cf2676a Add ptr versions of forMatchingSignature fns 2017-11-14 13:11:32 +09:00
Stephen Seo 648e47aae9 Fix crash bug, improve Unit Test
Crash bug from improperly implemented std::lock_guard for multi-threaded
usage of forMatchingSignatures fixed.
2017-11-10 13:19:50 +09:00
Stephen Seo 0dba6874ad Implement forMatchingSignatures for efficiency
EC::Manager::forMatchingSignatures is different from
EC::Manager::forMatchingSignature in that it takes multiple signatures
and functions and iterates through all entities once. The trade-off is
that a vector of vectors is created to store matching entities.
This function can be called to use multiple threads as well, similar
to the "non-plural" version of this function.

See the doxygen-style documentation in src/EC/Manager.hpp for
forMatchingSignatures (or the generated doxygen html) for how to use.
Usage example is in the last unit test function in src/test/ECTest.hpp .
2017-11-09 21:17:40 +09:00
Stephen Seo d809d34716 Add getCurrentSize and getCurrentCapacity 2017-11-03 17:11:20 +09:00
Stephen Seo 16fd8e9ec3 Fix minor typo 2017-10-31 14:10:21 +09:00
Stephen Seo 1d2fbf7b52 Fix cleanup function's return value
Unordered map does not preserve order in which items were inserted.
This is a problem because an entity id relocated to a previously deleted
one could be read as deleted when iterating through the unordered map.
Thus, it has been replaced with a queue.
2017-10-31 13:25:27 +09:00
Stephen Seo 2523831097 Fix unit test 2017-10-06 14:35:37 +09:00
Stephen Seo ab580a5565 Replace variable length arrays with std::vector 2017-10-06 12:58:49 +09:00
Stephen Seo a08b1575d6 Implement multithreading for function calls
Each of the EC::Manager's function calls over entities can now be
multi-threaded.
2017-10-06 12:47:05 +09:00
Stephen Seo aad97d6d42 Add feature to cleanup function in manager
ECManager's cleanup function now returns a map detailing info on all
entities changed by cleanup.
2017-09-28 16:05:05 +09:00
Stephen Seo 396ede1c76 Add const fns to Manager, obey 80 char line limit 2017-09-20 17:18:29 +09:00
Stephen Seo bc70089822 Add a test to unit tests 2017-08-29 15:27:58 +09:00
Stephen Seo d700b023b3 Fixed keepSomeMatchingFunctions
Previous implementation would fail if functionIndex had wrapped around
2017-07-13 17:28:45 +09:00
Stephen Seo 1f052154ad Changed clearSomeMatchingFunctions, line lengths
clearSomeMatchingFunctions removed for
keepSomeMatchingFunctions and removeSomeMatchingFunctions to
avoid confusion.

Lines now respect 80 column limit.
2017-07-13 16:13:37 +09:00
Stephen Seo 49ae172c3a Added two new functions
Added "removeForMatchingFunction" and "callForMatchingFunction".
The former deletes a specific function and the latter calls a specific
function.
2017-07-12 22:02:02 +09:00
Stephen Seo 09a7546509 Changed implementation of stored functions to map
An unordered_map stores functions, allowing for functions to be
removed by index, and bulk removals with filtering by index.

Also added reset(), which changes the state of the Manager to be
almost identical to a newly constructed one.
2016-09-21 21:01:48 +09:00
Stephen Seo 2e115cd7a2 Fixed docs, ids changed to const references 2016-09-20 20:31:56 +09:00
Stephen Seo 7c49ab4f04 Added capability to store functions
EC::Manager can now store functions similar to functions
given to EC::Manager::forMatchingSignature.
2016-09-20 20:07:28 +09:00
Stephen Seo ab2209b698 Fixed bug where deleted entities retain info 2016-08-30 17:34:34 +09:00
Stephen Seo 74ecae5dff Temporary(?) bugfix 2016-08-28 16:11:23 +09:00
Stephen Seo 428df3f1ab Fixed not working as cmake subproject 2016-08-27 13:32:32 +09:00
Stephen Seo 646cb89157 Fixed missing include 2016-04-20 22:18:25 +09:00
Stephen Seo 816e596878 Added missing includes 2016-04-20 21:59:47 +09:00
Stephen Seo b2355248be Fixed include gtest on nonstanndard gtest install 2016-04-11 14:59:56 +09:00
Stephen Seo 2a11d1e86c Added note about manager's addComponent
AddComponent overwrites an already existing component
if it exists.
2016-04-06 19:35:24 +09:00
Stephen Seo 577132554e Added support for components of type UniquePtr 2016-04-06 19:32:30 +09:00
Stephen Seo a008830373 Added License and legal related requirements
All source files in src/EC now has some text describing
attribution notice to the original work this work derives from.
2016-03-15 19:29:13 +09:00
Stephen Seo dbe291c7c6 Slight change to docs 2016-03-14 20:39:09 +09:00
Stephen Seo aa05522772 Slight change to unit tests, docs
Unit test now creates Component with
Manager::addComponent.
2016-03-14 20:36:05 +09:00
Stephen Seo a28a68cc65 Slight addition to EC::Manager documentation 2016-03-14 20:09:51 +09:00
Stephen Seo bfac16072c Fix to EC::Manager::cleanup 2016-03-14 20:05:49 +09:00
Stephen Seo fa40fb3a66 Added Doxygen comments
Slight change to EC::Manager::isAlive
2016-03-14 20:01:55 +09:00
Stephen Seo 0f579d7241 Minor fixes/changes 2016-03-14 18:25:38 +09:00
Stephen Seo 635eed34a4 Minor fixes/changes 2016-03-14 18:16:09 +09:00
Stephen Seo c3f90ec6b0 Made some Meta stuff more generic 2016-03-14 17:53:57 +09:00
Stephen Seo de07c8ad1a Fixed entity deletion bug
Fixed bug where deleted entity would retain Components/Tags.
2016-03-14 11:39:37 +09:00
Stephen Seo c6002149d3 Fix to Meta/Matching 2016-03-13 18:17:06 +09:00
Stephen Seo f123f075eb Added Meta/Matching, progress on Bitset/Manager 2016-03-13 18:07:49 +09:00
Stephen Seo bee0c9d26d Added forEach to EC/Meta 2016-03-13 14:06:57 +09:00
Stephen Seo eeb22ede25 Fixed 'make install' 2016-03-08 22:59:17 +09:00
Stephen Seo 24ce103fbb Added EC/Meta/TypeListGet, WIP in Bitset, Manager
TODO, get a ForEach type recursion working for Bitset.
2016-03-05 23:33:24 +09:00
Stephen Seo d8dfba8361 Fixed support for Clang
Minor addition to unit tests.
2016-03-05 20:16:32 +09:00
Stephen Seo 1926a9eabb Added EC/Meta/Morph.hpp
Started work on EC/Manager.hpp
2016-03-04 22:59:43 +09:00
Stephen Seo f99e7c69ca Updated CMakeLists.txt to include EC/Meta/Combine 2016-03-04 21:43:46 +09:00
Stephen Seo 9c5894520f Changed Bitset to use Combined lists 2016-03-04 21:39:25 +09:00
Stephen Seo a503eb628d Added EC/Meta/Combine.hpp
Also some renaming in MetaTest.hpp
2016-03-04 21:35:26 +09:00
Stephen Seo c08f7d6445 Slight change to Bitset test
Now, will not break if listAll and listTagsAll changes.
2016-03-04 21:15:30 +09:00
Stephen Seo 12bc0d9f8f Added EC/Bitset.hpp and EC/Meta/ContainsAll.hpp
Also added EC/EC.hpp and EC/Meta/Meta.hpp that loads all
headers in that directory.
2016-03-04 21:12:37 +09:00
Stephen Seo c318121dc8 Split Meta.hpp 2016-03-04 20:20:56 +09:00
Stephen Seo 4092c7c565 Added IndexOf 2016-02-25 12:27:04 +09:00
Stephen Seo 8ffacb16b1 Basic meta stuff working 2016-02-25 12:08:02 +09:00
Stephen Seo 0b39f8bc93 Init commit 2016-02-24 19:35:55 +09:00