Class: FelFlame::Helper::ComponentManager

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#idInteger

Holds the unique ID of a component. The ID is only unique within the scope of the component manager it was created from.

Returns:

  • (Integer)


53
54
55
# File 'component_manager.rb', line 53

def id
  @id
end

Class Method Details

.[](component_id) ⇒ Component

Gets a Component from the given unique ID. Usage is simular to how an Array lookup works.

Examples:

# this gets the 'Health' Component with ID 7
FelFlame::Components::Health[7]

Parameters:

  • component_id (Integer)

Returns:

  • (Component)

    Returns the Component that uses the given unique ID, nil if there is no Component associated with the given ID



69
70
71
# File 'component_manager.rb', line 69

def [](component_id)
  data[component_id]
end

.eachEnumerator

Iterates over all components within the component manager

Returns:

  • (Enumerator)


95
96
97
98
99
# File 'component_manager.rb', line 95

def each
  data.each do |component|
    yield component
  end
end

.new(**attrs) ⇒ Component

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.

Parameters:

  • attrs (Keyword: Value)

Returns:

  • (Component)


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'component_manager.rb', line 76

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

#attrsHash

Returns A hash, where all the keys are attributes linked to their respective values.

Returns:

  • (Hash)

    A hash, where all the keys are attributes linked to their respective values.



137
138
139
140
141
# File 'component_manager.rb', line 137

def attrs
  instance_variables.each_with_object({}) do |key, final|
    final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key)
  end
end

#deleteBoolean

Removes this component from the list and purges all references to this Component from other Entities, as well as its ID and data.

Returns:

  • (Boolean)

    true.



124
125
126
127
128
129
130
131
132
133
134
# File 'component_manager.rb', line 124

def delete
  entities.each do |entity_id|
    FelFlame::Entities[entity_id].remove self
  end
  self.class.data[id] = nil
  @entities = nil
  instance_variables.each do |var|
    instance_variable_set(var, nil)
  end
  true
end

#entitiesArray

A list of components that are linked to the component

Returns:

  • (Array)


110
111
112
# File 'component_manager.rb', line 110

def entities
  @entities ||= []
end

#to_iInteger

An alias for the ID Reader

Returns:

  • (Integer)


104
105
106
# File 'component_manager.rb', line 104

def to_i
  id
end

#to_jsonString

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

Returns:

  • (String)

    a JSON formatted String



146
147
148
# File 'component_manager.rb', line 146

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.

Returns:

  • Hash of updated attributes



116
117
118
119
120
# File 'component_manager.rb', line 116

def update_attrs(**opts)
  opts.each do |key, value|
    send "#{key}=", value
  end
end