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
113 114 115 |
# File 'entity_manager.rb', line 113 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
120 121 122 |
# File 'entity_manager.rb', line 120 def each(&block) data.compact.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
128 |
# File 'entity_manager.rb', line 128 def from_json(json_string, **opts) end |
Instance Method Details
#add(*components_to_add) ⇒ Boolean
Add any number components to the Entity.
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'entity_manager.rb', line 55 def add(*components_to_add) components_to_add.each do |component| if components[component.class].nil? components[component.class] = [component.id] component.entities.push id check_systems component, :addition_triggers elsif !components[component.class].include? component.id components[component.class].push component.id component.entities.push id check_systems component, :addition_triggers end 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 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 50 |
# 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) #self.remove FelFlame::Components.const_get(component_manager.name)[component_id] end end FelFlame::Entities.data[id] = nil @components = {} @id = nil true end |
#remove(*components_to_remove) ⇒ Boolean
Remove a component from the Entity
84 85 86 87 88 89 90 91 |
# File 'entity_manager.rb', line 84 def remove(*components_to_remove) components_to_remove.each do |component| check_systems component, :removal_triggers if component.entities.include? id component.entities.delete id components[component.class].delete component.id end true 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
96 |
# File 'entity_manager.rb', line 96 def to_json() end |