require 'robot' class OOBaseBot include Robot def init end def schedule range, *params @scheduler << [(range.first + time)..(range.last + time), params] end def tick events if time == 0 @scheduler = [] init end events.each do |name, v| method = ('on_' + name).intern v.each{|p| send(method, *p)} if respond_to?(method) end @scheduler.each{|s| send(*s[1]) if s[0] === time} end end class OOSittingDuck < OOBaseBot def init turn_radar 5 schedule 0..1E10, :turn_gun, 10 end def on_robot_scanned distance fire 3 end def on_got_hit life schedule 0..20, :accelerate, 1 schedule 21..28, :stop end end