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 #to_h 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
-
#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<Component>
Entities that have this component.
-
#entity ⇒ Component
A single entity.
-
#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 storing 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.
132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/felflame/component_manager.rb', line 132 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.
180 181 182 |
# File 'lib/felflame/component_manager.rb', line 180 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.
196 197 198 |
# File 'lib/felflame/component_manager.rb', line 196 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.
188 189 190 |
# File 'lib/felflame/component_manager.rb', line 188 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.
109 110 111 |
# File 'lib/felflame/component_manager.rb', line 109 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.
125 126 127 |
# File 'lib/felflame/component_manager.rb', line 125 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.
117 118 119 |
# File 'lib/felflame/component_manager.rb', line 117 def removal_triggers @removal_triggers ||= [] end |
Instance Method Details
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its data.
247 248 249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/felflame/component_manager.rb', line 247 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<Component>
Entities that have this component
209 210 211 |
# File 'lib/felflame/component_manager.rb', line 209 def entities @entities ||= [] end |
#entity ⇒ Component
A single entity. Use this if you expect the component to only belong to one entity and you want to access it.
215 216 217 218 219 220 221 222 |
# File 'lib/felflame/component_manager.rb', line 215 def entity if entities.empty? Warning.warn("This component belongs to NO entities but you called the method that is intended for components belonging to a single entity.\nYou may have a bug in your logic.") elsif entities.length > 1 Warning.warn("This component belongs to MANY entities but you called the method that is intended for components belonging to a single entity.\nYou may have a bug in your logic.") end entities.first end |
#to_h ⇒ Hash<Symbol, Value>
Returns A hash, where all the keys are attributes storing their respective values.
262 263 264 265 266 267 268 |
# File 'lib/felflame/component_manager.rb', line 262 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.
226 227 228 229 230 |
# File 'lib/felflame/component_manager.rb', line 226 def update_attrs(**opts) opts.each do |key, value| send "#{key}=", value end end |