cyberarm_engine 0.25.0 → 0.30.0

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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -8
  3. data/.rubocop.yml +7 -7
  4. data/.travis.yml +5 -5
  5. data/Gemfile +6 -6
  6. data/Gemfile.lock +37 -25
  7. data/LICENSE.txt +21 -21
  8. data/README.md +74 -74
  9. data/Rakefile +10 -10
  10. data/assets/shaders/fragment/g_buffer.glsl +30 -30
  11. data/assets/shaders/fragment/lighting.glsl +115 -115
  12. data/assets/shaders/include/light_struct.glsl +11 -11
  13. data/assets/shaders/include/material_struct.glsl +16 -16
  14. data/assets/shaders/vertex/g_buffer.glsl +28 -28
  15. data/assets/shaders/vertex/lighting.glsl +24 -24
  16. data/assets/textures/ui/circle.png +0 -0
  17. data/assets/textures/ui/circle_small.png +0 -0
  18. data/assets/textures/ui/rounded.png +0 -0
  19. data/assets/textures/ui/rounded_bottom.png +0 -0
  20. data/assets/textures/ui/rounded_left.png +0 -0
  21. data/assets/textures/ui/rounded_left_bottom.png +0 -0
  22. data/assets/textures/ui/rounded_left_top.png +0 -0
  23. data/assets/textures/ui/rounded_right.png +0 -0
  24. data/assets/textures/ui/rounded_right_bottom.png +0 -0
  25. data/assets/textures/ui/rounded_right_top.png +0 -0
  26. data/assets/textures/ui/rounded_small.png +0 -0
  27. data/assets/textures/ui/rounded_tiny.png +0 -0
  28. data/assets/textures/ui/rounded_top.png +0 -0
  29. data/assets/textures/ui/square.png +0 -0
  30. data/bin/console +14 -14
  31. data/bin/setup +8 -8
  32. data/cyberarm_engine.gemspec +35 -36
  33. data/lib/cyberarm_engine/animator.rb +219 -219
  34. data/lib/cyberarm_engine/background.rb +156 -158
  35. data/lib/cyberarm_engine/background_image.rb +93 -93
  36. data/lib/cyberarm_engine/background_nine_slice.rb +182 -142
  37. data/lib/cyberarm_engine/bounding_box.rb +150 -150
  38. data/lib/cyberarm_engine/builtin/intro_state.rb +130 -130
  39. data/lib/cyberarm_engine/cache/download_manager.rb +123 -123
  40. data/lib/cyberarm_engine/cache.rb +4 -4
  41. data/lib/cyberarm_engine/common.rb +133 -131
  42. data/lib/cyberarm_engine/config_file.rb +46 -46
  43. data/lib/cyberarm_engine/console/command.rb +157 -157
  44. data/lib/cyberarm_engine/console/commands/help_command.rb +43 -43
  45. data/lib/cyberarm_engine/console/subcommand.rb +99 -99
  46. data/lib/cyberarm_engine/console.rb +248 -248
  47. data/lib/cyberarm_engine/event_bus.rb +39 -0
  48. data/lib/cyberarm_engine/game_object.rb +244 -244
  49. data/lib/cyberarm_engine/game_state.rb +134 -124
  50. data/lib/cyberarm_engine/gosu_ext/draw_arc.rb +111 -111
  51. data/lib/cyberarm_engine/gosu_ext/draw_circle.rb +30 -30
  52. data/lib/cyberarm_engine/gosu_ext/draw_path.rb +17 -17
  53. data/lib/cyberarm_engine/model/material.rb +21 -21
  54. data/lib/cyberarm_engine/model/mesh.rb +131 -131
  55. data/lib/cyberarm_engine/model/parser.rb +74 -74
  56. data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -138
  57. data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -154
  58. data/lib/cyberarm_engine/model.rb +216 -216
  59. data/lib/cyberarm_engine/model_cache.rb +31 -31
  60. data/lib/cyberarm_engine/notification.rb +82 -82
  61. data/lib/cyberarm_engine/notification_manager.rb +241 -241
  62. data/lib/cyberarm_engine/opengl/light.rb +52 -52
  63. data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -46
  64. data/lib/cyberarm_engine/opengl/perspective_camera.rb +41 -41
  65. data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -249
  66. data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +167 -167
  67. data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +307 -307
  68. data/lib/cyberarm_engine/opengl/renderer/renderer.rb +33 -33
  69. data/lib/cyberarm_engine/opengl/shader.rb +408 -408
  70. data/lib/cyberarm_engine/opengl/texture.rb +69 -69
  71. data/lib/cyberarm_engine/opengl.rb +53 -53
  72. data/lib/cyberarm_engine/pathfinding/graph.rb +64 -0
  73. data/lib/cyberarm_engine/pathfinding/graph_search.rb +6 -0
  74. data/lib/cyberarm_engine/pathfinding/graph_searches/astar_search.rb +6 -0
  75. data/lib/cyberarm_engine/pathfinding/graph_searches/breadth_first_search.rb +27 -0
  76. data/lib/cyberarm_engine/pathfinding/graph_searches/dijkstra_search.rb +6 -0
  77. data/lib/cyberarm_engine/pathfinding/graphs/grid.rb +52 -0
  78. data/lib/cyberarm_engine/ray.rb +56 -56
  79. data/lib/cyberarm_engine/result.rb +19 -0
  80. data/lib/cyberarm_engine/stats.rb +200 -200
  81. data/lib/cyberarm_engine/text.rb +288 -260
  82. data/lib/cyberarm_engine/timer.rb +27 -23
  83. data/lib/cyberarm_engine/transform.rb +296 -296
  84. data/lib/cyberarm_engine/trees/aabb_node.rb +126 -126
  85. data/lib/cyberarm_engine/trees/aabb_tree.rb +55 -55
  86. data/lib/cyberarm_engine/trees/aabb_tree_debug.rb +29 -29
  87. data/lib/cyberarm_engine/ui/border_canvas.rb +102 -102
  88. data/lib/cyberarm_engine/ui/dialog.rb +24 -0
  89. data/lib/cyberarm_engine/ui/dsl.rb +170 -142
  90. data/lib/cyberarm_engine/ui/element.rb +664 -662
  91. data/lib/cyberarm_engine/ui/elements/button.rb +99 -100
  92. data/lib/cyberarm_engine/ui/elements/check_box.rb +58 -54
  93. data/lib/cyberarm_engine/ui/elements/container.rb +413 -407
  94. data/lib/cyberarm_engine/ui/elements/edit_box.rb +200 -179
  95. data/lib/cyberarm_engine/ui/elements/edit_line.rb +299 -297
  96. data/lib/cyberarm_engine/ui/elements/flow.rb +15 -15
  97. data/lib/cyberarm_engine/ui/elements/image.rb +78 -72
  98. data/lib/cyberarm_engine/ui/elements/list_box.rb +79 -79
  99. data/lib/cyberarm_engine/ui/elements/menu.rb +27 -27
  100. data/lib/cyberarm_engine/ui/elements/menu_item.rb +6 -6
  101. data/lib/cyberarm_engine/ui/elements/progress.rb +95 -93
  102. data/lib/cyberarm_engine/ui/elements/radio.rb +6 -6
  103. data/lib/cyberarm_engine/ui/elements/slider.rb +111 -107
  104. data/lib/cyberarm_engine/ui/elements/stack.rb +11 -11
  105. data/lib/cyberarm_engine/ui/elements/text_block.rb +236 -222
  106. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +71 -67
  107. data/lib/cyberarm_engine/ui/elements/widget.rb +45 -0
  108. data/lib/cyberarm_engine/ui/event.rb +54 -54
  109. data/lib/cyberarm_engine/ui/gui_state.rb +402 -326
  110. data/lib/cyberarm_engine/ui/page.rb +39 -0
  111. data/lib/cyberarm_engine/ui/style.rb +94 -61
  112. data/lib/cyberarm_engine/ui/theme.rb +237 -225
  113. data/lib/cyberarm_engine/vector.rb +312 -312
  114. data/lib/cyberarm_engine/version.rb +4 -4
  115. data/lib/cyberarm_engine/window.rb +234 -195
  116. data/lib/cyberarm_engine.rb +88 -76
  117. data/mrbgem.rake +29 -29
  118. metadata +30 -5
@@ -0,0 +1,39 @@
1
+ module CyberarmEngine
2
+ class Page
3
+ include CyberarmEngine::DSL
4
+ include CyberarmEngine::Common
5
+
6
+ attr_reader :parent
7
+
8
+ def initialize(parent:)
9
+ @parent = parent
10
+
11
+ @options = {}
12
+ end
13
+
14
+ def options=(options)
15
+ @options = options
16
+ end
17
+
18
+ def setup
19
+ end
20
+
21
+ def focus
22
+ end
23
+
24
+ def blur
25
+ end
26
+
27
+ def draw
28
+ end
29
+
30
+ def update
31
+ end
32
+
33
+ def button_down(id)
34
+ end
35
+
36
+ def button_up(id)
37
+ end
38
+ end
39
+ end
@@ -1,61 +1,94 @@
1
- module Gosu
2
- class Color
3
- def _dump(_level)
4
- [
5
- "%02X" % alpha,
6
- "%02X" % red,
7
- "%02X" % green,
8
- "%02X" % blue
9
- ].join
10
- end
11
-
12
- def self._load(hex)
13
- argb(hex.to_i(16))
14
- end
15
- end
16
- end
17
-
18
- module CyberarmEngine
19
- class Style
20
- attr_reader :hash
21
-
22
- %i[
23
- x y z width height min_width min_height max_width max_height color background
24
- background_image background_image_mode background_image_color
25
- background_nine_slice background_nine_slice_mode background_nine_slice_color background_nine_slice_from_edge
26
- background_nine_slice_left background_nine_slice_top background_nine_slice_right background_nine_slice_bottom
27
- border_color border_color_left border_color_right border_color_top border_color_bottom
28
- border_thickness border_thickness_left border_thickness_right border_thickness_top border_thickness_bottom
29
- padding padding_left padding_right padding_top padding_bottom
30
- margin margin_left margin_right margin_top margin_bottom
31
- background_canvas background_nine_slice_canvas background_image_canvas border_canvas
32
-
33
- fraction_background scroll fill text_wrap v_align h_align delay tag
34
- image_width image_height
35
-
36
- default hover active disabled
37
- ].each do |item|
38
- define_method(item) do
39
- @hash[item]
40
- end
41
- define_method(:"#{item}=") do |value|
42
- @hash[item] = value
43
- end
44
- end
45
-
46
- def initialize(hash = {})
47
- h = hash
48
- # h = Marshal.load(Marshal.dump(hash))
49
-
50
- h[:default] = {}
51
-
52
- h.each do |key, value|
53
- next if value.is_a?(Hash)
54
-
55
- h[:default][key] = value
56
- end
57
-
58
- @hash = h
59
- end
60
- end
61
- end
1
+ module Gosu
2
+ class Color
3
+ def _dump(_level)
4
+ [
5
+ "%02X" % alpha,
6
+ "%02X" % red,
7
+ "%02X" % green,
8
+ "%02X" % blue
9
+ ].join
10
+ end
11
+
12
+ def self._load(hex)
13
+ argb(hex.to_i(16))
14
+ end
15
+ end
16
+ end
17
+
18
+ module CyberarmEngine
19
+ class StyleData
20
+ def initialize(hash = {})
21
+ @hash = hash
22
+ @dirty = false
23
+ end
24
+
25
+ %i[
26
+ x y z design_width width height min_width min_height max_width max_height color background
27
+ background_image background_image_mode background_image_color
28
+ background_nine_slice background_nine_slice_mode background_nine_slice_color background_nine_slice_from_edge
29
+ background_nine_slice_left background_nine_slice_top background_nine_slice_right background_nine_slice_bottom
30
+ border_color border_color_left border_color_right border_color_top border_color_bottom
31
+ border_thickness border_thickness_left border_thickness_right border_thickness_top border_thickness_bottom
32
+ padding padding_left padding_right padding_top padding_bottom
33
+ margin margin_left margin_right margin_top margin_bottom
34
+ aspect_ratio
35
+
36
+ fraction_background scroll fill text_wrap v_align h_align delay tag font
37
+ text_align text_static text_size
38
+ text_shadow text_shadow_size text_shadow_alpha text_shadow_color
39
+ text_border text_border_size text_border_alpha text_border_color
40
+ image_width image_height
41
+ ].each do |item|
42
+ define_method(item) do
43
+ @hash[item]
44
+ end
45
+ define_method(:"#{item}=") do |value|
46
+ @dirty = true if @hash[item] != value
47
+
48
+ @hash[item] = value
49
+ end
50
+ end
51
+
52
+ # NOTE: do not change return value
53
+ def default
54
+ nil
55
+ end
56
+
57
+ def dirty?
58
+ @dirty
59
+ end
60
+
61
+ def mark_clean!
62
+ @dirty = false
63
+ end
64
+
65
+ def empty?
66
+ @hash.empty?
67
+ end
68
+ end
69
+
70
+ class Style < StyleData
71
+ attr_reader :hash, :hover, :active, :disabled
72
+
73
+ def initialize(hash = {})
74
+ @hash = hash
75
+
76
+ @hover = StyleData.new(hash[:hover] || {})
77
+ @active = StyleData.new(hash[:active] || {})
78
+ @disabled = StyleData.new(hash[:disabled] || {})
79
+
80
+ @substyles = [@hover, @active, @disabled]
81
+
82
+ super
83
+ end
84
+
85
+ def dirty?
86
+ @dirty || @substyles.any?(&:dirty?)
87
+ end
88
+
89
+ def mark_clean!
90
+ @substyles.each(&:mark_clean!)
91
+ @dirty = false
92
+ end
93
+ end
94
+ end
@@ -1,225 +1,237 @@
1
- module CyberarmEngine
2
- module Theme
3
- def default(*args)
4
- value = @options
5
- args.each do |arg|
6
- value = value.dig(arg)
7
- end
8
-
9
- value
10
- end
11
-
12
- def theme_defaults(options)
13
- raise "Error" unless self.class.ancestors.include?(CyberarmEngine::Element)
14
-
15
- _theme = THEME
16
- _theme = deep_merge(_theme, options[:theme]) if options[:theme]
17
- _theme.delete(:theme) if options[:theme]
18
-
19
- hash = {}
20
- class_names = self.class.ancestors
21
- class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map! do |c|
22
- c.to_s.split("::").last.to_sym
23
- end.reverse!
24
-
25
- class_names.each do |klass|
26
- next unless data = _theme.dig(klass)
27
-
28
- data.each do |_key, _value|
29
- hash.merge!(data)
30
- end
31
- end
32
-
33
- deep_merge(hash, options)
34
- end
35
-
36
- # Derived from Rails Hash#deep_merge!
37
- # Enables passing partial themes through Element options without issue
38
- def deep_merge(original, intergrate, &block)
39
- original.merge(intergrate) do |key, this_val, other_val|
40
- if this_val.is_a?(Hash) && other_val.is_a?(Hash)
41
- deep_merge(this_val, other_val, &block)
42
- elsif block_given?
43
- block.call(key, this_val, other_val)
44
- else
45
- other_val
46
- end
47
- end
48
- end
49
-
50
- THEME = {
51
- Element: {
52
- x: 0,
53
- y: 0,
54
- z: 30,
55
-
56
- width: nil,
57
- height: nil,
58
- color: Gosu::Color::WHITE,
59
- background: Gosu::Color::NONE,
60
- margin: 0,
61
- padding: 0,
62
- border_thickness: 0,
63
- border_color: Gosu::Color::NONE,
64
- border_radius: 0
65
- },
66
-
67
- Container: { # < Element (Base class for Stack and Flow)
68
- debug_color: Gosu::Color::YELLOW
69
- },
70
-
71
- Button: { # < Label
72
- margin: 1,
73
- padding: 4,
74
- border_thickness: 1,
75
- border_color: ["ffd59674".hex, "ffff8746".hex],
76
- border_radius: 0,
77
- background: ["ffc75e61".to_i(16), "ffe26623".to_i(16)],
78
- text_align: :center,
79
- text_v_align: :center,
80
- text_wrap: :none,
81
-
82
- hover: {
83
- color: Gosu::Color.rgb(200, 200, 200),
84
- background: ["ffB23E41".to_i(16), "ffFF7C00".to_i(16)]
85
- },
86
-
87
- active: {
88
- color: Gosu::Color::BLACK,
89
- background: ["ffB23E41".to_i(16)]
90
- },
91
-
92
- disabled: {
93
- color: Gosu::Color::GRAY,
94
- background: 0xff303030
95
- }
96
- },
97
-
98
- EditLine: { # < Button
99
- type: :text,
100
- width: 200,
101
- password_character: "•",
102
- caret_width: 2,
103
- caret_color: Gosu::Color::WHITE,
104
- caret_interval: 500,
105
- selection_color: Gosu::Color.rgba(255, 128, 50, 200),
106
- text_align: :left,
107
- text_static: false # static text causes issues correctly displaying caret position
108
- },
109
-
110
- EditBox: { # < EditLine
111
- text_v_align: :top
112
- },
113
-
114
- Image: { # < Element
115
- color: Gosu::Color::WHITE,
116
- tileable: false,
117
- retro: false
118
- },
119
-
120
- TextBlock: { # < Element
121
- text_size: 28,
122
- text_wrap: :word_wrap, # :word_wrap, :break_word, :none
123
- text_shadow: false,
124
- text_border: false,
125
- text_align: :left,
126
- font: "Arial",
127
- margin: 0,
128
- padding: 2,
129
- disabled: {
130
- color: Gosu::Color.rgb(175, 175, 175),
131
- }
132
- },
133
-
134
- Banner: { # < TextBlock
135
- text_size: 48
136
- },
137
-
138
- Title: { # < TextBlock
139
- text_size: 34
140
- },
141
-
142
- Subtitle: { # < TextBlock
143
- text_size: 26
144
- },
145
-
146
- Tagline: { # < TextBlock
147
- text_size: 24
148
- },
149
-
150
- Caption: { # < TextBlock
151
- text_size: 22
152
- },
153
-
154
- Para: { # < TextBlock
155
- text_size: 18
156
- },
157
-
158
- Inscription: { # < TextBlock
159
- text_size: 16
160
- },
161
-
162
- ToolTip: { # < TextBlock
163
- delay: 100, # ms
164
- color: Gosu::Color::WHITE,
165
- padding_top: 4,
166
- padding_bottom: 4,
167
- padding_left: 8,
168
- padding_right: 8,
169
- border_thickness: 1,
170
- border_color: 0xffaaaaaa,
171
- background: 0xff404040
172
- },
173
- Link: { # < TextBlock
174
- color: Gosu::Color::BLUE,
175
- border_thickness: 1,
176
- border_bottom_color: Gosu::Color::BLUE,
177
- hover: {
178
- color: 0xff_ff00ff,
179
- border_bottom_color: 0xff_ff00ff
180
- },
181
- active: {
182
- color: 0xff_ff0000,
183
- border_bottom_color: 0xff_ff0000
184
- }
185
- },
186
-
187
- ToggleButton: { # < Button
188
- checkmark: "√"
189
- },
190
-
191
- CheckBox: { # < Flow
192
- text_wrap: :none
193
- },
194
-
195
- Progress: { # < Element
196
- width: 250,
197
- height: 36,
198
- background: 0xff111111,
199
- fraction_background: [0xffc75e61, 0xffe26623],
200
- border_thickness: 1,
201
- border_color: [0xffd59674, 0xffff8746]
202
- },
203
-
204
- Slider: { # < Element
205
- width: 250,
206
- height: 36,
207
- background: 0xff111111,
208
- fraction_background: [0xffc75e61, 0xffe26623],
209
- border_thickness: 1,
210
- border_color: [0xffd59674, 0xffff8746]
211
- },
212
- Menu: { # < Stack
213
- width: 200,
214
- border_color: 0xaa_efefef,
215
- border_thickness: 1
216
- },
217
-
218
- MenuItem: { # < Button
219
- width: 1.0,
220
- text_left: :left,
221
- margin: 0
222
- }
223
- }.freeze
224
- end
225
- end
1
+ module CyberarmEngine
2
+ module Theme
3
+ def default(*args)
4
+ value = @options
5
+ args.each do |arg|
6
+ value = value.dig(arg)
7
+ end
8
+
9
+ value
10
+ end
11
+
12
+ def theme_defaults(options)
13
+ raise "Error" unless self.class.ancestors.include?(CyberarmEngine::Element)
14
+
15
+ _theme = THEME
16
+ _theme = deep_merge(_theme, options[:theme]) if options[:theme]
17
+ _theme.delete(:theme) if options[:theme]
18
+
19
+ hash = {}
20
+ class_names = self.class.ancestors
21
+ class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map! do |c|
22
+ c.to_s.split("::").last.to_sym
23
+ end.reverse!
24
+
25
+ class_names.each do |klass|
26
+ next unless data = _theme.dig(klass)
27
+
28
+ data.each do |_key, _value|
29
+ hash.merge!(data)
30
+ end
31
+ end
32
+
33
+ # css-like style classes, however First In, First Out- that is,
34
+ options[:style_class]&.each do |klass|
35
+ hash = deep_merge(hash, _theme[klass]) if _theme[klass]
36
+ end
37
+
38
+ deep_merge(hash, options)
39
+ end
40
+
41
+ # Derived from Rails Hash#deep_merge!
42
+ # Enables passing partial themes through Element options without issue
43
+ def deep_merge(original, intergrate, &block)
44
+ original.merge(intergrate) do |key, this_val, other_val|
45
+ if this_val.is_a?(Hash) && other_val.is_a?(Hash)
46
+ deep_merge(this_val, other_val, &block)
47
+ elsif block_given?
48
+ block.call(key, this_val, other_val)
49
+ else
50
+ other_val
51
+ end
52
+ end
53
+ end
54
+
55
+ THEME = {
56
+ Element: {
57
+ x: 0,
58
+ y: 0,
59
+ z: 30,
60
+
61
+ design_width: nil,
62
+ width: nil,
63
+ height: nil,
64
+ color: Gosu::Color::WHITE,
65
+ background: Gosu::Color::NONE,
66
+ margin: 0,
67
+ padding: 0,
68
+ border_thickness: 0,
69
+ border_color: Gosu::Color::NONE,
70
+ border_radius: 0
71
+ },
72
+
73
+ Container: { # < Element (Base class for Stack and Flow)
74
+ debug_color: Gosu::Color::YELLOW
75
+ },
76
+
77
+ Button: { # < TextBlock
78
+ margin: 1,
79
+ padding: 4,
80
+ border_thickness: 1,
81
+ border_color: [0xffd59674, 0xffff8746],
82
+ border_radius: 0,
83
+ background: [0xffc75e61, 0xffe26623],
84
+ text_align: :center,
85
+ text_v_align: :center,
86
+ text_wrap: :none,
87
+
88
+ hover: {
89
+ color: Gosu::Color.rgb(200, 200, 200),
90
+ background: [0xffB23E41, 0xffFF7C00]
91
+ },
92
+
93
+ active: {
94
+ color: Gosu::Color::BLACK,
95
+ background: [0xffB23E41]
96
+ },
97
+
98
+ disabled: {
99
+ color: Gosu::Color::GRAY,
100
+ background: 0xff303030
101
+ }
102
+ },
103
+
104
+ EditLine: { # < Button
105
+ type: :text,
106
+ width: 200,
107
+ password_character: "•",
108
+ caret_width: 2,
109
+ caret_color: Gosu::Color::WHITE,
110
+ caret_interval: 500,
111
+ selection_color: Gosu::Color.rgba(255, 128, 50, 200),
112
+ text_align: :left,
113
+ text_static: false # static text causes issues correctly displaying caret position
114
+ },
115
+
116
+ EditBox: { # < EditLine
117
+ text_v_align: :top
118
+ },
119
+
120
+ Image: { # < Element
121
+ color: Gosu::Color::WHITE,
122
+ tileable: false,
123
+ retro: false
124
+ },
125
+
126
+ TextBlock: { # < Element
127
+ text_size: 28,
128
+ text_wrap: :word_wrap, # :word_wrap, :break_word, :none
129
+ text_shadow: false,
130
+ text_shadow_color: 0,
131
+ text_shadow_alpha: 30,
132
+ text_shadow_size: 2,
133
+ text_border: false,
134
+ text_border_color: 0,
135
+ text_border_alpha: 30,
136
+ text_border_size: 2,
137
+ text_align: :left,
138
+ font: "Arial",
139
+ margin: 0,
140
+ padding: 2,
141
+ disabled: {
142
+ color: Gosu::Color.rgb(175, 175, 175),
143
+ }
144
+ },
145
+
146
+ Banner: { # < TextBlock
147
+ text_size: 48
148
+ },
149
+
150
+ Title: { # < TextBlock
151
+ text_size: 34
152
+ },
153
+
154
+ Subtitle: { # < TextBlock
155
+ text_size: 26
156
+ },
157
+
158
+ Tagline: { # < TextBlock
159
+ text_size: 24
160
+ },
161
+
162
+ Caption: { # < TextBlock
163
+ text_size: 22
164
+ },
165
+
166
+ Para: { # < TextBlock
167
+ text_size: 18
168
+ },
169
+
170
+ Inscription: { # < TextBlock
171
+ text_size: 16
172
+ },
173
+
174
+ ToolTip: { # < TextBlock
175
+ delay: 100, # ms
176
+ color: Gosu::Color::WHITE,
177
+ padding_top: 4,
178
+ padding_bottom: 4,
179
+ padding_left: 8,
180
+ padding_right: 8,
181
+ border_thickness: 1,
182
+ border_color: 0xffaaaaaa,
183
+ background: 0xff404040
184
+ },
185
+ Link: { # < TextBlock
186
+ color: Gosu::Color::BLUE,
187
+ border_thickness: 1,
188
+ border_bottom_color: Gosu::Color::BLUE,
189
+ hover: {
190
+ color: 0xff_ff00ff,
191
+ border_bottom_color: 0xff_ff00ff
192
+ },
193
+ active: {
194
+ color: 0xff_ff0000,
195
+ border_bottom_color: 0xff_ff0000
196
+ }
197
+ },
198
+
199
+ ToggleButton: { # < Button
200
+ checkmark: "√"
201
+ },
202
+
203
+ CheckBox: { # < Flow
204
+ text_wrap: :none
205
+ },
206
+
207
+ Progress: { # < Element
208
+ width: 250,
209
+ height: 36,
210
+ background: 0xff111111,
211
+ fraction_background: [0xffc75e61, 0xffe26623],
212
+ border_thickness: 1,
213
+ border_color: [0xffd59674, 0xffff8746]
214
+ },
215
+
216
+ Slider: { # < Element
217
+ width: 250,
218
+ height: 36,
219
+ background: 0xff111111,
220
+ fraction_background: [0xffc75e61, 0xffe26623],
221
+ border_thickness: 1,
222
+ border_color: [0xffd59674, 0xffff8746]
223
+ },
224
+ Menu: { # < Stack
225
+ width: 200,
226
+ border_color: 0xaa_efefef,
227
+ border_thickness: 1
228
+ },
229
+
230
+ MenuItem: { # < Button
231
+ width: 1.0,
232
+ text_left: :left,
233
+ margin: 0
234
+ }
235
+ }.freeze
236
+ end
237
+ end