Class: FelFlame::Helper::ComponentManager
- Inherits:
-
Object
- Object
- FelFlame::Helper::ComponentManager
- Defined in:
- component_manager.rb
Overview
Component Managers are what is used to create individual components which can be attached to entities. When a Component is created from a Component Manager that has accessors given to it, you can set or get the values of those accessors using standard ruby message sending (e.g @component.var = 5), or by using the #attrs and #update_attrs methods instead.
Class Attribute Summary collapse
Instance Attribute Summary collapse
- #addition_triggers ⇒ Object
-
#id ⇒ Integer
Holds the unique ID of a component.
- #removal_triggers ⇒ Object
Class Method Summary collapse
-
.[](component_id) ⇒ Component
Gets a Component from the given unique ID.
-
.each(&block) ⇒ Enumerator
Iterates over all components within the component manager.
Instance Method Summary collapse
-
#attrs ⇒ Hash
A hash, where all the keys are attributes linked to their respective values.
-
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its ID and data.
-
#entities ⇒ Array<Integer>
A list of entity ids that are linked to the component.
-
#initialize(**attrs) ⇒ Component
constructor
Creates a new component and sets the values of the attributes given to it.
-
#to_i ⇒ Integer
An alias for the ID Reader.
-
#to_json ⇒ String
Export all data into a JSON String, which could then later be loaded or saved to a file TODO: This function is not yet complete.
-
#update_attrs(**opts) ⇒ Object
Update attribute values using a hash or keywords.
Constructor Details
#initialize(**attrs) ⇒ Component
Creates a new component and sets the values of the attributes given to it. If an attritbute is not passed then it will remain as the default.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'component_manager.rb', line 74 def initialize(**attrs) # Prepare the object # (this is a function created with metaprogramming # in FelFlame::Components set_defaults # Generate ID new_id = self.class.data.find_index { |i| i.nil? } new_id = self.class.data.size if new_id.nil? @id = new_id # Fill params attrs.each do |key, value| send "#{key}=", value end # Save Component self.class.data[new_id] = self end |
Class Attribute Details
.addition_triggers ⇒ Object
97 98 99 |
# File 'component_manager.rb', line 97 def addition_triggers @addition_triggers ||= [] end |
.removal_triggers ⇒ Object
103 104 105 |
# File 'component_manager.rb', line 103 def removal_triggers @removal_triggers ||= [] end |
Instance Attribute Details
#addition_triggers ⇒ Object
61 62 63 |
# File 'component_manager.rb', line 61 def addition_triggers @addition_triggers ||= [] end |
#id ⇒ Integer
57 58 59 |
# File 'component_manager.rb', line 57 def id @id end |
#removal_triggers ⇒ Object
67 68 69 |
# File 'component_manager.rb', line 67 def removal_triggers @removal_triggers ||= [] end |
Class Method Details
.[](component_id) ⇒ Component
Gets a Component from the given unique ID. Usage is simular to how an Array lookup works.
120 121 122 |
# File 'component_manager.rb', line 120 def [](component_id) data[component_id] end |
.each(&block) ⇒ Enumerator
Iterates over all components within the component manager. Special Enumerable methods like map or each_with_index are not implemented
127 128 129 |
# File 'component_manager.rb', line 127 def each(&block) data.compact.each(&block) end |
Instance Method Details
#attrs ⇒ Hash
Returns A hash, where all the keys are attributes linked to their respective values.
173 174 175 176 177 |
# File 'component_manager.rb', line 173 def attrs instance_variables.each_with_object({}) do |key, final| final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key) end end |
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its ID and data.
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'component_manager.rb', line 154 def delete addition_triggers.each do |system| system.clear_triggers component_or_manager: self end # This needs to be cloned because indices get deleted as # the remove command is called, breaking the loop if it # wasn't referencing a clone(will get Nil errors) iter = entities.map(&:clone) iter.each do |entity_id| FelFlame::Entities[entity_id].remove self #unless FelFlame::Entities[entity_id].nil? end self.class.data[id] = nil instance_variables.each do |var| instance_variable_set(var, nil) end true end |
#entities ⇒ Array<Integer>
A list of entity ids that are linked to the component
140 141 142 |
# File 'component_manager.rb', line 140 def entities @entities ||= [] end |
#to_i ⇒ Integer
An alias for the ID Reader
134 135 136 |
# File 'component_manager.rb', line 134 def to_i id end |
#to_json ⇒ String
Export all data into a JSON String, which could then later be loaded or saved to a file TODO: This function is not yet complete
182 183 184 |
# File 'component_manager.rb', line 182 def to_json # should return a json or hash of all data in this component end |
#update_attrs(**opts) ⇒ Object
Update attribute values using a hash or keywords.
146 147 148 149 150 |
# File 'component_manager.rb', line 146 def update_attrs(**opts) opts.each do |key, value| send "#{key}=", value end end |