class FelFlame::ComponentManager
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.
Attributes
Allows overwriting the storage of triggers, such as for clearing. This method should generally only need to be used internally and not by a game developer. @!visibility private
Allows overwriting the storage of triggers, such as for clearing. This method should generally only need to be used internally and not by a game developer. @!visibility private
Allows overwriting the storage of triggers, such as for clearing. This method should generally only need to be used internally and not by a game developer. @!visibility private
Allows overwriting the storage of triggers, such as for clearing. This method should generally only need to be used internally and not by a game developer. @!visibility private
Allows overwriting the storage of triggers, such as for clearing. This method should generally only need to be used internally and not by a game developer. @!visibility private
Holds the {id unique ID} of a component. The {id ID} is only unique within the scope of the component manager it was created from. @return [Integer]
Allows overwriting the storage of triggers, such as for clearing. This method should generally only need to be used internally and not by a game developer. @!visibility private
Public Class Methods
Gets a Component from the given {id unique ID}. Usage is simular to how an Array lookup works.
@example
# this gets the 'Health' Component with ID 7 FelFlame::Components::Health[7]
@param component_id [Integer] @return [Component] Returns the Component that uses the given unique {id ID}, nil if there is no Component associated with the given {id ID}
# File lib/felflame/component_manager.rb, line 169 def [](component_id) data[component_id] end
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. @return [Array<System>]
# File lib/felflame/component_manager.rb, line 136 def addition_triggers @addition_triggers ||= [] end
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. @return [Hash<Symbol, System>]
# File lib/felflame/component_manager.rb, line 152 def attr_triggers @attr_triggers ||= {} end
@return [Array<Component>] Array of all Components
that belong to a given component manager @!visibility private
# File lib/felflame/component_manager.rb, line 158 def data @data ||= [] end
Iterates over all components within the component manager. Special Enumerable methods like map
or each_with_index
are not implemented @return [Enumerator]
# File lib/felflame/component_manager.rb, line 176 def each(&block) data.compact.each(&block) end
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. @param attrs [Keyword: Value] You can pass any number of Keyword-Value pairs @return [Component]
# File lib/felflame/component_manager.rb, line 104 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
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. @return [Array<System>]
# File lib/felflame/component_manager.rb, line 144 def removal_triggers @removal_triggers ||= [] end
Public Instance Methods
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. @return [Array<System>]
# File lib/felflame/component_manager.rb, line 81 def addition_triggers @addition_triggers ||= [] end
Execute systems that have been added to execute on variable change @return [Boolean] true
# File lib/felflame/component_manager.rb, line 203 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
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. @return [Hash<Symbol, Array<System>>]
# File lib/felflame/component_manager.rb, line 97 def attr_triggers @attr_triggers ||= {} end
@return [Hash<Symbol, Value>] A hash, where all the keys are attributes linked to their respective values.
# File lib/felflame/component_manager.rb, line 235 def attrs 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
Removes this component from the list and purges all references to this Component from other Entities
, as well as its {id ID} and data. @return [Boolean] true
.
# File lib/felflame/component_manager.rb, line 215 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| #FelFlame::Entities[entity_id].remove self #unless FelFlame::Entities[entity_id].nil? entity.remove self end self.class.data[id] = nil instance_variables.each do |var| instance_variable_set(var, nil) end true end
A list of entity ids that are linked to the component @return [Array<Integer>]
# File lib/felflame/component_manager.rb, line 189 def entities @entities ||= [] end
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. @return [Array<System>]
# File lib/felflame/component_manager.rb, line 89 def removal_triggers @removal_triggers ||= [] end
An alias for the {id ID Reader} @return [Integer]
# File lib/felflame/component_manager.rb, line 183 def to_i id end
Update attribute values using a hash or keywords. @return [Hash<Symbol, Value>] Hash of updated attributes
# File lib/felflame/component_manager.rb, line 195 def update_attrs(**opts) opts.each do |key, value| send "#{key}=", value end end