From 788d987da1f8bee4a506ae6f2ae59039039b7a29 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Thu, 12 Sep 2019 08:14:47 -0500 Subject: [PATCH] Elements now return :handled when they're supposed to, GameState initialization and setup are now seperated --- lib/cyberarm_engine/common.rb | 26 +++++++++---------- lib/cyberarm_engine/engine.rb | 6 ++++- lib/cyberarm_engine/game_object.rb | 2 +- lib/cyberarm_engine/game_state.rb | 2 -- lib/cyberarm_engine/ui/elements/button.rb | 12 +++++++++ lib/cyberarm_engine/ui/elements/edit_line.rb | 8 ++++++ lib/cyberarm_engine/ui/elements/image.rb | 2 ++ lib/cyberarm_engine/ui/elements/label.rb | 2 ++ .../ui/elements/toggle_button.rb | 2 ++ lib/cyberarm_engine/ui/gui_state.rb | 2 -- 10 files changed, 45 insertions(+), 19 deletions(-) diff --git a/lib/cyberarm_engine/common.rb b/lib/cyberarm_engine/common.rb index cd8324f..f100c7c 100644 --- a/lib/cyberarm_engine/common.rb +++ b/lib/cyberarm_engine/common.rb @@ -1,50 +1,50 @@ module CyberarmEngine module Common def push_state(klass, options={}) - $window.push_state(klass, options) + window.push_state(klass, options) end def current_state - $window.current_state + window.current_state end def previous_state - $window.previous_state + window.previous_state end def pop_state - $window.pop_state + window.pop_state end def show_cursor - $window.show_cursor + window.show_cursor end def show_cursor=boolean - $window.show_cursor = boolean + window.show_cursor = boolean end def draw_rect(x, y, width, height, color, z = 0) - $window.draw_rect(x,y,width,height,color,z) + Gosu.draw_rect(x, y, width, height, color, z) end def fill(color, z = 0) - draw_rect(0, 0, $window.width, $window.height, color, z) + draw_rect(0, 0, window.width, window.height, color, z) end def lighten(color, amount = 25) if defined?(color.alpha) - return Gosu::Color.rgba(color.red+amount, color.green+amount, color.blue+amount, color.alpha) + return Gosu::Color.rgba(color.red + amount, color.green + amount, color.blue + amount, color.alpha) else - return Gosu::Color.rgb(color.red+amount, color.green+amount, color.blue+amount) + return Gosu::Color.rgb(color.red + amount, color.green + amount, color.blue + amount) end end def darken(color, amount = 25) if defined?(color.alpha) - return Gosu::Color.rgba(color.red-amount, color.green-amount, color.blue-amount, color.alpha) + return Gosu::Color.rgba(color.red - amount, color.green - amount, color.blue - amount, color.alpha) else - return Gosu::Color.rgb(color.red-amount, color.green-amount, color.blue-amount) + return Gosu::Color.rgb(color.red - amount, color.green - amount, color.blue - amount) end end @@ -88,4 +88,4 @@ module CyberarmEngine $window end end -end \ No newline at end of file +end diff --git a/lib/cyberarm_engine/engine.rb b/lib/cyberarm_engine/engine.rb index dbe2c62..a3e5a1c 100644 --- a/lib/cyberarm_engine/engine.rb +++ b/lib/cyberarm_engine/engine.rb @@ -58,11 +58,15 @@ module CyberarmEngine end def push_state(klass, options={}) + options = {setup: true}.merge(options) + if klass.instance_of?(klass.class) && defined?(klass.options) @states << klass + klass.setup if options[:setup] else @states << klass.new(options) if child_of?(klass, GameState) @states << klass.new if child_of?(klass, Element::Container) + current_state.setup if current_state.class == klass && options[:setup] end end @@ -94,4 +98,4 @@ module CyberarmEngine end end end -end \ No newline at end of file +end diff --git a/lib/cyberarm_engine/game_object.rb b/lib/cyberarm_engine/game_object.rb index 4a04e49..26e1cf1 100644 --- a/lib/cyberarm_engine/game_object.rb +++ b/lib/cyberarm_engine/game_object.rb @@ -155,7 +155,7 @@ module CyberarmEngine def button_up(id) end - def button_down?(id) + def button_down(id) end def find_closest(game_object_class) diff --git a/lib/cyberarm_engine/game_state.rb b/lib/cyberarm_engine/game_state.rb index 09d3500..044316a 100644 --- a/lib/cyberarm_engine/game_state.rb +++ b/lib/cyberarm_engine/game_state.rb @@ -12,8 +12,6 @@ module CyberarmEngine $window.text_input = nil unless options[:preserve_text_input] @down_keys = {} - - setup end def setup diff --git a/lib/cyberarm_engine/ui/elements/button.rb b/lib/cyberarm_engine/ui/elements/button.rb index dd6f1bc..a36ce1b 100644 --- a/lib/cyberarm_engine/ui/elements/button.rb +++ b/lib/cyberarm_engine/ui/elements/button.rb @@ -25,6 +25,8 @@ module CyberarmEngine @style.background_canvas.background = default(:hover, :background) @text.color = default(:hover, :color) end + + return :handled end def left_mouse_button(sender, x, y) @@ -32,23 +34,33 @@ module CyberarmEngine @style.background_canvas.background = default(:active, :background) window.current_state.focus = self @text.color = default(:active, :color) + + return :handled end def released_left_mouse_button(sender,x, y) enter(sender) + + return :handled end def clicked_left_mouse_button(sender, x, y) @block.call(self) if @block + + return :handled end def leave(sender) @style.background_canvas.background = default(:background) @text.color = default(:color) + + return :handled end def blur(sender) @focus = false + + return :handled end end end diff --git a/lib/cyberarm_engine/ui/elements/edit_line.rb b/lib/cyberarm_engine/ui/elements/edit_line.rb index 98deece..271bb7a 100644 --- a/lib/cyberarm_engine/ui/elements/edit_line.rb +++ b/lib/cyberarm_engine/ui/elements/edit_line.rb @@ -46,6 +46,8 @@ module CyberarmEngine @caret_last_interval = Gosu.milliseconds @show_caret = true + + return :handled end def enter(sender) @@ -56,12 +58,16 @@ module CyberarmEngine @style.background_canvas.background = default(:hover, :background) @text.color = default(:hover, :color) end + + return :handled end def leave(sender) unless @focus super end + + return :handled end def blur(sender) @@ -69,6 +75,8 @@ module CyberarmEngine @style.background_canvas.background = default(:background) @text.color = default(:color) window.text_input = nil + + return :handled end # TODO: Fix caret rendering in wrong position unless caret_pos is at end of text diff --git a/lib/cyberarm_engine/ui/elements/image.rb b/lib/cyberarm_engine/ui/elements/image.rb index 43d2378..fc48021 100644 --- a/lib/cyberarm_engine/ui/elements/image.rb +++ b/lib/cyberarm_engine/ui/elements/image.rb @@ -19,6 +19,8 @@ module CyberarmEngine def clicked_left_mouse_button(sender, x, y) @block.call(self) if @block + + return :handled end def recalculate diff --git a/lib/cyberarm_engine/ui/elements/label.rb b/lib/cyberarm_engine/ui/elements/label.rb index 2f43202..60256bb 100644 --- a/lib/cyberarm_engine/ui/elements/label.rb +++ b/lib/cyberarm_engine/ui/elements/label.rb @@ -13,6 +13,8 @@ module CyberarmEngine def clicked_left_mouse_button(sender, x, y) @block.call(self) if @block + + return :handled end def recalculate diff --git a/lib/cyberarm_engine/ui/elements/toggle_button.rb b/lib/cyberarm_engine/ui/elements/toggle_button.rb index e9e3cde..c6c9170 100644 --- a/lib/cyberarm_engine/ui/elements/toggle_button.rb +++ b/lib/cyberarm_engine/ui/elements/toggle_button.rb @@ -24,6 +24,8 @@ module CyberarmEngine toggle @block.call(self) if @block + + return :handled end def toggle diff --git a/lib/cyberarm_engine/ui/gui_state.rb b/lib/cyberarm_engine/ui/gui_state.rb index f98d608..f403a3e 100644 --- a/lib/cyberarm_engine/ui/gui_state.rb +++ b/lib/cyberarm_engine/ui/gui_state.rb @@ -22,8 +22,6 @@ module CyberarmEngine @mouse_down_on = {} @mouse_down_position = {} @pending_recalculate_request = false - - setup end # throws :blur event to focused element and sets GuiState focused element