diff options
| author | realtradam <[email protected]> | 2021-05-26 01:24:30 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-05-26 01:24:30 -0400 |
| commit | 7bec71db2680e0503f39c31047f5f90ca89433df (patch) | |
| tree | 4d987b479b0670256af5c1a4ffe5ab7b75fb23b4 /component_manager.rb | |
| download | FelECS-7bec71db2680e0503f39c31047f5f90ca89433df.tar.gz FelECS-7bec71db2680e0503f39c31047f5f90ca89433df.zip | |
init
Diffstat (limited to 'component_manager.rb')
| -rw-r--r-- | component_manager.rb | 35 |
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 |
