From 61b6b4f8e524eb93e56e5dbe62f2387ed39970e9 Mon Sep 17 00:00:00 2001 From: realtradam Date: Thu, 10 Jun 2021 12:04:40 -0400 Subject: proper implementation of entities and components + their documentation --- doc/FelFlame/Entities.html | 1128 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1128 insertions(+) create mode 100644 doc/FelFlame/Entities.html (limited to 'doc/FelFlame/Entities.html') diff --git a/doc/FelFlame/Entities.html b/doc/FelFlame/Entities.html new file mode 100644 index 0000000..8f91e9e --- /dev/null +++ b/doc/FelFlame/Entities.html @@ -0,0 +1,1128 @@ + + + + + + + Class: FelFlame::Entities + + — Documentation by YARD 0.9.26 + + + + + + + + + + + + + + + + + + + +
+ + +

Class: FelFlame::Entities + + + +

+
+ +
+
Inherits:
+
+ Object + +
    +
  • Object
  • + + + +
+ show all + +
+
+ + + + +
+
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 +

+ + + +

+ 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

+ + +
+
+
+

Parameters:

+
    + +
  • + + components + + + (Component) + + + + — +
    +

    Can be any number of components, identical duplicated will be automatically purged however different components from the same component manager are allowed.

    +
    + +
  • + +
+ + +
+ + + + +
+
+
+
+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

+ + + +
+

+ + #idInteger + + + + + +

+
+ +

Holds the unique ID of this entity

+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Integer) + + + +
  • + +
+ +
+ + + + +
+
+
+
+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

+ + +
+
+
+

Parameters:

+
    + +
  • + + entity_id + + + (Integer) + + + +
  • + +
+ +

Returns:

+
    + +
  • + + + (Entity) + + + + — +
    +

    returns the Entity that uses the given unique ID, nil if there is no Entity associated with the given ID

    +
    + +
  • + +
+ +
+ + + + +
+
+
+
+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`

+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Enumerator) + + + +
  • + +
+ +
+ + + + +
+
+
+
+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

+ + +
+
+
+

Parameters:

+
    + +
  • + + component + + + (Component) + + + + — +
    +

    A component created from any component manager

    +
    + +
  • + +
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + + — +
    +

    true if component is added, false if it already is attached

    +
    + +
  • + +
+ +
+ + + + +
+
+
+
+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
+
+
+ +
+

+ + #componentsHash + + + + + +

+
+ +

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.

+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Hash) + + + +
  • + +
+ +
+ + + + +
+
+
+
+24
+25
+26
+
+
# File 'entity_manager.rb', line 24
+
+def components
+  @components ||= {}
+end
+
+
+ +
+

+ + #deleteBoolean + + + + + +

+
+ +

Removes this Entity from the list and purges all references to this Entity from other Components, as well as its ID and data.

+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + + — +
    +

    true.

    +
    + +
  • + +
+ +
+ + + + +
+
+
+
+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

+ + +
+
+
+

Parameters:

+
    + +
  • + + component + + + (Component) + + + + — +
    +

    A component created from any component manager

    +
    + +
  • + +
+ +

Returns:

+
    + +
  • + + + (Boolean) + + + + — +
    +

    true if component is removed, false if it wasnt attached to component

    +
    + +
  • + +
+ +
+ + + + +
+
+
+
+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_iInteger + + + + + +

+
+ +

An alias for the ID reader

+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (Integer) + + + +
  • + +
+ +
+ + + + +
+
+
+
+30
+31
+32
+
+
# File 'entity_manager.rb', line 30
+
+def to_i
+  id
+end
+
+
+ +
+

+ + #to_jsonString + + + + + +

+
+ +

Export all data into a JSON String which can then be saved into a file TODO: This function is not yet complete

+ + +
+
+
+ +

Returns:

+
    + +
  • + + + (String) + + + + — +
    +

    A JSON formatted String

    +
    + +
  • + +
+ +
+ + + + +
+
+
+
+83
+84
+
+
# File 'entity_manager.rb', line 83
+
+def to_json
+end
+
+
+ +
+ +
+ + + +
+ + \ No newline at end of file -- cgit v1.2.3