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.
-
.from_json(json_string, **opts) ⇒ Object
Creates a new entity using the data from a JSON string TODO: This function is not yet complete.
Instance Method Summary collapse
-
#add(*components_to_add) ⇒ Boolean
Add any number components 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 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.
-
#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) ⇒ Entity
Creating a new Entity
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'entity_manager.rb', line 10 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 #components.uniq.each do |component| # add component #end add(*components) 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
104 105 106 |
# File 'entity_manager.rb', line 104 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
111 112 113 |
# File 'entity_manager.rb', line 111 def each(&block) data.each(&block) end |
.from_json(json_string, **opts) ⇒ Object
Creates a new entity using the data from a JSON string TODO: This function is not yet complete
119 |
# File 'entity_manager.rb', line 119 def from_json(json_string, **opts) end |
Instance Method Details
#add(*components_to_add) ⇒ Boolean
Add any number components to the Entity.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'entity_manager.rb', line 54 def add(*components_to_add) added = false components_to_add.each do |component| if components[component.class].nil? components[component.class] = [component.id] component.entities.push id added =true elsif !components[component.class].include? component.id components[component.class].push component.id component.entities.push id added = true end end added 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 the components attached to this entity.
27 28 29 |
# File 'entity_manager.rb', line 27 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.
39 40 41 42 43 44 45 46 47 48 49 |
# File 'entity_manager.rb', line 39 def delete components.each do |component_manager, component_array| component_array.each do |component_id| component_manager[component_id].entities.delete(id) end end FelFlame::Entities.data[id] = nil @id = nil @components = nil true end |
#remove(*components_to_remove) ⇒ Boolean
Remove a component from the Entity
73 74 75 76 77 78 79 80 81 82 |
# File 'entity_manager.rb', line 73 def remove(*components_to_remove) removed = false components_to_remove.each do |component| components[component.class].delete component.id if component.entities.delete id removed = true end end removed end |
#to_i ⇒ Integer
An alias for the ID reader
33 34 35 |
# File 'entity_manager.rb', line 33 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
87 |
# File 'entity_manager.rb', line 87 def to_json() end |