diff --git a/lib/cyberarm_engine.rb b/lib/cyberarm_engine.rb index 179e12a..4a94d96 100644 --- a/lib/cyberarm_engine.rb +++ b/lib/cyberarm_engine.rb @@ -67,6 +67,7 @@ require_relative "cyberarm_engine/ui/elements/menu_item" require_relative "cyberarm_engine/game_state" require_relative "cyberarm_engine/ui/gui_state" +require_relative "cyberarm_engine/ui/dialog" require_relative "cyberarm_engine/ui/page" require_relative "cyberarm_engine/builtin/intro_state" diff --git a/lib/cyberarm_engine/ui/dialog.rb b/lib/cyberarm_engine/ui/dialog.rb new file mode 100644 index 0000000..594117b --- /dev/null +++ b/lib/cyberarm_engine/ui/dialog.rb @@ -0,0 +1,24 @@ +module CyberarmEngine + class Dialog < CyberarmEngine::GuiState + def draw + previous_state&.draw + + Gosu.flush + + super + end + + def update + super + + return unless window.current_state == self + + window.states.reverse.each do |state| + # Don't update ourselves, forever + next if state == self && state.is_a?(CyberarmEngine::GuiState) + + state.update + end + end + end +end diff --git a/lib/cyberarm_engine/ui/dsl.rb b/lib/cyberarm_engine/ui/dsl.rb index bc3b129..4733c17 100644 --- a/lib/cyberarm_engine/ui/dsl.rb +++ b/lib/cyberarm_engine/ui/dsl.rb @@ -120,6 +120,10 @@ module CyberarmEngine element_parent.root.gui_state.current_page end + def dialog(klass, options = {}) + element_parent.root.gui_state.window.push_state(klass, options) + end + def background(color = Gosu::Color::NONE) element_parent.style.background = color end