class FelECS::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 {#to_h} and {#update_attrs} methods instead.

Attributes

addition_triggers[W]

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

attr_triggers[W]

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

removal_triggers[W]

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

addition_triggers[W]

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

attr_triggers[W]

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

removal_triggers[W]

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

_data() click to toggle source

@return [Array<Component>] Array of all Components that belong to a given component manager @!visibility private

# File lib/felecs/component_manager.rb, line 204
def _data
  @data ||= []
end
addition_triggers() click to toggle source

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 FelECS automatically. @return [Array<System>]

# File lib/felecs/component_manager.rb, line 182
def addition_triggers
  @addition_triggers ||= []
end
attr_triggers() click to toggle source

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 FelECS automatically. @return [Hash<Symbol, System>]

# File lib/felecs/component_manager.rb, line 198
def attr_triggers
  @attr_triggers ||= {}
end
method_missing(method, *args, **kwargs, &block) click to toggle source

Makes component managers behave like arrays with additional methods for managing the array @!visibility private

Calls superclass method
# File lib/felecs/component_manager.rb, line 164
def method_missing(method, *args, **kwargs, &block)
  if _data.respond_to? method
    _data.send(method, *args, **kwargs, &block)
  else
    super
  end
end
new(**attrs) click to toggle source

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/felecs/component_manager.rb, line 134
def initialize(**attrs)
  # Prepare the object
  # (this is a function created with metaprogramming
  # in FelECS::Components)
  set_defaults

  # Fill params
  attrs.each do |key, value|
    send "#{key}=", value
  end

  # Save Component
  self.class.push self
end
removal_triggers() click to toggle source

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 FelECS automatically. @return [Array<System>]

# File lib/felecs/component_manager.rb, line 190
def removal_triggers
  @removal_triggers ||= []
end
respond_to_missing?(method, *) click to toggle source

Makes component managers behave like arrays with additional methods for managing the array @!visibility private

Calls superclass method
# File lib/felecs/component_manager.rb, line 153
def respond_to_missing?(method, *)
  if _data.respond_to? method
    true
  else
    super
  end
end

Public Instance Methods

addition_triggers() click to toggle source

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 FelECS automatically. @return [Array<System>]

# File lib/felecs/component_manager.rb, line 111
def addition_triggers
  @addition_triggers ||= []
end
attr_changed_trigger_systems(attr) click to toggle source

Execute systems that have been added to execute on variable change @return [Boolean] true @!visibility private

# File lib/felecs/component_manager.rb, line 237
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
attr_triggers() click to toggle source

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 FelECS automatically. @return [Hash<Symbol, Array<System>>]

# File lib/felecs/component_manager.rb, line 127
def attr_triggers
  @attr_triggers ||= {}
end
delete() click to toggle source

Removes this component from the list and purges all references to this Component from other Entities, as well as its data. @return [Boolean] true.

# File lib/felecs/component_manager.rb, line 249
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() click to toggle source

Entities that have this component @return [Array<Component>]

# File lib/felecs/component_manager.rb, line 211
def entities
  @entities ||= []
end
entity() click to toggle source

A single entity. Use this if you expect the component to only belong to one entity and you want to access it. @return [Component]

# File lib/felecs/component_manager.rb, line 217
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
removal_triggers() click to toggle source

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 FelECS automatically. @return [Array<System>]

# File lib/felecs/component_manager.rb, line 119
def removal_triggers
  @removal_triggers ||= []
end
to_h() click to toggle source

@return [Hash<Symbol, Value>] A hash, where all the keys are attributes storing their respective values.

# File lib/felecs/component_manager.rb, line 264
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) click to toggle source

Update attribute values using a hash or keywords. @return [Hash<Symbol, Value>] Hash of updated attributes

# File lib/felecs/component_manager.rb, line 228
def update_attrs(**opts)
  opts.each do |key, value|
    send "#{key}=", value
  end
end