class Baku::World

Attributes

delta_ms[R]
entity_manager[R]

Public Class Methods

blackboard() click to toggle source
# File lib/baku/world.rb, line 16
def self.blackboard
  @@blackboard
end
new() click to toggle source
# File lib/baku/world.rb, line 7
def initialize
  # TODO: there's currently no way to interleave update and draw systems.
  # Is this something we'll eventually need?
  @update_systems = []
  @draw_systems = []

  @entity_manager = EntityManager.new
end

Public Instance Methods

add_system(system) click to toggle source
# File lib/baku/world.rb, line 27
def add_system(system)
  system_list = 
    if system.game_loop_step == :update
      @update_systems
    elsif system.game_loop_step == :draw
      @draw_systems
    end

  if system_list.map(&:class).include?(system.class)
    raise StandardError.new("Already added #{system.class} system to world.")
  end

  system.register_world(self)
  
  system_list << system
end
create_entity(tags = []) click to toggle source
# File lib/baku/world.rb, line 44
def create_entity(tags = [])
  entity = Entity.new(tags)
  @entity_manager.add_entity(entity)
  entity
end
destroy_entity(entity) click to toggle source
# File lib/baku/world.rb, line 50
def destroy_entity(entity)
  @entity_manager.remove_entity(entity)
end
dispose() click to toggle source
# File lib/baku/world.rb, line 20
def dispose
  @update_systems.clear
  @draw_systems.clear
  @entity_manager.dispose
  @@blackboard.clear
end
draw() click to toggle source
# File lib/baku/world.rb, line 59
def draw
  @draw_systems.each(&:execute)
end
update(delta_ms) click to toggle source
# File lib/baku/world.rb, line 54
def update(delta_ms)
  @delta_ms = delta_ms
  @update_systems.each(&:execute)
end