diff options
Diffstat (limited to 'component_manager.rb')
| -rw-r--r-- | component_manager.rb | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/component_manager.rb b/component_manager.rb index f54c5f6..2f1b2e2 100644 --- a/component_manager.rb +++ b/component_manager.rb @@ -2,32 +2,36 @@ #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? +class FelFlame + class Components + @component_map = [] + class <<self + def entity_destroyed(entity_id) + @component_map.delete(entity_id) + constants.each do |component| #TODO change delete to remove + component.delete(entity_id) unless (component.signature & FelFlame::Entity.signatures[entity_id]).zero? + end 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 + def entity_created(entity_id) + constants.each do |component| + const_get(component.to_s).add(entity_id) unless (const_get(component.to_s).signature & FelFlame::Entity.signatures[entity_id]).zero? + end + @component_map[entity_id] = [] 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}" + def new(component_name, *attrs, **attrs_with_defaults) + const_set(component_name, Class.new(FelFlame::Helper::BaseComponent) {}) + attrs.each do |attr| + FelFlame::Components.const_get(component_name).attr_accessor attr + end + attrs_with_defaults.each do |attr, _default| + FelFlame::Components.const_get(component_name).attr_accessor attr + end + FelFlame::Components.const_get(component_name).define_method(:initialize) do + attrs_with_defaults.each do |attr, default| + instance_variable_set("@#{attr}", default) + end end end end |
