Class: FelFlame::ComponentManager
- Inherits:
-
Object
- Object
- FelFlame::ComponentManager
- Defined in:
- lib/felflame/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
-
.addition_triggers ⇒ Array<System>
readonly
Stores references to systems that should be triggered when this component is added to an enitity.
-
.attr_triggers ⇒ Hash<Symbol, System>
readonly
Stores references to systems that should be triggered when an attribute from this component changed.
-
.removal_triggers ⇒ Array<System>
readonly
Stores references to systems that should be triggered when this component is removed from an enitity.
Instance Attribute Summary collapse
-
#addition_triggers ⇒ Array<System>
readonly
Stores references to systems that should be triggered when a component from this manager is added.
-
#attr_triggers ⇒ Hash<Symbol, Array<System>>
readonly
Stores references to systems that should be triggered when an attribute from this manager is changed.
-
#removal_triggers ⇒ Array<System>
readonly
Stores references to systems that should be triggered when a component from this manager is removed.
Instance Method Summary collapse
-
#attr_changed_trigger_systems(attr) ⇒ Boolean
Execute systems that have been added to execute on variable change.
-
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its data.
-
#entities ⇒ Array<Integer>
Entities that have this component.
-
#initialize(**attrs) ⇒ Component
constructor
Creates a new component and sets the values of the attributes given to it.
-
#to_h ⇒ Hash<Symbol, Value>
A hash, where all the keys are attributes linked to their respective values.
-
#update_attrs(**opts) ⇒ Hash<Symbol, Value>
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.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/felflame/component_manager.rb', line 109 def initialize(**attrs) # Prepare the object # (this is a function created with metaprogramming # in FelFlame::Components) set_defaults # Fill params attrs.each do |key, value| send "#{key}=", value end # Save Component self.class.push self end |
Class Attribute Details
.addition_triggers ⇒ Array<System>
Stores references to systems that should be triggered when this component is added to an enitity. Do not edit this array as it is managed by FelFlame automatically.
159 160 161 |
# File 'lib/felflame/component_manager.rb', line 159 def addition_triggers @addition_triggers ||= [] end |
.attr_triggers ⇒ Hash<Symbol, System>
Stores references to systems that should be triggered when an attribute from this component changed. Do not edit this hash as it is managed by FelFlame automatically.
175 176 177 |
# File 'lib/felflame/component_manager.rb', line 175 def attr_triggers @attr_triggers ||= {} end |
.removal_triggers ⇒ Array<System>
Stores references to systems that should be triggered when this component is removed from an enitity. Do not edit this array as it is managed by FelFlame automatically.
167 168 169 |
# File 'lib/felflame/component_manager.rb', line 167 def removal_triggers @removal_triggers ||= [] end |
Instance Attribute Details
#addition_triggers ⇒ Array<System>
Stores references to systems that should be triggered when a component from this manager is added. Do not edit this array as it is managed by FelFlame automatically.
86 87 88 |
# File 'lib/felflame/component_manager.rb', line 86 def addition_triggers @addition_triggers ||= [] end |
#attr_triggers ⇒ Hash<Symbol, Array<System>>
Stores references to systems that should be triggered when an attribute from this manager is changed. Do not edit this hash as it is managed by FelFlame automatically.
102 103 104 |
# File 'lib/felflame/component_manager.rb', line 102 def attr_triggers @attr_triggers ||= {} end |
#removal_triggers ⇒ Array<System>
Stores references to systems that should be triggered when a component from this manager is removed. Do not edit this array as it is managed by FelFlame automatically.
94 95 96 |
# File 'lib/felflame/component_manager.rb', line 94 def removal_triggers @removal_triggers ||= [] end |
Instance Method Details
#attr_changed_trigger_systems(attr) ⇒ Boolean
Execute systems that have been added to execute on variable change
202 203 204 205 206 207 208 209 210 |
# File 'lib/felflame/component_manager.rb', line 202 def attr_changed_trigger_systems(attr) systems_to_execute = self.class.attr_triggers[attr] systems_to_execute = [] if systems_to_execute.nil? systems_to_execute |= attr_triggers[attr] unless attr_triggers[attr].nil? systems_to_execute.sort_by(&:priority).reverse_each(&:call) true end |
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its data.
213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/felflame/component_manager.rb', line 213 def delete addition_triggers.each do |system| system.clear_triggers component_or_manager: self end entities.reverse_each do |entity| entity.remove self end self.class._data.delete self instance_variables.each do |var| instance_variable_set(var, nil) end true end |
#entities ⇒ Array<Integer>
Entities that have this component
188 189 190 |
# File 'lib/felflame/component_manager.rb', line 188 def entities @entities ||= [] end |
#to_h ⇒ Hash<Symbol, Value>
Returns A hash, where all the keys are attributes linked to their respective values.
228 229 230 231 232 233 234 |
# File 'lib/felflame/component_manager.rb', line 228 def to_h return_hash = instance_variables.each_with_object({}) do |key, final| final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key) end return_hash.delete(:attr_triggers) return_hash end |
#update_attrs(**opts) ⇒ Hash<Symbol, Value>
Update attribute values using a hash or keywords.
194 195 196 197 198 |
# File 'lib/felflame/component_manager.rb', line 194 def update_attrs(**opts) opts.each do |key, value| send "#{key}=", value end end |