Class: BTetrisKp::MenuState

Inherits:
Object
  • Object
show all
Defined in:
lib/btetris_kp/menu.rb

Overview

class representing main menu window state

Instance Method Summary collapse

Constructor Details

#initialize(window) ⇒ MenuState

Returns a new instance of MenuState.



11
12
13
14
15
16
17
# File 'lib/btetris_kp/menu.rb', line 11

def initialize(window)
  @window = window
  @font = Gosu::Font.new(@window, Gosu.default_font_name, Const::FONT_SMALL_SIZE)
  initialize_title_image
  generate_back_board
  generate_menu
end

Instance Method Details

#button_down(id) ⇒ Object

button handler



69
70
71
72
73
74
75
76
# File 'lib/btetris_kp/menu.rb', line 69

def button_down(id)
  case id
  when Gosu::KbEscape
    @window.close
  when Gosu::MsLeft then
    @items.each { |i| i.clicked }
  end
end

#drawObject

draws menu



62
63
64
65
66
# File 'lib/btetris_kp/menu.rb', line 62

def draw
  @board.draw
  @items.each { |i| i.draw }
  @title_image.draw(@img_x, @img_y, 1, @img_size_factor, @img_size_factor)
end

#generate_back_boardObject

generates background board



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/btetris_kp/menu.rb', line 28

def generate_back_board
  @board = Board.new(@window, @window.width / 3, 40)
  nice_board = Array.new(Const::PNR_VER) { Array.new(Const::PNR_HOR, 0) }
  nice_board.each_with_index do |row, x|
    if x > Const::PNR_VER / 2
      row.each_with_index do |val, y|
        nice_board[x][y] = rand(Const::TILE_COLORS_NR + 1)
      end
    end
  end
  @board.board = nice_board
end

#generate_menuObject

generates menu, menu items and callback procedures for menu items



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/btetris_kp/menu.rb', line 42

def generate_menu
  @items = []
  @x = @window.width / 3 + Const::FONT_SMALL_SIZE
  @y = @title_image.height * @img_size_factor + Const::GAME_WIN_GAP
  n_g = proc { @window.state = GameState.new(@window, @window.width / 3, 40) }
  cr_n = proc { @window.state = NetSetupState.new(@window) }
  j_n = proc { @window.state = NetJoinState.new(@window) }
  exit = proc { @window.close }
  @items << MenuItem.new(@window, Const::MENU_NEW, 0, n_g, @font, @x, @y)
  @items << MenuItem.new(@window, Const::MENU_CREATE, 1, cr_n, @font, @x, @y)
  @items << MenuItem.new(@window, Const::MENU_JOIN, 2, j_n, @font, @x, @y)
  @items << MenuItem.new(@window, Const::MENU_QUIT, 3, exit, @font, @x, @y)
end

#initialize_title_imageObject

loads title image and calculates position, size variables



20
21
22
23
24
25
# File 'lib/btetris_kp/menu.rb', line 20

def initialize_title_image
  @title_image = Gosu::Image.new(@window, Const::PATH_IMAGE_TITLE, false)
  @img_size_factor = (@window.width - Const::GAME_WIN_GAP).to_f / @title_image.width
  @img_x = (@window.width - @title_image.width * @img_size_factor) / 2
  @img_y = 20
end

#needs_cursor?Boolean

shows default system cursor

Returns:

  • (Boolean)


79
80
81
# File 'lib/btetris_kp/menu.rb', line 79

def needs_cursor?
  true
end

#updateObject

updates menu



57
58
59
# File 'lib/btetris_kp/menu.rb', line 57

def update
  @items.each { |i| i.update }
end