glimmer-dsl-swt 4.18.3.0 → 4.18.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -38,31 +38,32 @@ class Tetris
38
38
  Z: :red,
39
39
  }
40
40
 
41
- attr_reader :letter, :preview
41
+ attr_reader :game, :letter, :preview
42
42
  alias preview? preview
43
43
  attr_accessor :orientation, :blocks, :row, :column
44
44
 
45
- def initialize
45
+ def initialize(game)
46
+ @game = game
46
47
  @letter = LETTER_COLORS.keys.sample
47
48
  @orientation = :north
48
49
  @blocks = default_blocks
49
50
  @preview = true
50
51
  new_row = 0
51
- new_column = (PREVIEW_PLAYFIELD_WIDTH - width)/2
52
+ new_column = (Model::Game::PREVIEW_PLAYFIELD_WIDTH - width)/2
52
53
  update_playfield(new_row, new_column)
53
54
  end
54
55
 
55
56
  def playfield
56
- @preview ? Game.preview_playfield : Game.playfield
57
+ @preview ? game.preview_playfield : game.playfield
57
58
  end
58
59
 
59
60
  def launch!
60
61
  remove_from_playfield
61
62
  @preview = false
62
63
  new_row = 1 - height
63
- new_column = (PLAYFIELD_WIDTH - width)/2
64
+ new_column = (game.playfield_width - width)/2
64
65
  update_playfield(new_row, new_column)
65
- Game.tetrominoes << self
66
+ game.tetrominoes << self
66
67
  end
67
68
 
68
69
  def update_playfield(new_row = nil, new_column = nil)
@@ -89,16 +90,16 @@ class Tetris
89
90
 
90
91
  def stopped?
91
92
  return true if @stopped || @preview
92
- playfield_remaining_heights = Game.playfield_remaining_heights(self)
93
+ playfield_remaining_heights = game.playfield_remaining_heights(self)
93
94
  result = bottom_most_blocks.any? do |bottom_most_block|
94
95
  playfield_column = @column + bottom_most_block[:column_index]
95
96
  playfield_remaining_heights[playfield_column] &&
96
97
  @row + bottom_most_block[:row] >= playfield_remaining_heights[playfield_column] - 1
97
98
  end
98
- if result && !Game.hypothetical?
99
+ if result && !game.hypothetical?
99
100
  @stopped = result
100
- Game.consider_eliminating_lines
101
- Model::Game.consider_adding_tetromino
101
+ game.consider_eliminating_lines
102
+ @game.consider_adding_tetromino
102
103
  end
103
104
  result
104
105
  end
@@ -124,9 +125,10 @@ class Tetris
124
125
  end
125
126
 
126
127
  def right_blocked?
127
- (@column == PLAYFIELD_WIDTH - width) ||
128
+ (@column == game.playfield_width - width) ||
128
129
  right_most_blocks.any? { |right_most_block|
129
- playfield[@row + right_most_block[:row_index]][@column + right_most_block[:column_index] + 1].occupied?
130
+ (@row + right_most_block[:row_index]) >= 0 &&
131
+ playfield[@row + right_most_block[:row_index]][@column + right_most_block[:column_index] + 1].occupied?
130
132
  }
131
133
  end
132
134
 
@@ -150,7 +152,8 @@ class Tetris
150
152
  def left_blocked?
151
153
  (@column == 0) ||
152
154
  left_most_blocks.any? { |left_most_block|
153
- playfield[@row + left_most_block[:row_index]][@column + left_most_block[:column_index] - 1].occupied?
155
+ (@row + left_most_block[:row_index]) >= 0 &&
156
+ playfield[@row + left_most_block[:row_index]][@column + left_most_block[:column_index] - 1].occupied?
154
157
  }
155
158
  end
156
159
 
@@ -179,7 +182,7 @@ class Tetris
179
182
  @blocks.size
180
183
  end
181
184
 
182
- def down
185
+ def down!
183
186
  launch! if preview?
184
187
  unless stopped?
185
188
  new_row = @row + 1
@@ -187,14 +190,14 @@ class Tetris
187
190
  end
188
191
  end
189
192
 
190
- def left
193
+ def left!
191
194
  unless left_blocked?
192
195
  new_column = @column - 1
193
196
  update_playfield(@row, new_column)
194
197
  end
195
198
  end
196
199
 
197
- def right
200
+ def right!
198
201
  unless right_blocked?
199
202
  new_column = @column + 1
200
203
  update_playfield(@row, new_column)
@@ -202,11 +205,11 @@ class Tetris
202
205
  end
203
206
 
204
207
  # Rotate in specified direcation, which can be :right (clockwise) or :left (counterclockwise)
205
- def rotate(direction)
208
+ def rotate!(direction)
206
209
  return if stopped?
207
210
  can_rotate = nil
208
211
  new_blocks = nil
209
- Game.hypothetical do
212
+ game.hypothetical do
210
213
  hypothetical_rotated_tetromino = hypothetical_tetromino
211
214
  new_blocks = hypothetical_rotated_tetromino.rotate_blocks(direction)
212
215
  can_rotate = !hypothetical_rotated_tetromino.stopped? && !hypothetical_rotated_tetromino.right_blocked? && !hypothetical_rotated_tetromino.left_blocked?
@@ -222,13 +225,13 @@ class Tetris
222
225
  end
223
226
 
224
227
  def rotate_blocks(direction)
225
- new_blocks = Matrix[*@blocks].transpose.to_a
226
- if direction == :right
227
- new_blocks = new_blocks.map(&:reverse)
228
- else
229
- new_blocks = new_blocks.reverse
230
- end
231
- Matrix[*new_blocks].to_a
228
+ new_blocks = Matrix[*@blocks].transpose.to_a
229
+ if direction == :right
230
+ new_blocks = new_blocks.map(&:reverse)
231
+ else
232
+ new_blocks = new_blocks.reverse
233
+ end
234
+ Matrix[*new_blocks].to_a
232
235
  end
233
236
 
234
237
  def hypothetical_tetromino
@@ -19,12 +19,20 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+ require_relative 'tetris_menu_bar'
23
+
22
24
  class Tetris
23
25
  module View
24
26
  class GameOverDialog
25
27
  include Glimmer::UI::CustomShell
26
28
 
27
- options :parent_shell
29
+ options :parent_shell, :game
30
+
31
+ after_body {
32
+ observe(game, :game_over) do |game_over|
33
+ hide if !game_over
34
+ end
35
+ }
28
36
 
29
37
  body {
30
38
  dialog(parent_shell) {
@@ -34,6 +42,8 @@ class Tetris
34
42
  }
35
43
  text 'Tetris'
36
44
 
45
+ tetris_menu_bar(game: game)
46
+
37
47
  label(:center) {
38
48
  text 'Game Over!'
39
49
  font name: 'Menlo', height: 30, style: :bold
@@ -43,30 +53,16 @@ class Tetris
43
53
  text 'Play Again?'
44
54
 
45
55
  on_widget_selected {
46
- Model::Game.restart
47
-
48
- body_root.close
56
+ hide
57
+ game.restart!
49
58
  }
50
59
  }
51
60
 
52
61
  on_shell_activated {
53
- Model::Game.game_over = true
54
62
  display.beep
55
63
  }
56
-
57
- on_shell_closed {
58
- exit_game
59
- }
60
-
61
- on_key_pressed { |event|
62
- exit_game if event.keyCode == swt(:cr)
63
- }
64
64
  }
65
65
  }
66
-
67
- def exit_game
68
- display.dispose if Model::Game.game_over?
69
- end
70
66
  end
71
67
  end
72
68
  end
@@ -27,7 +27,7 @@ class Tetris
27
27
  class ScoreLane
28
28
  include Glimmer::UI::CustomWidget
29
29
 
30
- options :block_size
30
+ options :block_size, :game
31
31
 
32
32
  before_body {
33
33
  @font_name = 'Menlo'
@@ -48,14 +48,14 @@ class Tetris
48
48
  text 'Next'
49
49
  font name: @font_name, height: @font_height, style: :bold
50
50
  }
51
- playfield(game_playfield: Model::Game.preview_playfield, playfield_width: PREVIEW_PLAYFIELD_WIDTH, playfield_height: PREVIEW_PLAYFIELD_HEIGHT, block_size: BLOCK_SIZE)
51
+ playfield(game_playfield: game.preview_playfield, playfield_width: Model::Game::PREVIEW_PLAYFIELD_WIDTH, playfield_height: Model::Game::PREVIEW_PLAYFIELD_HEIGHT, block_size: block_size)
52
52
 
53
53
  label(:center) {
54
54
  text 'Score'
55
55
  font name: @font_name, height: @font_height, style: :bold
56
56
  }
57
57
  label(:center) {
58
- text bind(Model::Game, :score)
58
+ text bind(game, :score)
59
59
  font height: @font_height
60
60
  }
61
61
 
@@ -66,7 +66,7 @@ class Tetris
66
66
  font name: @font_name, height: @font_height, style: :bold
67
67
  }
68
68
  label(:center) {
69
- text bind(Model::Game, :lines)
69
+ text bind(game, :lines)
70
70
  font height: @font_height
71
71
  }
72
72
 
@@ -77,7 +77,7 @@ class Tetris
77
77
  font name: @font_name, height: @font_height, style: :bold
78
78
  }
79
79
  label(:center) {
80
- text bind(Model::Game, :level)
80
+ text bind(game, :level)
81
81
  font height: @font_height
82
82
  }
83
83
  }
@@ -0,0 +1,72 @@
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ class Tetris
23
+ module View
24
+ class TetrisMenuBar
25
+ include Glimmer::UI::CustomWidget
26
+
27
+ options :game
28
+
29
+ body {
30
+ menu_bar {
31
+ menu {
32
+ text '&Game'
33
+
34
+ menu_item {
35
+ text '&Start'
36
+ enabled bind(game, :game_over)
37
+ accelerator :command, :s
38
+
39
+ on_widget_selected {
40
+ game.start!
41
+ }
42
+ }
43
+ menu_item(:check) {
44
+ text '&Pause'
45
+ accelerator :command, :p
46
+ enabled bind(game, :game_over, on_read: :!)
47
+ selection bind(game, :paused)
48
+ }
49
+ menu_item {
50
+ text '&Restart'
51
+ accelerator :command, :r
52
+ enabled bind(game, :game_over, on_read: :!)
53
+
54
+ on_widget_selected {
55
+ game.restart!
56
+ }
57
+ }
58
+ menu_item(:separator)
59
+ menu_item {
60
+ text '&Exit'
61
+ accelerator :command, :x
62
+
63
+ on_widget_selected {
64
+ parent_proxy.close
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ end
71
+ end
72
+ end
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2007-2021 Andy Maleh
2
- #
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -28,7 +28,7 @@ class TicTacToe
28
28
  @tic_tac_toe_board = Board.new
29
29
  @shell = shell {
30
30
  text "Tic-Tac-Toe"
31
- minimum_size 150, 178
31
+ minimum_size 176, 200
32
32
  composite {
33
33
  grid_layout 3, true
34
34
  (1..3).each { |row|
@@ -6,7 +6,7 @@ shell {
6
6
  text 'Hello, Canvas Transform!'
7
7
  minimum_size 330, 352
8
8
 
9
- canvas { |canvas_proxy|
9
+ canvas {
10
10
  background :white
11
11
 
12
12
  image(glimmer_logo, 0, 0) {
@@ -49,7 +49,7 @@ shell { |main_shell|
49
49
  }
50
50
  on_mouse_up { |mouse_event|
51
51
  unless @selected_link.nil?
52
- @help_shell.close unless @help_shell.nil? || @help_shell.is_disposed
52
+ @help_shell.close unless @help_shell.nil? || @help_shell.disposed?
53
53
  @help_shell = shell(:no_trim) {
54
54
  grid_layout {
55
55
  margin_width 10
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.18.3.0
4
+ version: 4.18.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-26 00:00:00.000000000 Z
11
+ date: 2021-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 1.0.9
18
+ version: 1.0.11
19
19
  name: glimmer
20
20
  type: :runtime
21
21
  prerelease: false
@@ -23,7 +23,7 @@ dependencies:
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.9
26
+ version: 1.0.11
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
@@ -476,6 +476,7 @@ files:
476
476
  - samples/elaborate/tetris/view/game_over_dialog.rb
477
477
  - samples/elaborate/tetris/view/playfield.rb
478
478
  - samples/elaborate/tetris/view/score_lane.rb
479
+ - samples/elaborate/tetris/view/tetris_menu_bar.rb
479
480
  - samples/elaborate/tic_tac_toe.rb
480
481
  - samples/elaborate/tic_tac_toe/board.rb
481
482
  - samples/elaborate/tic_tac_toe/cell.rb