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
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.
-
.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
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File '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 #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
119 120 121 |
# File 'entity_manager.rb', line 119 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
126 127 128 |
# File 'entity_manager.rb', line 126 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
134 |
# File 'entity_manager.rb', line 134 def from_json(json_string, **opts) end |
Instance Method Details
#add(*components_to_add) ⇒ Boolean
Add any number components to the Entity.
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'entity_manager.rb', line 61 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.
33 34 35 |
# File 'entity_manager.rb', line 33 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.
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'entity_manager.rb', line 45 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
90 91 92 93 94 95 96 97 |
# File 'entity_manager.rb', line 90 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
39 40 41 |
# File 'entity_manager.rb', line 39 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
102 |
# File 'entity_manager.rb', line 102 def to_json() end |