Class: Draco::World
- Inherits:
-
Object
- Object
- Draco::World
- Defined in:
- lib/draco.rb
Overview
Public: The container for current Entities and Systems.
Defined Under Namespace
Classes: EntityStore
Class Attribute Summary collapse
-
.default_entities ⇒ Object
readonly
Internal: Returns the default Entities for the class.
-
.default_systems ⇒ Object
readonly
Internal: Returns the default Systems for the class.
Instance Attribute Summary collapse
-
#entities ⇒ Object
readonly
Public: Returns the Array of Entities.
-
#systems ⇒ Object
readonly
Public: Returns the Array of Systems.
Class Method Summary collapse
-
.entity(entity, defaults = {}) ⇒ Object
Public: Adds a default Entity to the World.
-
.inherited(sub) ⇒ Object
Internal: Resets the default components for each class that inherites Entity.
-
.systems(*systems) ⇒ Object
Public: Adds default Systems to the World.
Instance Method Summary collapse
-
#after_initialize ⇒ Object
Public: Callback run after the world is initialized.
-
#after_tick(context, results) ⇒ Object
Public: Callback run after #tick is called.
-
#before_tick(_context) ⇒ Object
Public: Callback run before #tick is called.
-
#component_added(entity, component) ⇒ Object
Public: Callback to run when a component is added to an existing Entity.
-
#component_removed(entity, component) ⇒ Object
Public: Callback to run when a component is added to an existing Entity.
-
#filter(*components) ⇒ Object
Public: Finds all Entities that contain all of the given Components.
-
#initialize(entities: [], systems: []) ⇒ World
constructor
Public: Initializes a World.
-
#inspect ⇒ Object
Public: Returns a String representation of the World.
-
#serialize ⇒ Object
Public: Serializes the World to save the current state.
-
#tick(context) ⇒ Object
Public: Runs all of the Systems every tick.
-
#to_s ⇒ Object
Public: Returns a String representation of the World.
Constructor Details
#initialize(entities: [], systems: []) ⇒ World
Public: Initializes a World.
entities - The Array of Entities for the World (default: []). systems - The Array of System Classes for the World (default: []).
585 586 587 588 589 590 591 592 593 594 595 596 597 598 |
# File 'lib/draco.rb', line 585 def initialize(entities: [], systems: []) default_entities = self.class.default_entities.map do |default| klass, attributes = default name = attributes[:as] entity = klass.new(attributes) instance_variable_set("@#{name}", entity) if name entity end @entities = EntityStore.new(self, default_entities + entities) @systems = self.class.default_systems + systems after_initialize end |
Class Attribute Details
.default_entities ⇒ Object (readonly)
Internal: Returns the default Entities for the class.
569 570 571 |
# File 'lib/draco.rb', line 569 def default_entities @default_entities end |
.default_systems ⇒ Object (readonly)
Internal: Returns the default Systems for the class.
572 573 574 |
# File 'lib/draco.rb', line 572 def default_systems @default_systems end |
Instance Attribute Details
#entities ⇒ Object (readonly)
Public: Returns the Array of Entities.
579 580 581 |
# File 'lib/draco.rb', line 579 def entities @entities end |
#systems ⇒ Object (readonly)
Public: Returns the Array of Systems.
576 577 578 |
# File 'lib/draco.rb', line 576 def systems @systems end |
Class Method Details
.entity(entity, defaults = {}) ⇒ Object
Public: Adds a default Entity to the World.
entity - The class of the Entity to add by default. defaults - The Hash of default values for the Entity. (default: {})
Examples
entity(Player)
entity(Player, position: { x: 0, y: 0 })
Returns nothing.
545 546 547 548 549 550 |
# File 'lib/draco.rb', line 545 def self.entity(entity, defaults = {}) name = defaults[:as] @default_entities.push([entity, defaults]) attr_reader(name.to_sym) if name end |
.inherited(sub) ⇒ Object
Internal: Resets the default components for each class that inherites Entity.
sub - The class that is inheriting Entity.
Returns nothing.
527 528 529 530 531 |
# File 'lib/draco.rb', line 527 def self.inherited(sub) super sub.instance_variable_set(:@default_entities, []) sub.instance_variable_set(:@default_systems, []) end |
.systems(*systems) ⇒ Object
Public: Adds default Systems to the World.
systems - The System or Array list of System classes to add to the World.
Examples
systems(RenderSprites)
systems(RenderSprites, RenderLabels)
Returns nothing.
563 564 565 |
# File 'lib/draco.rb', line 563 def self.systems(*systems) @default_systems += Array(systems).flatten end |
Instance Method Details
#after_initialize ⇒ Object
Public: Callback run after the world is initialized.
This is empty by default but is present to allow plugins to tie into.
Returns nothing.
605 |
# File 'lib/draco.rb', line 605 def after_initialize; end |
#after_tick(context, results) ⇒ Object
Public: Callback run after #tick is called.
This is empty by default but is present to allow plugins to tie into.
context - The context object of the current tick from the game engine. In DragonRuby this is ‘args`. results - The System instances that were run.
Returns nothing.
641 |
# File 'lib/draco.rb', line 641 def after_tick(context, results); end |
#before_tick(_context) ⇒ Object
Public: Callback run before #tick is called.
context - The context object of the current tick from the game engine. In DragonRuby this is ‘args`.
Returns the systems to run during this tick.
612 613 614 615 616 617 618 |
# File 'lib/draco.rb', line 612 def before_tick(_context) systems.map do |system| entities = filter(system.filter) system.new(entities: entities, world: self) end end |
#component_added(entity, component) ⇒ Object
Public: Callback to run when a component is added to an existing Entity.
entity - The Entity the Component was added to. component - The Component that was added to the Entity.
Returns nothing.
649 |
# File 'lib/draco.rb', line 649 def component_added(entity, component); end |
#component_removed(entity, component) ⇒ Object
Public: Callback to run when a component is added to an existing Entity.
entity - The Entity the Component was removed from. component - The Component that was removed from the Entity.
Returns nothing.
657 |
# File 'lib/draco.rb', line 657 def component_removed(entity, component); end |
#filter(*components) ⇒ Object
Public: Finds all Entities that contain all of the given Components.
components - An Array of Component classes to match.
Returns an Array of matching Entities.
664 665 666 |
# File 'lib/draco.rb', line 664 def filter(*components) entities[components.flatten] end |
#inspect ⇒ Object
Public: Returns a String representation of the World.
680 681 682 |
# File 'lib/draco.rb', line 680 def inspect serialize.to_s end |
#serialize ⇒ Object
Public: Serializes the World to save the current state.
Returns a Hash representing the World.
671 672 673 674 675 676 677 |
# File 'lib/draco.rb', line 671 def serialize { class: self.class.name.to_s, entities: @entities.map(&:serialize), systems: @systems.map { |system| system.name.to_s } } end |
#tick(context) ⇒ Object
Public: Runs all of the Systems every tick.
context - The context object of the current tick from the game engine. In DragonRuby this is ‘args`.
Returns nothing
625 626 627 628 629 630 631 |
# File 'lib/draco.rb', line 625 def tick(context) results = before_tick(context).map do |system| system.call(context) end after_tick(context, results) end |
#to_s ⇒ Object
Public: Returns a String representation of the World.
685 686 687 |
# File 'lib/draco.rb', line 685 def to_s serialize.to_s end |