Class: FelFlame::Helper::ComponentManagerTemplate
- Inherits:
-
Object
- Object
- FelFlame::Helper::ComponentManagerTemplate
- Defined in:
- 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 #attrs and #update_attrs methods instead.
Instance Attribute Summary collapse
-
#id ⇒ Object
Holds the unique ID of a component.
Class Method Summary collapse
-
.[](component_id) ⇒ Component
Gets a Component from the given unique ID.
-
.each ⇒ Enumerator
Iterates over all components within the component manager.
-
.new(**attrs) ⇒ Object
Creates a new component and sets the values of the attributes given to it.
Instance Method Summary collapse
-
#attrs ⇒ Hash
Returns a hash, where all the keys are attributes linked to their respective values.
-
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its ID and data.
-
#linked_entities ⇒ Array
A list of components that are linked to the component.
-
#to_i ⇒ Integer
An alias for the ID reader.
-
#to_json ⇒ String
Export all data into a JSON String, which could then later be loaded or saved to a file TODO: This function is not yet complete.
-
#update_attrs(**opts) ⇒ Object
Update attribute values using a hash or keywords.
Instance Attribute Details
Class Method Details
.[](component_id) ⇒ Component
Gets a Component from the given unique ID. Usage is simular to how an Array lookup works.
55 56 57 |
# File 'component_manager.rb', line 55 def [](component_id) data[component_id] end |
.each ⇒ Enumerator
Iterates over all components within the component manager
79 80 81 82 83 |
# File 'component_manager.rb', line 79 def each data.each do |component| yield component end end |
.new(**attrs) ⇒ Object
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.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'component_manager.rb', line 60 def new(**attrs) new_component = super # Generate ID new_id = self.data.find_index { |i| i.nil? } new_id = self.data.size if new_id.nil? new_component.id = new_id # Fill params attrs.each do |key, value| new_component.send "#{key}=", value end # Save Component data[new_id] = new_component end |
Instance Method Details
#attrs ⇒ Hash
Returns a hash, where all the keys are attributes linked to their respective values.
121 122 123 124 125 |
# File 'component_manager.rb', line 121 def attrs instance_variables.each_with_object({}) do |key, final| final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key) end end |
#delete ⇒ Boolean
Removes this component from the list and purges all references to this Component from other Entities, as well as its ID and data.
108 109 110 111 112 113 114 115 116 117 118 |
# File 'component_manager.rb', line 108 def delete linked_entities.each do |entity_id| FelFlame::Entities[entity_id].remove self end self.class.data[id] = nil @linked_entities = nil instance_variables.each do |var| instance_variable_set(var, nil) end true end |
#linked_entities ⇒ Array
A list of components that are linked to the component
94 95 96 |
# File 'component_manager.rb', line 94 def linked_entities @linked_entities ||= [] end |
#to_i ⇒ Integer
An alias for the ID reader
88 89 90 |
# File 'component_manager.rb', line 88 def to_i id end |
#to_json ⇒ String
Export all data into a JSON String, which could then later be loaded or saved to a file TODO: This function is not yet complete
130 131 132 |
# File 'component_manager.rb', line 130 def to_json # should return a json or hash of all data in this component end |
#update_attrs(**opts) ⇒ Object
Update attribute values using a hash or keywords.
100 101 102 103 104 |
# File 'component_manager.rb', line 100 def update_attrs(**opts) opts.each do |key, value| send "#{key}=", value end end |