diff options
| author | realtradam <[email protected]> | 2022-02-03 04:12:35 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-02-03 04:12:35 -0500 |
| commit | a6004b2fccca58e528d24be5ba8afdf781666662 (patch) | |
| tree | f2edde63acfdd2fe13791f89335faf6c784683cb /lib | |
| parent | 1e9ee993f6f996352c797d9f9a4268e5a7c2f513 (diff) | |
| download | FelECS-a6004b2fccca58e528d24be5ba8afdf781666662.tar.gz FelECS-a6004b2fccca58e528d24be5ba8afdf781666662.zip | |
added new group method for entity manager
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/felecs/entity_manager.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/felecs/entity_manager.rb b/lib/felecs/entity_manager.rb index a457ed2..c1f8cd8 100644 --- a/lib/felecs/entity_manager.rb +++ b/lib/felecs/entity_manager.rb @@ -100,6 +100,39 @@ module FelECS # def to_json() end class << self + # Selects every entity that has components of they type passed into + # this function and then executes the code block for those components + # and entities. + # @return [Nil] + def group(*component_managers, &block) + return nil if component_managers.empty? + if component_managers.length == 1 + component_managers.first.each do |cmp| + block.call(cmp, cmp.entity) + end + else + arry = component_managers.first.select do |cmp| + ent = cmp.entity + keep = true + component_managers.drop(1).each do |mgr| + next unless ent.components[mgr].nil? + keep = false + break + end + keep + end + arry.each do |cmp| + ent = cmp.entity + cmp_arry = [cmp] + component_managers.drop(1).each do |cmp_mgr| + cmp_arry.push ent.component[cmp_mgr] + end + block.call(*cmp_arry, ent) + end + end + nil + end + # Makes component managers behave like arrays with additional # methods for managing the array # @!visibility private |
