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
@@ -1,260 +1,288 @@
1
- module CyberarmEngine
2
- class Text
3
- CACHE = {}
4
-
5
- attr_accessor :x, :y, :z, :size, :options
6
- attr_reader :text, :textobject, :factor_x, :factor_y, :color,
7
- :border, :border_size, :border_alpha, :border_color,
8
- :shadow, :shadow_size, :shadow_alpha, :shadow_color
9
-
10
- def initialize(text, options = {})
11
- @text = text.to_s || ""
12
- @options = options
13
- @size = options[:size] || 18
14
- @font = options[:font] || Gosu.default_font_name
15
- @x = options[:x] || 0
16
- @y = options[:y] || 0
17
- @z = options[:z] || 1025
18
- @factor_x = options[:factor_x] || 1
19
- @factor_y = options[:factor_y] || 1
20
- if options[:color]
21
- @color = options[:color].is_a?(Gosu::Color) ? options[:color] : Gosu::Color.new(options[:color])
22
- else
23
- @color = Gosu::Color::WHITE
24
- end
25
- @mode = options[:mode] || :default
26
- @alignment = options[:alignment] || nil
27
-
28
- @border = options[:border]
29
- @border = true if options[:border].nil?
30
- @border_size = options[:border_size] || 1
31
- @border_alpha = options[:border_alpha] || 30
32
- @border_color = options[:border_color] || Gosu::Color::BLACK
33
-
34
- @shadow = options[:shadow]
35
- @shadow_size = options[:shadow_size] || 2
36
- @shadow_alpha = options[:shadow_alpha] || 30
37
- @shadow_color = options[:shadow_color] || Gosu::Color::BLACK
38
-
39
- @static = options[:static] || (options[:static].nil? || options[:static] == false ? false : true)
40
-
41
- @textobject = check_cache(@size, @font)
42
-
43
- if @alignment
44
- case @alignment
45
- when :left
46
- @x = 0 + BUTTON_PADDING
47
- when :center
48
- @x = (CyberarmEngine::Window.instance.width / 2) - (@textobject.text_width(@text) / 2)
49
- when :right
50
- @x = CyberarmEngine::Window.instance.width - BUTTON_PADDING - @textobject.text_width(@text)
51
- end
52
- end
53
- end
54
-
55
- def check_cache(size, font_name)
56
- available = false
57
- font = nil
58
-
59
- if CACHE[size]
60
- if CACHE[size][font_name]
61
- font = CACHE[size][font_name]
62
- available = true
63
- else
64
- available = false
65
- end
66
- else
67
- available = false
68
- end
69
-
70
- unless available
71
- font = Gosu::Font.new(@size, name: @font)
72
- CACHE[@size] = {} unless CACHE[@size].is_a?(Hash)
73
- CACHE[@size][@font] = font
74
- end
75
-
76
- font
77
- end
78
-
79
- def swap_font(size, font_name = @font)
80
- if @size != size || @font != font_name
81
- @size = size
82
- @font = font_name
83
-
84
- invalidate_cache!
85
- @textobject = check_cache(size, font_name)
86
- end
87
- end
88
-
89
- def text=(string)
90
- invalidate_cache! if @text != string
91
- @text = string
92
- end
93
-
94
- def factor_x=(n)
95
- invalidate_cache! if @factor_x != n
96
- @factor_x = n
97
- end
98
-
99
- def factor_y=(n)
100
- invalidate_cache! if @factor_y != n
101
- @factor_y = n
102
- end
103
-
104
- def color=(color)
105
- old_color = @color
106
-
107
- if color
108
- @color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
109
- else
110
- raise "color cannot be nil"
111
- end
112
-
113
- invalidate_cache! if old_color != color
114
- end
115
-
116
- def border=(boolean)
117
- invalidate_cache! if @border != boolean
118
- @border = boolean
119
- end
120
-
121
- def border_size=(n)
122
- invalidate_cache! if @border_size != n
123
- @border_size = n
124
- end
125
-
126
- def border_alpha=(n)
127
- invalidate_cache! if @border_alpha != n
128
- @border_alpha = n
129
- end
130
-
131
- def border_color=(n)
132
- invalidate_cache! if @border_color != n
133
- @border_color = n
134
- end
135
-
136
- def width(text = @text)
137
- markup_width(text)
138
- end
139
-
140
- def text_width(text = @text)
141
- spacing = 0
142
- spacing += @border_size if @border
143
- spacing += @shadow_size if @shadow
144
-
145
- if text == @text && @static && @gosu_cached_text_image
146
- @gosu_cached_text_image&.width + spacing
147
- else
148
- textobject.text_width(text) + spacing
149
- end
150
- end
151
-
152
- def markup_width(text = @text)
153
- text = text.to_s
154
-
155
- spacing = 0
156
- spacing += @border_size if @border
157
- spacing += @shadow_size if @shadow
158
-
159
- if text == @text && @static && @gosu_cached_text_image
160
- @gosu_cached_text_image&.width + spacing
161
- else
162
- textobject.markup_width(text) + spacing
163
- end
164
- end
165
-
166
- def height(text = @text)
167
- if text.lines.count > 0
168
- text.lines.count * textobject.height + @border_size + @shadow_size
169
- else
170
- @textobject.height + @border_size + @shadow_size
171
- end
172
- end
173
-
174
- def draw(method = :draw_markup)
175
- if @static
176
- if @border && !@cached_text_border_image
177
- _x = @border_size
178
- _y = @border_size
179
- _width = method == :draw_markup ? text_width : markup_width
180
- img = Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font)
181
-
182
- @cached_text_border_image = Gosu.render((_width + (@border_size * 2)).ceil, (height + (@border_size * 2)).ceil) do
183
- img.draw(-_x, 0, @z, @factor_x, @factor_y, @border_color, @mode)
184
- img.draw(-_x, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
185
-
186
- img.draw(0, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
187
- img.draw(_x, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
188
-
189
- img.draw(_x, 0, @z, @factor_x, @factor_y, @border_color, @mode)
190
- img.draw(_x, _y, @z, @factor_x, @factor_y, @border_color, @mode)
191
-
192
- img.draw(0, _y, @z, @factor_x, @factor_y, @border_color, @mode)
193
- img.draw(-_x, _y, @z, @factor_x, @factor_y, @border_color, @mode)
194
- end
195
- end
196
-
197
- @cached_text_shadow_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font) if @shadow
198
-
199
- @gosu_cached_text_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font)
200
-
201
- @cached_text_border_image.draw(@x, @y, @z, @factor_x, @factor_y, @border_color, @mode) if @border
202
-
203
- @cached_text_shadow_image.draw(@x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, @shadow_color, @mode) if @shadow
204
-
205
- @gosu_cached_text_image.draw(@x, @y, @z, @factor_x, @factor_y, @color, @mode)
206
- else
207
- if @border && !ARGV.join.include?("--no-border")
208
- border_alpha = @color.alpha <= 30 ? @color.alpha : @border_alpha
209
- border_color = @border_color || Gosu::Color.rgba(@color.red, @color.green, @color.blue,
210
- border_alpha)
211
- white = Gosu::Color::WHITE
212
-
213
- _x = @border_size
214
- _y = @border_size
215
- _width = method == :draw_markup ? text_width : markup_width
216
-
217
- @cached_text_border_image ||= Gosu.render((_width + (border_size * 2)).ceil, (height + (@border_size * 2)).ceil) do
218
- @textobject.send(method, @text, _x - @border_size, _y, @z, @factor_x, @factor_y, white, @mode)
219
- @textobject.send(method, @text, _x - @border_size, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
220
-
221
- @textobject.send(method, @text, _x, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
222
- @textobject.send(method, @text, _x + @border_size, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
223
-
224
- @textobject.send(method, @text, _x, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
225
- @textobject.send(method, @text, _x - @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
226
-
227
- @textobject.send(method, @text, _x + @border_size, _y, @z, @factor_x, @factor_y, white, @mode)
228
- @textobject.send(method, @text, _x + @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
229
- end
230
-
231
- @cached_text_border_image.draw(@x - @border_size, @y - @border_size, @z, @factor_x, @factor_y, border_color)
232
- end
233
-
234
- if @shadow
235
- shadow_color = @shadow_color || Gosu::Color.rgba(@color.red, @color.green, @color.blue, @shadow_alpha)
236
- @textobject.send(method, @text, @x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, shadow_color, @mode)
237
- end
238
-
239
- @textobject.send(method, @text, @x, @y, @z, @factor_x, @factor_y, @color, @mode)
240
- end
241
- end
242
-
243
- def alpha=(n)
244
- @color = Gosu::Color.rgba(@color.red, @color.green, @color.blue, n)
245
- end
246
-
247
- def alpha
248
- @color.alpha
249
- end
250
-
251
- def update
252
- end
253
-
254
- def invalidate_cache!
255
- @cached_text_border_image = nil
256
- @cached_text_shadow_image = nil
257
- @gosu_cached_text_image = nil
258
- end
259
- end
260
- end
1
+ module CyberarmEngine
2
+ class Text
3
+ CACHE = {}
4
+
5
+ attr_accessor :x, :y, :z, :size, :options
6
+ attr_reader :text, :textobject, :factor_x, :factor_y, :color,
7
+ :border, :border_size, :border_alpha, :border_color,
8
+ :shadow, :shadow_size, :shadow_alpha, :shadow_color
9
+
10
+ def initialize(text, options = {})
11
+ @text = text.to_s || ""
12
+ @options = options
13
+ @size = options[:size] || 18
14
+ @font = options[:font] || Gosu.default_font_name
15
+ @x = options[:x] || 0
16
+ @y = options[:y] || 0
17
+ @z = options[:z] || 1025
18
+ @factor_x = options[:factor_x] || 1
19
+ @factor_y = options[:factor_y] || 1
20
+ if options[:color]
21
+ @color = options[:color].is_a?(Gosu::Color) ? options[:color] : Gosu::Color.new(options[:color])
22
+ else
23
+ @color = Gosu::Color::WHITE
24
+ end
25
+ @mode = options[:mode] || :default
26
+ @alignment = options[:alignment] || :left
27
+
28
+ @border = options[:border]
29
+ @border = true if options[:border].nil?
30
+ @border_size = options[:border_size] || 1
31
+ @border_alpha = options[:border_alpha] || 30
32
+ @border_color = options[:border_color] || Gosu::Color::BLACK
33
+
34
+ @shadow = options[:shadow]
35
+ @shadow_size = options[:shadow_size] || 2
36
+ @shadow_alpha = options[:shadow_alpha] || 30
37
+ @shadow_color = options[:shadow_color] || Gosu::Color::BLACK
38
+
39
+ @static = options[:static] || (options[:static].nil? || options[:static] == false ? false : true)
40
+
41
+ @textobject = check_cache(@size, @font)
42
+ end
43
+
44
+ def check_cache(size, font_name)
45
+ available = false
46
+ font = nil
47
+
48
+ if CACHE[size]
49
+ if CACHE[size][font_name]
50
+ font = CACHE[size][font_name]
51
+ available = true
52
+ else
53
+ available = false
54
+ end
55
+ else
56
+ available = false
57
+ end
58
+
59
+ unless available
60
+ font = Gosu::Font.new(@size, name: @font)
61
+ CACHE[@size] = {} unless CACHE[@size].is_a?(Hash)
62
+ CACHE[@size][@font] = font
63
+ end
64
+
65
+ font
66
+ end
67
+
68
+ def swap_font(size, font_name = @font)
69
+ if @size != size || @font != font_name
70
+ @size = size
71
+ @font = font_name
72
+
73
+ invalidate_cache!
74
+ @textobject = check_cache(size, font_name)
75
+ end
76
+ end
77
+
78
+ def text=(string)
79
+ invalidate_cache! if @text != string
80
+ @text = string
81
+ end
82
+
83
+ def factor_x=(n)
84
+ invalidate_cache! if @factor_x != n
85
+ @factor_x = n
86
+ end
87
+
88
+ def factor_y=(n)
89
+ invalidate_cache! if @factor_y != n
90
+ @factor_y = n
91
+ end
92
+
93
+ def color=(color)
94
+ old_color = @color
95
+
96
+ if color
97
+ @color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
98
+ else
99
+ raise "color cannot be nil"
100
+ end
101
+
102
+ invalidate_cache! if old_color != color
103
+ end
104
+
105
+ def alignment=(value)
106
+ invalidate_cache! if @alignment != value
107
+ @alignment = value
108
+ end
109
+
110
+ def shadow=(value)
111
+ invalidate_cache! if @shadow != value
112
+ @shadow = value
113
+ end
114
+
115
+ def shadow_color=(color)
116
+ old_color = @shadow_color
117
+
118
+ if color
119
+ @shadow_color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
120
+ else
121
+ raise "color cannot be nil"
122
+ end
123
+
124
+ invalidate_cache! if old_color != color
125
+ end
126
+
127
+ def shadow_alpha=(value)
128
+ invalidate_cache! if @shadow_alpha != value
129
+ @shadow_alpha = value
130
+ end
131
+
132
+ def shadow_size=(value)
133
+ invalidate_cache! if @shadow_size != value
134
+ @shadow_size = value
135
+ end
136
+
137
+ def border=(boolean)
138
+ invalidate_cache! if @border != boolean
139
+ @border = boolean
140
+ end
141
+
142
+ def border_size=(n)
143
+ invalidate_cache! if @border_size != n
144
+ @border_size = n
145
+ end
146
+
147
+ def border_alpha=(n)
148
+ invalidate_cache! if @border_alpha != n
149
+ @border_alpha = n
150
+ end
151
+
152
+ def border_color=(color)
153
+ old_color = @border_color
154
+
155
+ if color
156
+ @border_color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
157
+ else
158
+ raise "color cannot be nil"
159
+ end
160
+
161
+ invalidate_cache! if old_color != color
162
+ end
163
+
164
+ def width(text = @text)
165
+ markup_width(text)
166
+ end
167
+
168
+ def text_width(text = @text)
169
+ spacing = 0
170
+ spacing += @border_size if @border
171
+ spacing += @shadow_size if @shadow
172
+
173
+ if text == @text && @static && @gosu_cached_text_image
174
+ @gosu_cached_text_image&.width + spacing
175
+ else
176
+ textobject.text_width(text) + spacing
177
+ end
178
+ end
179
+
180
+ def markup_width(text = @text)
181
+ text = text.to_s
182
+
183
+ spacing = 0
184
+ spacing += @border_size if @border
185
+ spacing += @shadow_size if @shadow
186
+
187
+ if text == @text && @static && @gosu_cached_text_image
188
+ @gosu_cached_text_image&.width + spacing
189
+ else
190
+ textobject.markup_width(text) + spacing
191
+ end
192
+ end
193
+
194
+ def height(text = @text)
195
+ if text.lines.count > 0
196
+ text.lines.count * textobject.height + @border_size + @shadow_size
197
+ else
198
+ @textobject.height + @border_size + @shadow_size
199
+ end
200
+ end
201
+
202
+ def draw(method = :draw_markup)
203
+ if @static
204
+ if @border && !@cached_text_border_image
205
+ _x = @border_size
206
+ _y = @border_size
207
+ _width = method == :draw_markup ? text_width : markup_width
208
+ img = Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font)
209
+
210
+ @cached_text_border_image = Gosu.render((_width + (@border_size * 2)).ceil, (height + (@border_size * 2)).ceil) do
211
+ img.draw(-_x, 0, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
212
+ img.draw(-_x, -_y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
213
+
214
+ img.draw(0, -_y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
215
+ img.draw(_x, -_y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
216
+
217
+ img.draw(_x, 0, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
218
+ img.draw(_x, _y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
219
+
220
+ img.draw(0, _y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
221
+ img.draw(-_x, _y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
222
+ end
223
+ end
224
+
225
+ @cached_text_shadow_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font, align: @alignment) if @shadow
226
+
227
+ @gosu_cached_text_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font, align: @alignment)
228
+
229
+ @cached_text_border_image.draw(@x, @y, @z, @factor_x, @factor_y, @border_color, @mode) if @border
230
+
231
+ @cached_text_shadow_image.draw(@x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, @shadow_color, @mode) if @shadow
232
+
233
+ @gosu_cached_text_image.draw(@x, @y, @z, @factor_x, @factor_y, @color, @mode)
234
+ else
235
+ if @border && !ARGV.join.include?("--no-border")
236
+ border_alpha = @color.alpha <= 30 ? @color.alpha : @border_alpha
237
+ border_color = @border_color || Gosu::Color.rgba(@color.red, @color.green, @color.blue,
238
+ border_alpha)
239
+ white = Gosu::Color::WHITE
240
+
241
+ _x = @border_size
242
+ _y = @border_size
243
+ _width = method == :draw_markup ? text_width : markup_width
244
+
245
+ @cached_text_border_image ||= Gosu.render((_width + (border_size * 2)).ceil, (height + (@border_size * 2)).ceil) do
246
+ @textobject.send(method, @text, _x - @border_size, _y, @z, @factor_x, @factor_y, white, @mode)
247
+ @textobject.send(method, @text, _x - @border_size, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
248
+
249
+ @textobject.send(method, @text, _x, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
250
+ @textobject.send(method, @text, _x + @border_size, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
251
+
252
+ @textobject.send(method, @text, _x, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
253
+ @textobject.send(method, @text, _x - @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
254
+
255
+ @textobject.send(method, @text, _x + @border_size, _y, @z, @factor_x, @factor_y, white, @mode)
256
+ @textobject.send(method, @text, _x + @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
257
+ end
258
+
259
+ @cached_text_border_image.draw(@x - @border_size, @y - @border_size, @z, @factor_x, @factor_y, border_color, @mode)
260
+ end
261
+
262
+ if @shadow
263
+ shadow_color = @shadow_color || Gosu::Color.rgba(@color.red, @color.green, @color.blue, @shadow_alpha)
264
+ @textobject.send(method, @text, @x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, shadow_color, @mode)
265
+ end
266
+
267
+ @textobject.send(method, @text, @x, @y, @z, @factor_x, @factor_y, @color, @mode)
268
+ end
269
+ end
270
+
271
+ def alpha=(n)
272
+ @color = Gosu::Color.rgba(@color.red, @color.green, @color.blue, n)
273
+ end
274
+
275
+ def alpha
276
+ @color.alpha
277
+ end
278
+
279
+ def update
280
+ end
281
+
282
+ def invalidate_cache!
283
+ @cached_text_border_image = nil
284
+ @cached_text_shadow_image = nil
285
+ @gosu_cached_text_image = nil
286
+ end
287
+ end
288
+ end
@@ -1,23 +1,27 @@
1
- module CyberarmEngine
2
- class Timer
3
- def initialize(interval, looping = true, &block)
4
- @interval = interval
5
- @looping = looping
6
- @block = block
7
-
8
- @last_interval = Gosu.milliseconds
9
- @triggered = false
10
- end
11
-
12
- def update
13
- return if !@looping && @triggered
14
-
15
- if Gosu.milliseconds >= @last_interval + @interval
16
- @last_interval = Gosu.milliseconds
17
- @triggered = true
18
-
19
- @block.call if @block
20
- end
21
- end
22
- end
23
- end
1
+ module CyberarmEngine
2
+ class Timer
3
+ def initialize(interval, looping = true, &block)
4
+ @interval = interval
5
+ @looping = looping
6
+ @block = block
7
+
8
+ @last_interval = Gosu.milliseconds
9
+ @triggered = false
10
+ end
11
+
12
+ def update
13
+ return if !@looping && @triggered
14
+
15
+ if Gosu.milliseconds >= @last_interval + @interval
16
+ @last_interval = Gosu.milliseconds
17
+ @triggered = true
18
+
19
+ @block.call if @block
20
+ end
21
+ end
22
+
23
+ def dead?
24
+ @triggered && !@looping
25
+ end
26
+ end
27
+ end