glimmer-dsl-libui 0.2.20 → 0.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.md +360 -24
- data/VERSION +1 -1
- data/examples/area_gallery.rb +1 -1
- data/examples/area_gallery2.rb +1 -1
- data/examples/area_gallery3.rb +1 -1
- data/examples/area_gallery4.rb +1 -1
- data/examples/meta_example.rb +1 -1
- data/examples/snake/model/apple.rb +33 -0
- data/examples/snake/model/game.rb +51 -0
- data/examples/snake/model/snake.rb +95 -0
- data/examples/snake/model/vertebra.rb +22 -0
- data/examples/snake/presenter/cell.rb +27 -0
- data/examples/snake/presenter/grid.rb +47 -0
- data/examples/snake.rb +90 -0
- data/examples/tetris/model/game.rb +1 -1
- data/examples/tetris.rb +23 -3
- data/examples/tic_tac_toe/board.rb +145 -0
- data/examples/tic_tac_toe/cell.rb +48 -0
- data/examples/tic_tac_toe.rb +85 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui.rb +35 -6
- metadata +12 -2
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'glimmer-dsl-libui'
|
2
|
+
|
3
|
+
require_relative "tic_tac_toe/board"
|
4
|
+
|
5
|
+
class TicTacToe
|
6
|
+
include Glimmer
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@tic_tac_toe_board = Board.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def launch
|
13
|
+
create_gui
|
14
|
+
register_observers
|
15
|
+
@main_window.show
|
16
|
+
end
|
17
|
+
|
18
|
+
def register_observers
|
19
|
+
Glimmer::DataBinding::Observer.proc do |game_status|
|
20
|
+
display_win_message if game_status == Board::WIN
|
21
|
+
display_draw_message if game_status == Board::DRAW
|
22
|
+
end.observe(@tic_tac_toe_board, :game_status)
|
23
|
+
|
24
|
+
3.times.map do |row|
|
25
|
+
3.times.map do |column|
|
26
|
+
Glimmer::DataBinding::Observer.proc do |sign|
|
27
|
+
@cells[row][column].string = sign
|
28
|
+
end.observe(@tic_tac_toe_board[row + 1, column + 1], :sign) # board model is 1-based
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_gui
|
34
|
+
@main_window = window('Tic-Tac-Toe', 180, 180) {
|
35
|
+
resizable false
|
36
|
+
|
37
|
+
@cells = []
|
38
|
+
vertical_box {
|
39
|
+
padded false
|
40
|
+
|
41
|
+
3.times.map do |row|
|
42
|
+
@cells << []
|
43
|
+
horizontal_box {
|
44
|
+
padded false
|
45
|
+
|
46
|
+
3.times.map do |column|
|
47
|
+
area {
|
48
|
+
path {
|
49
|
+
square(0, 0, 60)
|
50
|
+
|
51
|
+
stroke :black, thickness: 2
|
52
|
+
}
|
53
|
+
text(23, 19) {
|
54
|
+
@cells[row] << string('') {
|
55
|
+
font family: 'Arial', size: OS.mac? ? 20 : 16
|
56
|
+
}
|
57
|
+
}
|
58
|
+
on_mouse_up do
|
59
|
+
@tic_tac_toe_board.mark(row + 1, column + 1) # board model is 1-based
|
60
|
+
end
|
61
|
+
}
|
62
|
+
end
|
63
|
+
}
|
64
|
+
end
|
65
|
+
}
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def display_win_message
|
70
|
+
display_game_over_message("Player #{@tic_tac_toe_board.winning_sign} has won!")
|
71
|
+
end
|
72
|
+
|
73
|
+
def display_draw_message
|
74
|
+
display_game_over_message("Draw!")
|
75
|
+
end
|
76
|
+
|
77
|
+
def display_game_over_message(message_text)
|
78
|
+
Glimmer::LibUI.queue_main do
|
79
|
+
msg_box('Game Over', message_text)
|
80
|
+
@tic_tac_toe_board.reset!
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
TicTacToe.new.launch
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
data/lib/glimmer/libui.rb
CHANGED
@@ -26,12 +26,12 @@ module Glimmer
|
|
26
26
|
class << self
|
27
27
|
include Glimmer::FiddleConsumer
|
28
28
|
|
29
|
-
def integer_to_boolean(int, allow_nil: true)
|
30
|
-
int.nil? ? (allow_nil ? nil : false) : ((int.is_a?(TrueClass) || int.is_a?(FalseClass)) ? int : (int.is_a?(Integer) ? int == 1 : (allow_nil ? nil : false)))
|
29
|
+
def integer_to_boolean(int, allow_nil: true, allow_boolean: true)
|
30
|
+
int.nil? ? (allow_nil ? nil : false) : (allow_boolean && (int.is_a?(TrueClass) || int.is_a?(FalseClass)) ? int : (int.is_a?(Integer) ? int == 1 : (allow_nil ? nil : false)))
|
31
31
|
end
|
32
32
|
|
33
|
-
def boolean_to_integer(bool, allow_nil: true)
|
34
|
-
bool.nil? ? (allow_nil ? nil : 0) : (bool.is_a?(Integer) ? bool : (bool.is_a?(TrueClass) || bool.is_a?(FalseClass) ? (bool == true ? 1 : 0) : (allow_nil ? nil : 0)))
|
33
|
+
def boolean_to_integer(bool, allow_nil: true, allow_integer: true)
|
34
|
+
bool.nil? ? (allow_nil ? nil : 0) : (allow_integer && bool.is_a?(Integer) ? bool : (bool.is_a?(TrueClass) || bool.is_a?(FalseClass) ? (bool == true ? 1 : 0) : (allow_nil ? nil : 0)))
|
35
35
|
end
|
36
36
|
|
37
37
|
def degrees_to_radians(degrees)
|
@@ -83,6 +83,7 @@ module Glimmer
|
|
83
83
|
value = value.chars.map {|char| [char, char]}.flatten.join if value.length == 3
|
84
84
|
value = "0x#{value}"
|
85
85
|
end
|
86
|
+
value = "0x#{value[1..-1]}" if value.start_with?('#')
|
86
87
|
value = value.to_i(16)
|
87
88
|
end
|
88
89
|
if value.is_a?(Integer)
|
@@ -100,11 +101,39 @@ module Glimmer
|
|
100
101
|
enum_symbol_values(enum_name).keys
|
101
102
|
end
|
102
103
|
|
104
|
+
def enum_names
|
105
|
+
[
|
106
|
+
:align,
|
107
|
+
:at,
|
108
|
+
:attribute_type,
|
109
|
+
:draw_brush_type,
|
110
|
+
:draw_fill_mode,
|
111
|
+
:draw_line_cap,
|
112
|
+
:draw_line_join,
|
113
|
+
:draw_text_align,
|
114
|
+
:ext_key,
|
115
|
+
:modifier,
|
116
|
+
:table_model_column,
|
117
|
+
:table_value_type,
|
118
|
+
:text_italic,
|
119
|
+
:text_stretch,
|
120
|
+
:text_weight,
|
121
|
+
:underline,
|
122
|
+
:underline_color
|
123
|
+
]
|
124
|
+
end
|
125
|
+
|
103
126
|
# Returns ruby underscored symbols for enum values starting with enum name (camelcase, e.g. 'ext_key')
|
104
127
|
def enum_symbol_values(enum_name)
|
105
128
|
enum_name = enum_name.to_s.underscore.to_sym
|
106
129
|
@enum_symbols ||= {}
|
107
|
-
@enum_symbols[enum_name] ||= ::LibUI.constants.select
|
130
|
+
@enum_symbols[enum_name] ||= ::LibUI.constants.select do |c|
|
131
|
+
c.to_s.match(/#{enum_name.to_s.camelcase(:upper)}[A-Z]/)
|
132
|
+
end.map do |c|
|
133
|
+
[c.to_s.underscore.sub("#{enum_name}_", '').to_sym, ::LibUI.const_get(c)]
|
134
|
+
end.reject do |key, value|
|
135
|
+
enum_name == :underline && key.to_s.start_with?('color')
|
136
|
+
end.to_h
|
108
137
|
end
|
109
138
|
|
110
139
|
def enum_value_to_symbol(enum_name, enum_value)
|
@@ -145,7 +174,7 @@ module Glimmer
|
|
145
174
|
# If block returns true at any point, the timer continues for another repetition regardless of `repeat:` keyword arg value
|
146
175
|
def timer(time_in_seconds = 0.1, repeat: true, &block)
|
147
176
|
closure = fiddle_closure_block_caller(4, [0]) do
|
148
|
-
result = boolean_to_integer(block.call)
|
177
|
+
result = boolean_to_integer(block.call, allow_integer: false)
|
149
178
|
repeat -= 1 if repeat.is_a?(Integer)
|
150
179
|
if result.nil?
|
151
180
|
if (repeat == true || (repeat.is_a?(Integer) && repeat > 0))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-libui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -252,11 +252,21 @@ files:
|
|
252
252
|
- examples/method_based_custom_keyword.rb
|
253
253
|
- examples/midi_player.rb
|
254
254
|
- examples/simple_notepad.rb
|
255
|
+
- examples/snake.rb
|
256
|
+
- examples/snake/model/apple.rb
|
257
|
+
- examples/snake/model/game.rb
|
258
|
+
- examples/snake/model/snake.rb
|
259
|
+
- examples/snake/model/vertebra.rb
|
260
|
+
- examples/snake/presenter/cell.rb
|
261
|
+
- examples/snake/presenter/grid.rb
|
255
262
|
- examples/tetris.rb
|
256
263
|
- examples/tetris/model/block.rb
|
257
264
|
- examples/tetris/model/game.rb
|
258
265
|
- examples/tetris/model/past_game.rb
|
259
266
|
- examples/tetris/model/tetromino.rb
|
267
|
+
- examples/tic_tac_toe.rb
|
268
|
+
- examples/tic_tac_toe/board.rb
|
269
|
+
- examples/tic_tac_toe/cell.rb
|
260
270
|
- examples/timer.rb
|
261
271
|
- glimmer-dsl-libui.gemspec
|
262
272
|
- icons/glimmer.png
|