summaryrefslogtreecommitdiffhomepage
path: root/component_manager.rb
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-05-26 01:24:30 -0400
committerrealtradam <[email protected]>2021-05-26 01:24:30 -0400
commit7bec71db2680e0503f39c31047f5f90ca89433df (patch)
tree4d987b479b0670256af5c1a4ffe5ab7b75fb23b4 /component_manager.rb
downloadFelECS-7bec71db2680e0503f39c31047f5f90ca89433df.tar.gz
FelECS-7bec71db2680e0503f39c31047f5f90ca89433df.zip
init
Diffstat (limited to 'component_manager.rb')
-rw-r--r--component_manager.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/component_manager.rb b/component_manager.rb
new file mode 100644
index 0000000..f54c5f6
--- /dev/null
+++ b/component_manager.rb
@@ -0,0 +1,35 @@
+#require 'app/ECS/base_component.rb'
+
+#require 'app/ECS/components/00_test_component.rb'
+#require 'app/ECS/components/01_based.rb'
+
+class Components
+ class <<self
+ def entity_destroyed(entity_id)
+ constants.each do |component|
+ component.delete(entity_id) unless (component.id & Entity.signatures[entity_id]).zero?
+ end
+ end
+
+ def entity_created(entity_id)
+ constants.each do |component|
+ const_get(component.to_s).add(entity_id) unless (const_get(component.to_s).id & Entity.signatures[entity_id]).zero?
+ end
+ end
+
+ def new(component_name, *attrs, **attrs_with_defaults)
+ const_set(component_name, Class.new(Helper::BaseComponent) {})
+ attrs.each do |attr|
+ Components.const_get(component_name).attr_accessor attr
+ end
+ attrs_with_defaults.each do |attr, default|
+ Components.const_get(component_name).attr_writer attr
+ Components.const_get(component_name).define_method(attr) do
+ return default unless instance_variable_defined? "@#{attr}"
+
+ instance_variable_get "@#{attr}"
+ end
+ end
+ end
+ end
+end