Sha256: 21d84ebac04b879c04e22e216966f394ede83a2d16dd5285598066736933e1f7

Contents?: true

Size: 820 Bytes

Versions: 13

Compression:

Stored size: 820 Bytes

Contents

# "Threading"
# A hash with time => [block, block, block ...]
#
# {
#   100 => [{bla}, {blu}, {bli}],
#   1   => [{eek}]
# }
#
# When calling threading.step, eek will be executed, the others will be one step closer to zero, 99.
#
class Scheduling
  
  def initialize
    @threads = []
  end
  
  # Adds a code block at time time.
  #
  def add time = 1, proc = nil, &code
    @threads << [time, code || proc]
  end
  
  # Does two things:
  # 1. Move one step in time.
  # 2. Execute all blocks with time 0.
  #
  # FIXME - threads added while threads are handled!
  #
  def step
    @threads.collect! do |time, code|
      if time == 1
        code.call
        nil
      else
        [time-1, code]
      end
    end.compact!
  end
  
  # Call all given blocks.
  #
  def execute codes
    codes.each &:[]
  end
  
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
gosu_extensions-0.3.8 lib/core/scheduling.rb
gosu_extensions-0.3.7 lib/core/scheduling.rb
gosu_extensions-0.3.6 lib/core/scheduling.rb
gosu_extensions-0.3.5 lib/core/scheduling.rb
gosu_extensions-0.3.4 lib/core/scheduling.rb
gosu_extensions-0.3.3 lib/core/scheduling.rb
gosu_extensions-0.3.2 lib/core/scheduling.rb
gosu_extensions-0.3.1 lib/core/scheduling.rb
gosu_extensions-0.3.0 lib/core/scheduling.rb
gosu_extensions-0.2.9 lib/core/scheduling.rb
gosu_extensions-0.2.8 lib/core/scheduling.rb
gosu_extensions-0.2.7 lib/core/scheduling.rb
gosu_extensions-0.2.6 lib/core/scheduling.rb