summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2022-02-03 04:18:07 -0500
committerrealtradam <[email protected]>2022-02-03 04:18:07 -0500
commit866ed5e2ca86d2f780492f01c30b3350037d3f7c (patch)
treef298a64b860b1d1ef64f4f3dae7c9670aa12a257 /lib
parent1e9ee993f6f996352c797d9f9a4268e5a7c2f513 (diff)
downloadFelECS-866ed5e2ca86d2f780492f01c30b3350037d3f7c.tar.gz
FelECS-866ed5e2ca86d2f780492f01c30b3350037d3f7c.zip
added new group method for entity managerv5.0.1
Diffstat (limited to 'lib')
-rw-r--r--lib/felecs/entity_manager.rb33
-rw-r--r--lib/felecs/version.rb2
2 files changed, 34 insertions, 1 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
diff --git a/lib/felecs/version.rb b/lib/felecs/version.rb
index 295b905..507e0f1 100644
--- a/lib/felecs/version.rb
+++ b/lib/felecs/version.rb
@@ -4,6 +4,6 @@
# Keeps the version of the Gem
module FelECS
# The version of the Gem
- VERSION = '5.0.0'
+ VERSION = '5.0.1'
end
# :nocov: