class FelFlame::Components
Creates component managers and allows accessing them them under the {FelFlame::Components} namespace as Constants
To see how component managers are used please look at the {FelFlame::ComponentManager} documentation.
Public Class Methods
Iterate over all existing component managers. You also call other enumerable methods instead of each, such as each_with_index
or select
@return [Enumerator]
# File lib/felflame/component_manager.rb, line 51 def each(&block) constants.each(&block) end
Creates a new {FelFlame::ComponentManager component manager}.
@example
# Here color is set to default to red # while max and current are nil until set. # When you make a new component using this component manager # these are the values and accessors it will have. FelFlame::Component.new('Health', :max, :current, color: 'red')
@param component_name [String] Name of your new component manager. Must be stylized in the format of constants in Ruby @param attrs [:Symbols] New components made with this manager will include these symbols as accessors, the values of these accessors will default to nil @param attrs_with_defaults [Keyword: DefaultValue] New components made with this manager will include these keywords as accessors, their defaults set to the values given to the keywords @return [ComponentManager]
# File lib/felflame/component_manager.rb, line 19 def new(component_name, *attrs, **attrs_with_defaults) if FelFlame::Components.const_defined?(component_name) raise(NameError.new, "Component Manager '#{component_name}' is already defined") end const_set(component_name, Class.new(FelFlame::ComponentManager) {}) attrs.each do |attr| if FelFlame::Components.const_get(component_name).method_defined?("#{attr}") || FelFlame::Components.const_get(component_name).method_defined?("#{attr}=") raise NameError.new "The attribute name \"#{attr}\" is already a method" end FelFlame::Components.const_get(component_name).attr_accessor attr end attrs_with_defaults.each do |attr, _default| attrs_with_defaults[attr] = _default.dup FelFlame::Components.const_get(component_name).attr_reader attr FelFlame::Components.const_get(component_name).define_method("#{attr}=") do |value| attr_changed_trigger_systems(attr) unless value.equal? send(attr) instance_variable_set("@#{attr}", value) end end FelFlame::Components.const_get(component_name).define_method(:set_defaults) do attrs_with_defaults.each do |attr, default| instance_variable_set("@#{attr}", default.dup) end end FelFlame::Components.const_get(component_name) end