Class: FelFlame::Entities

Inherits:
Object
  • Object
show all
Defined in:
lib/felflame.rb,
lib/felflame/entity_manager.rb

Overview

Creates and manages Entities. Allows iterating or accessing Entities using array methods directly on the class. Entities are just collections of Components.

Instance Method Summary collapse

Constructor Details

#initialize(*components) ⇒ Entity

Creating a new Entity

Parameters:

  • components (Components)

    Can be any number of components, identical duplicates will be automatically purged however different components from the same component manager are allowed.



7
8
9
10
11
12
# File 'lib/felflame/entity_manager.rb', line 7

def initialize(*components)
  # Add each component
  add(*components)

  self.class._data.push self
end

Instance Method Details

#add(*components_to_add) ⇒ Boolean

Add any number components to the Entity.

Parameters:

  • components_to_add (Component)

    Any number of components created from any component manager

Returns:

  • (Boolean)

    true



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/felflame/entity_manager.rb', line 36

def add(*components_to_add)
  components_to_add.each do |component|
    if components[component.class].nil?
      components[component.class] = [component]
      component.entities.push self
      check_systems component, :addition_triggers
    elsif !components[component.class].include? component
      components[component.class].push component
      component.entities.push self
      check_systems component, :addition_triggers
    end
  end
  true
end

#componentsHash<Component_Manager, Array<Integer>>

A hash that uses component manager constant names as keys, and where the values of those keys are arrays that contain the the components attached to this entity.

Returns:

  • (Hash<Component_Manager, Array<Integer>>)


16
17
18
# File 'lib/felflame/entity_manager.rb', line 16

def components
  @components ||= {}
end

#deleteBoolean

Removes this Entity from the list and purges all references to this Entity from other Components, as well as its data.

Returns:

  • (Boolean)

    true



22
23
24
25
26
27
28
29
30
31
# File 'lib/felflame/entity_manager.rb', line 22

def delete
  components.each do |component_manager, component_array|
    component_array.reverse_each do |component|
      component.entities.delete(self)
    end
  end
  FelFlame::Entities._data.delete self
  @components = {}
  true
end

#remove(*components_to_remove) ⇒ Boolean

Remove a component from the Entity

Parameters:

  • components_to_remove (Component)

    A component created from any component manager

Returns:

  • (Boolean)

    true



66
67
68
69
70
71
72
73
# File 'lib/felflame/entity_manager.rb', line 66

def remove(*components_to_remove)
  components_to_remove.each do |component|
    check_systems component, :removal_triggers if component.entities.include? self
    component.entities.delete self
    components[component.class].delete component
  end
  true
end