Class: FelFlame::Components

Inherits:
Object
  • Object
show all
Extended by:
Enumerable
Defined in:
felflame.rb,
component_manager.rb

Overview

Creates component managers and allows accessing them them under the Components namespace as Constants

To see how component managers are used please look at the ComponentManager documentation.

Class Method Summary collapse

Class Method Details

.each(&block) ⇒ Enumerator

Iterate over all existing component managers. You also call other enumerable methods instead of each, such as each_with_index or select

Returns:

  • (Enumerator)


47
48
49
# File 'component_manager.rb', line 47

def each(&block)
  constants.each(&block)
end

.new(component_name, *attrs, **attrs_with_defaults) ⇒ ComponentManager

Creates a new component manager.

Examples:

# 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')

Parameters:

  • component_name (String)

    Name of your new component manager. Must be stylized in the format of constants in Ruby

  • attrs (:Symbols)

    New components made with this manager will include these symbols as accessors, the values of these accessors will default to nil

  • 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

Returns:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File '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|
    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