Class: FelFlame::Entities
- Inherits:
-
Object
- Object
- FelFlame::Entities
- Extended by:
- Enumerable
- Defined in:
- felflame.rb,
entity_manager.rb
Overview
Creates and manages Entities. Allows accessing Entities using their ID
TODO: Improve Entity overview
Instance Attribute Summary collapse
-
#id ⇒ Integer
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(component) ⇒ Boolean
Returns true when added, or false if it already belongs to the Entity Add a component to the Entity.
-
#components ⇒ Hash
A hash that uses component manager constant names as keys, and where the values of those keys are arrays that contain the IDs of 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) ⇒ Entities
constructor
Creating a new component.
-
#remove(component) ⇒ Boolean
Remove a component from the Entity.
-
#to_i ⇒ Integer
An alias for the ID reader.
-
#to_json ⇒ String
Export all data into a JSON String which can then be saved into a file TODO: This function is not yet complete.
Constructor Details
#initialize(*components) ⇒ Entities
Creating a new component
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'entity_manager.rb', line 9 def initialize(*components) # Assign new unique ID new_id = self.class.data.find_index { |i| i.nil? } new_id = self.class.data.size if new_id.nil? self.id = new_id # Add each component components.uniq.each do |component| add component end self.class.data[id] = self end |
Instance Attribute Details
#id ⇒ Integer
Holds the unique ID of this entity
5 6 7 |
# File '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
97 98 99 |
# File 'entity_manager.rb', line 97 def [](entity_id) data[entity_id] end |
.each(&block) ⇒ Enumerator
Iterates over all entities. In general when using ECS the use of this method should never be neccassary unless you are doing something very wrong, however I will not stop you. You also call other enumerable methods instead of each, such as `each_with_index` or `select`
104 105 106 |
# File 'entity_manager.rb', line 104 def each(&block) data.each(&block) end |
Instance Method Details
#add(component) ⇒ Boolean
Returns true when added, or false if it already belongs to the Entity Add a component to the Entity
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'entity_manager.rb', line 54 def add component if components[component.class.to_s.to_sym].nil? components[component.class.to_s.to_sym] = [component.id] component.linked_entities.push id true elsif !components[component.class.to_s.to_sym].include? component.id components[component.class.to_s.to_sym].push component.id component.linked_entities.push id true else false end end |
#components ⇒ Hash
A hash that uses component manager constant names as keys, and where the values of those keys are arrays that contain the IDs of components attached to this entity.
24 25 26 |
# File 'entity_manager.rb', line 24 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.
36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'entity_manager.rb', line 36 def delete components.each do |component_manager, component_array| component_array.each do |component_id| FelFlame.const_get( component_manager.to_s.delete_prefix('FelFlame::') )[component_id].linked_entities.delete(id) end end FelFlame::Entities.data[id] = nil @id = nil @components = nil true end |
#remove(component) ⇒ Boolean
Remove a component from the Entity
71 72 73 74 75 76 77 78 |
# File 'entity_manager.rb', line 71 def remove component components[component.class.to_s.to_sym].delete component.id if component.linked_entities.delete id true else false end end |
#to_i ⇒ Integer
An alias for the ID reader
30 31 32 |
# File 'entity_manager.rb', line 30 def to_i id end |
#to_json ⇒ String
Export all data into a JSON String which can then be saved into a file TODO: This function is not yet complete
83 84 |
# File 'entity_manager.rb', line 83 def to_json end |