Sha256: 833aec3a2662458bccf4184070c2113bcfbc380df93be5954c0e13d584f76682

Contents?: true

Size: 1.73 KB

Versions: 11

Compression:

Stored size: 1.73 KB

Contents

module Fidgit
  # A modal dialog.
  # @abstract
  class DialogState < GuiState
    DEFAULT_BACKGROUND_COLOR = Gosu::Color.rgb(75, 75, 75)
    DEFAULT_BORDER_COLOR = Gosu::Color.rgb(255, 255, 255)

    DEFAULT_SHADOW_COLOR = Gosu::Color.rgba(0, 0, 0, 100)
    DEFAULT_SHADOW_OFFSET = 8

    def initialize(options = {})
      # @option options [Gosu::Color] :shadow_color (transparent black) Color of the shadow.
      # @option options [Gosu::Color] :shadow_offset (8) Distance shadow is offset to bottom and left.
      # @option options [Gosu::Color] :shadow_full (false) Shadow fills whole screen. Ignores :shadow_offset option if true.
      options = {
        shadow_color: DEFAULT_SHADOW_COLOR,
        shadow_offset: DEFAULT_SHADOW_OFFSET,
        shadow_full: false,
      }.merge! options

      @shadow_color = options[:shadow_color].dup
      @shadow_offset = options[:shadow_offset]
      @shadow_full = options[:shadow_full]

      super()
    end

    def draw
      $window.game_state_manager.previous_game_state.draw # Keep the underlying state being shown.
      $window.flush

      if @shadow_full
        draw_rect 0, 0, $window.width, $window.height, -Float::INFINITY, @shadow_color
      elsif @shadow_offset > 0
        dialog = container[0]
        draw_rect dialog.x + @shadow_offset, dialog.y + @shadow_offset, dialog.width, dialog.height, -Float::INFINITY, @shadow_color
      end

      super
    end

    def show
      $window.game_state_manager.push(self, finalize: false) unless $window.game_state_manager.game_states.include? self
      nil
    end

    def hide
      $window.game_state_manager.pop(setup: false) if $window.game_state_manager.current == self
      nil
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
fidgit-0.2.4 lib/fidgit/states/dialog_state.rb
fidgit-0.2.3 lib/fidgit/states/dialog_state.rb
fidgit-0.2.2 lib/fidgit/states/dialog_state.rb
fidgit-0.2.1 lib/fidgit/states/dialog_state.rb
fidgit-0.2.0 lib/fidgit/states/dialog_state.rb
fidgit-0.1.10 lib/fidgit/states/dialog_state.rb
fidgit-0.1.9 lib/fidgit/states/dialog_state.rb
fidgit-0.1.8 lib/fidgit/states/dialog_state.rb
fidgit-0.1.7 lib/fidgit/states/dialog_state.rb
fidgit-0.1.6 lib/fidgit/states/dialog_state.rb
fidgit-0.1.5 lib/fidgit/states/dialog_state.rb