Class: FelFlame::Entities
- Inherits:
-
Object
- Object
- FelFlame::Entities
- Extended by:
- Enumerable
- Defined in:
- lib/felflame.rb,
lib/felflame/entity_manager.rb
Overview
Creates and manages Entities. Allows accessing Entities using their ID. Entities are just collections of Components.
Instance Attribute Summary collapse
-
#id ⇒ Integer
readonly
Holds the unique ID of this entity.
Class Method Summary collapse
-
.[](entity_id) ⇒ Entity
Gets an Entity from the given unique ID.
-
.each(&block) ⇒ Enumerator
Iterates over all entities.
Instance Method Summary collapse
-
#add(*components_to_add) ⇒ Boolean
Add any number components to the Entity.
-
#components ⇒ Hash<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 IDs of the components attached to this entity.
-
#delete ⇒ Boolean
Removes this Entity from the list and purges all references to this Entity from other Components, as well as its ID and data.
-
#initialize(*components) ⇒ Entity
constructor
Creating a new Entity.
-
#remove(*components_to_remove) ⇒ Boolean
Remove a component from the Entity.
-
#to_i ⇒ Integer
An alias for the ID reader.
Constructor Details
#initialize(*components) ⇒ Entity
Creating a new Entity
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/felflame/entity_manager.rb', line 16 def initialize(*components) # Assign new unique ID new_id = self.class.data.find_index(&:nil?) new_id = self.class.data.size if new_id.nil? self.id = new_id # Add each component add(*components) self.class.data[id] = self end |
Instance Attribute Details
#id ⇒ Integer
Holds the unique ID of this entity
5 6 7 |
# File 'lib/felflame/entity_manager.rb', line 5 def id @id end |
Class Method Details
.[](entity_id) ⇒ Entity
Gets an Entity from the given unique ID. Usage is simular to how an Array lookup works
116 117 118 |
# File 'lib/felflame/entity_manager.rb', line 116 def [](entity_id) data[entity_id] end |
.each(&block) ⇒ Enumerator
Iterates over all entities. The data is compacted so that means index does not correlate to ID. You also call other enumerable methods instead of each, such as each_with_index
or select
123 124 125 |
# File 'lib/felflame/entity_manager.rb', line 123 def each(&block) data.compact.each(&block) end |
Instance Method Details
#add(*components_to_add) ⇒ Boolean
Add any number components to the Entity.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/felflame/entity_manager.rb', line 57 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 |
#components ⇒ Hash<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 IDs of the components attached to this entity.
30 31 32 |
# File 'lib/felflame/entity_manager.rb', line 30 def components @components ||= {} end |
#delete ⇒ Boolean
Removes this Entity from the list and purges all references to this Entity from other Components, as well as its ID and data.
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/felflame/entity_manager.rb', line 42 def delete components.each do |component_manager, component_array| component_array.each do |component| component.entities.delete(self) end end FelFlame::Entities.data[id] = nil @components = {} @id = nil true end |
#remove(*components_to_remove) ⇒ Boolean
Remove a component from the Entity
87 88 89 90 91 92 93 94 |
# File 'lib/felflame/entity_manager.rb', line 87 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 |
#to_i ⇒ Integer
An alias for the ID reader
36 37 38 |
# File 'lib/felflame/entity_manager.rb', line 36 def to_i id end |