Class: FelFlame::Helper::ComponentManagerTemplate

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

#idObject

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



43
44
45
# File 'component_manager.rb', line 43

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.

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



55
56
57
# File 'component_manager.rb', line 55

def [](component_id)
  data[component_id]
end

.eachEnumerator

Iterates over all components within the component manager

Returns:

  • (Enumerator)


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

#attrsHash

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

Returns:

  • (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

#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.



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_entitiesArray

A list of components that are linked to the component

Returns:

  • (Array)


94
95
96
# File 'component_manager.rb', line 94

def linked_entities
  @linked_entities ||= []
end

#to_iInteger

An alias for the ID reader

Returns:

  • (Integer)


88
89
90
# File 'component_manager.rb', line 88

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



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.

Returns:

  • Hash of updated attributes



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