diff --git a/lib/cyberarm_engine/game_state.rb b/lib/cyberarm_engine/game_state.rb index 5e32fa1..493b93c 100644 --- a/lib/cyberarm_engine/game_state.rb +++ b/lib/cyberarm_engine/game_state.rb @@ -3,11 +3,12 @@ module CyberarmEngine include Common attr_accessor :options, :global_pause - attr_reader :game_objects + attr_reader :game_objects, :timers def initialize(options = {}) @options = options @game_objects = [] + @timers = [] @global_pause = false window.text_input = nil unless options[:preserve_text_input] @@ -28,6 +29,8 @@ module CyberarmEngine def update @game_objects.each(&:update) + @timers.each(&:update) + @timers.delete_if(&:dead?) end def needs_redraw? @@ -120,5 +123,9 @@ module CyberarmEngine def add_game_object(object) @game_objects << object end + + def add_timer(timer) + @timers << timer + end end end diff --git a/lib/cyberarm_engine/timer.rb b/lib/cyberarm_engine/timer.rb index ec153c5..587e517 100644 --- a/lib/cyberarm_engine/timer.rb +++ b/lib/cyberarm_engine/timer.rb @@ -19,5 +19,9 @@ module CyberarmEngine @block.call if @block end end + + def dead? + @triggered && !@looping + end end end diff --git a/lib/cyberarm_engine/ui/dsl.rb b/lib/cyberarm_engine/ui/dsl.rb index 8d2b1ba..4b86c2d 100644 --- a/lib/cyberarm_engine/ui/dsl.rb +++ b/lib/cyberarm_engine/ui/dsl.rb @@ -1,5 +1,17 @@ module CyberarmEngine module DSL + def every(milliseconds, &block) + element_parent.gui_state.add_timer( + CyberarmEngine::Timer.new(milliseconds, true, &block) + ) + end + + def after(milliseconds, &block) + element_parent.gui_state.add_timer( + CyberarmEngine::Timer.new(milliseconds, false, &block) + ) + end + def flow(options = {}, &block) container(CyberarmEngine::Element::Flow, options, &block) end diff --git a/lib/cyberarm_engine/ui/gui_state.rb b/lib/cyberarm_engine/ui/gui_state.rb index a84f715..6d61d4b 100644 --- a/lib/cyberarm_engine/ui/gui_state.rb +++ b/lib/cyberarm_engine/ui/gui_state.rb @@ -6,6 +6,7 @@ module CyberarmEngine def initialize(options = {}) @options = options @game_objects = [] + @timers = [] @global_pause = false @down_keys = {}