cyberarm_engine 0.19.0 → 0.19.1

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -8
  3. data/.rubocop.yml +7 -7
  4. data/.travis.yml +5 -5
  5. data/Gemfile +6 -6
  6. data/LICENSE.txt +21 -21
  7. data/README.md +74 -74
  8. data/Rakefile +10 -10
  9. data/bin/console +14 -14
  10. data/bin/setup +8 -8
  11. data/cyberarm_engine.gemspec +39 -39
  12. data/lib/cyberarm_engine/animator.rb +219 -219
  13. data/lib/cyberarm_engine/background.rb +179 -179
  14. data/lib/cyberarm_engine/background_nine_slice.rb +142 -142
  15. data/lib/cyberarm_engine/bounding_box.rb +150 -150
  16. data/lib/cyberarm_engine/builtin/intro_state.rb +130 -130
  17. data/lib/cyberarm_engine/cache/download_manager.rb +121 -121
  18. data/lib/cyberarm_engine/cache.rb +4 -4
  19. data/lib/cyberarm_engine/common.rb +113 -113
  20. data/lib/cyberarm_engine/config_file.rb +46 -46
  21. data/lib/cyberarm_engine/console/command.rb +157 -157
  22. data/lib/cyberarm_engine/console/commands/help_command.rb +43 -43
  23. data/lib/cyberarm_engine/console/subcommand.rb +99 -99
  24. data/lib/cyberarm_engine/console.rb +248 -248
  25. data/lib/cyberarm_engine/game_object.rb +248 -248
  26. data/lib/cyberarm_engine/game_state.rb +97 -97
  27. data/lib/cyberarm_engine/model/material.rb +21 -21
  28. data/lib/cyberarm_engine/model/model_object.rb +131 -131
  29. data/lib/cyberarm_engine/model/parser.rb +74 -74
  30. data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -138
  31. data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -154
  32. data/lib/cyberarm_engine/model.rb +212 -212
  33. data/lib/cyberarm_engine/model_cache.rb +31 -31
  34. data/lib/cyberarm_engine/opengl/light.rb +50 -50
  35. data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -46
  36. data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -38
  37. data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -249
  38. data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -164
  39. data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +298 -298
  40. data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -22
  41. data/lib/cyberarm_engine/opengl/shader.rb +406 -406
  42. data/lib/cyberarm_engine/opengl/texture.rb +69 -69
  43. data/lib/cyberarm_engine/opengl.rb +28 -28
  44. data/lib/cyberarm_engine/ray.rb +56 -56
  45. data/lib/cyberarm_engine/stats.rb +21 -21
  46. data/lib/cyberarm_engine/text.rb +197 -197
  47. data/lib/cyberarm_engine/timer.rb +23 -23
  48. data/lib/cyberarm_engine/transform.rb +296 -296
  49. data/lib/cyberarm_engine/ui/border_canvas.rb +102 -102
  50. data/lib/cyberarm_engine/ui/dsl.rb +139 -139
  51. data/lib/cyberarm_engine/ui/element.rb +488 -488
  52. data/lib/cyberarm_engine/ui/elements/button.rb +97 -97
  53. data/lib/cyberarm_engine/ui/elements/check_box.rb +54 -54
  54. data/lib/cyberarm_engine/ui/elements/container.rb +256 -256
  55. data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -179
  56. data/lib/cyberarm_engine/ui/elements/edit_line.rb +263 -263
  57. data/lib/cyberarm_engine/ui/elements/flow.rb +15 -15
  58. data/lib/cyberarm_engine/ui/elements/image.rb +72 -72
  59. data/lib/cyberarm_engine/ui/elements/list_box.rb +88 -82
  60. data/lib/cyberarm_engine/ui/elements/progress.rb +51 -51
  61. data/lib/cyberarm_engine/ui/elements/radio.rb +6 -6
  62. data/lib/cyberarm_engine/ui/elements/slider.rb +104 -104
  63. data/lib/cyberarm_engine/ui/elements/stack.rb +11 -11
  64. data/lib/cyberarm_engine/ui/elements/text_block.rb +162 -162
  65. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +65 -65
  66. data/lib/cyberarm_engine/ui/event.rb +54 -54
  67. data/lib/cyberarm_engine/ui/gui_state.rb +256 -256
  68. data/lib/cyberarm_engine/ui/style.rb +49 -49
  69. data/lib/cyberarm_engine/ui/theme.rb +207 -207
  70. data/lib/cyberarm_engine/vector.rb +293 -293
  71. data/lib/cyberarm_engine/version.rb +4 -4
  72. data/lib/cyberarm_engine/window.rb +120 -120
  73. data/lib/cyberarm_engine.rb +71 -71
  74. metadata +3 -3
@@ -1,263 +1,263 @@
1
- module CyberarmEngine
2
- class Element
3
- class EditLine < Button
4
- def initialize(text, options = {}, block = nil)
5
- @filter = options.delete(:filter)
6
- super(text, options, block)
7
-
8
- @type = default(:type)
9
-
10
- @caret_width = default(:caret_width)
11
- @caret_height = @text.textobject.height
12
- @caret_color = default(:caret_color)
13
- @caret_interval = default(:caret_interval)
14
- @caret_last_interval = Gosu.milliseconds
15
- @show_caret = true
16
-
17
- @text_input = Gosu::TextInput.new
18
- @text_input.text = text
19
- @last_text_value = text
20
-
21
- if @filter && @filter.respond_to?(:call)
22
- @text_input.instance_variable_set(:@filter, @filter)
23
-
24
- def @text_input.filter(text_in)
25
- @filter.call(text_in)
26
- end
27
- end
28
-
29
- @offset_x = 0
30
- @offset_y = 0
31
-
32
- event(:begin_drag)
33
- event(:drag_update)
34
- event(:end_drag)
35
- end
36
-
37
- def render
38
- Gosu.clip_to(@text.x, @text.y, @width, @height) do
39
- Gosu.translate(-@offset_x, -@offset_y) do
40
- draw_selection
41
- draw_caret if @focus && @show_caret
42
- draw_text
43
- end
44
- end
45
- end
46
-
47
- def draw_text
48
- @text.draw(:draw_text)
49
- end
50
-
51
- def draw_caret
52
- Gosu.draw_rect(caret_position, @text.y, @caret_width, @caret_height, @caret_color, @z)
53
- end
54
-
55
- def draw_selection
56
- selection_width = caret_position - selection_start_position
57
-
58
- Gosu.draw_rect(selection_start_position, @text.y, selection_width, @text.height, default(:selection_color), @z)
59
- end
60
-
61
- def update
62
- @style_event = :active if @focus
63
-
64
- @text.text = if @type == :password
65
- default(:password_character) * @text_input.text.length
66
- else
67
- @text_input.text
68
- end
69
-
70
- if @last_text_value != value
71
- @last_text_value = value
72
- @show_caret = true
73
- @caret_last_interval = Gosu.milliseconds
74
-
75
- publish(:changed, value)
76
- end
77
-
78
- if Gosu.milliseconds >= @caret_last_interval + @caret_interval
79
- @caret_last_interval = Gosu.milliseconds
80
-
81
- @show_caret = !@show_caret
82
- end
83
-
84
- keep_caret_visible
85
- end
86
-
87
- def button_down(id)
88
- handle_keyboard_shortcuts(id)
89
- end
90
-
91
- def handle_keyboard_shortcuts(id)
92
- return unless @focus && @enabled
93
-
94
- if Gosu.button_down?(Gosu::KB_LEFT_CONTROL) || Gosu.button_down?(Gosu::KB_RIGHT_CONTROL)
95
- case id
96
- when Gosu::KB_A
97
- @text_input.selection_start = 0
98
- @text_input.caret_pos = @text_input.text.length
99
-
100
- when Gosu::KB_C
101
- if @text_input.selection_start < @text_input.caret_pos
102
- Clipboard.copy(@text_input.text[@text_input.selection_start...@text_input.caret_pos])
103
- else
104
- Clipboard.copy(@text_input.text[@text_input.caret_pos...@text_input.selection_start])
105
- end
106
-
107
- when Gosu::KB_X
108
- chars = @text_input.text.chars
109
-
110
- if @text_input.selection_start < @text_input.caret_pos
111
- Clipboard.copy(@text_input.text[@text_input.selection_start...@text_input.caret_pos])
112
- chars.slice!(@text_input.selection_start, @text_input.caret_pos)
113
- else
114
- Clipboard.copy(@text_input.text[@text_input.caret_pos...@text_input.selection_start])
115
- chars.slice!(@text_input.caret_pos, @text_input.selection_start)
116
- end
117
-
118
- @text_input.text = chars.join
119
-
120
- when Gosu::KB_V
121
- if instance_of?(EditLine) # EditLine assumes a single line of text
122
- @text_input.text = @text_input.text.insert(@text_input.caret_pos,
123
- Clipboard.paste.encode("UTF-8").gsub("\n", ""))
124
- else
125
- @text_input.text = @text_input.text.insert(@text_input.caret_pos, Clipboard.paste.encode("UTF-8"))
126
- end
127
- end
128
- end
129
- end
130
-
131
- def caret_position_under_mouse(mouse_x)
132
- 1.upto(@text.text.length) do |i|
133
- return i - 1 if mouse_x < @text.x - @offset_x + @text.width(@text.text[0...i])
134
- end
135
-
136
- @text_input.text.length
137
- end
138
-
139
- def move_caret_to_mouse(mouse_x, _mouse_y)
140
- @text_input.caret_pos = @text_input.selection_start = caret_position_under_mouse(mouse_x)
141
- end
142
-
143
- def keep_caret_visible
144
- caret_pos = (caret_position - @text.x) + @caret_width
145
-
146
- @last_text ||= "/\\"
147
- @last_pos ||= -1
148
-
149
- @last_text = @text.text
150
- @last_pos = caret_pos
151
-
152
- if caret_pos.between?(@offset_x, @width + @offset_x)
153
- # Do nothing
154
-
155
- elsif caret_pos < @offset_x
156
- @offset_x = if caret_pos > @width
157
- caret_pos + @width
158
- else
159
- 0
160
- end
161
-
162
- elsif caret_pos > @width
163
- @offset_x = caret_pos - @width
164
-
165
- else
166
- # Reset to Zero
167
- @offset_x = 0
168
- end
169
- end
170
-
171
- def caret_position
172
- text_input_position_for(:caret_pos)
173
- end
174
-
175
- def selection_start_position
176
- text_input_position_for(:selection_start)
177
- end
178
-
179
- def text_input_position_for(method)
180
- if @type == :password
181
- @text.x + @text.width(default(:password_character) * @text_input.text[0...@text_input.send(method)].length)
182
- else
183
- @text.x + @text.width(@text_input.text[0...@text_input.send(method)])
184
- end
185
- end
186
-
187
- def left_mouse_button(sender, x, y)
188
- super
189
- window.text_input = @text_input
190
-
191
- @caret_last_interval = Gosu.milliseconds
192
- @show_caret = true
193
-
194
- move_caret_to_mouse(x, y)
195
-
196
- :handled
197
- end
198
-
199
- def focus(sender)
200
- super
201
-
202
- window.text_input = @text_input
203
- @text_input.caret_pos = @text_input.selection_start = @text_input.text.length
204
-
205
- :handled
206
- end
207
-
208
- def enter(sender)
209
- _has_focus = @focus
210
-
211
- super
212
-
213
- @focus = _has_focus
214
-
215
- :handled
216
- end
217
-
218
- def blur(_sender)
219
- super
220
- window.text_input = nil
221
-
222
- :handled
223
- end
224
-
225
- def draggable?(button)
226
- button == :left
227
- end
228
-
229
- def begin_drag(_sender, x, _y, _button)
230
- @drag_start = x
231
- @offset_drag_start = @offset_x
232
- @drag_caret_position = @text_input.caret_pos
233
-
234
- :handled
235
- end
236
-
237
- def drag_update(_sender, x, _y, _button)
238
- @text_input.caret_pos = caret_position_under_mouse(x)
239
-
240
- :handled
241
- end
242
-
243
- def end_drag(_sender, _x, _y, _button)
244
- :handled
245
- end
246
-
247
- def recalculate
248
- super
249
-
250
- @width = dimensional_size(@style.width, :width) || default(:width)
251
- update_background
252
- end
253
-
254
- def value
255
- @text_input.text
256
- end
257
-
258
- def value=(string)
259
- @text_input.text = string
260
- end
261
- end
262
- end
263
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class EditLine < Button
4
+ def initialize(text, options = {}, block = nil)
5
+ @filter = options.delete(:filter)
6
+ super(text, options, block)
7
+
8
+ @type = default(:type)
9
+
10
+ @caret_width = default(:caret_width)
11
+ @caret_height = @text.textobject.height
12
+ @caret_color = default(:caret_color)
13
+ @caret_interval = default(:caret_interval)
14
+ @caret_last_interval = Gosu.milliseconds
15
+ @show_caret = true
16
+
17
+ @text_input = Gosu::TextInput.new
18
+ @text_input.text = text
19
+ @last_text_value = text
20
+
21
+ if @filter && @filter.respond_to?(:call)
22
+ @text_input.instance_variable_set(:@filter, @filter)
23
+
24
+ def @text_input.filter(text_in)
25
+ @filter.call(text_in)
26
+ end
27
+ end
28
+
29
+ @offset_x = 0
30
+ @offset_y = 0
31
+
32
+ event(:begin_drag)
33
+ event(:drag_update)
34
+ event(:end_drag)
35
+ end
36
+
37
+ def render
38
+ Gosu.clip_to(@text.x, @text.y, @width, @height) do
39
+ Gosu.translate(-@offset_x, -@offset_y) do
40
+ draw_selection
41
+ draw_caret if @focus && @show_caret
42
+ draw_text
43
+ end
44
+ end
45
+ end
46
+
47
+ def draw_text
48
+ @text.draw(:draw_text)
49
+ end
50
+
51
+ def draw_caret
52
+ Gosu.draw_rect(caret_position, @text.y, @caret_width, @caret_height, @caret_color, @z)
53
+ end
54
+
55
+ def draw_selection
56
+ selection_width = caret_position - selection_start_position
57
+
58
+ Gosu.draw_rect(selection_start_position, @text.y, selection_width, @text.height, default(:selection_color), @z)
59
+ end
60
+
61
+ def update
62
+ @style_event = :active if @focus
63
+
64
+ @text.text = if @type == :password
65
+ default(:password_character) * @text_input.text.length
66
+ else
67
+ @text_input.text
68
+ end
69
+
70
+ if @last_text_value != value
71
+ @last_text_value = value
72
+ @show_caret = true
73
+ @caret_last_interval = Gosu.milliseconds
74
+
75
+ publish(:changed, value)
76
+ end
77
+
78
+ if Gosu.milliseconds >= @caret_last_interval + @caret_interval
79
+ @caret_last_interval = Gosu.milliseconds
80
+
81
+ @show_caret = !@show_caret
82
+ end
83
+
84
+ keep_caret_visible
85
+ end
86
+
87
+ def button_down(id)
88
+ handle_keyboard_shortcuts(id)
89
+ end
90
+
91
+ def handle_keyboard_shortcuts(id)
92
+ return unless @focus && @enabled
93
+
94
+ if Gosu.button_down?(Gosu::KB_LEFT_CONTROL) || Gosu.button_down?(Gosu::KB_RIGHT_CONTROL)
95
+ case id
96
+ when Gosu::KB_A
97
+ @text_input.selection_start = 0
98
+ @text_input.caret_pos = @text_input.text.length
99
+
100
+ when Gosu::KB_C
101
+ if @text_input.selection_start < @text_input.caret_pos
102
+ Clipboard.copy(@text_input.text[@text_input.selection_start...@text_input.caret_pos])
103
+ else
104
+ Clipboard.copy(@text_input.text[@text_input.caret_pos...@text_input.selection_start])
105
+ end
106
+
107
+ when Gosu::KB_X
108
+ chars = @text_input.text.chars
109
+
110
+ if @text_input.selection_start < @text_input.caret_pos
111
+ Clipboard.copy(@text_input.text[@text_input.selection_start...@text_input.caret_pos])
112
+ chars.slice!(@text_input.selection_start, @text_input.caret_pos)
113
+ else
114
+ Clipboard.copy(@text_input.text[@text_input.caret_pos...@text_input.selection_start])
115
+ chars.slice!(@text_input.caret_pos, @text_input.selection_start)
116
+ end
117
+
118
+ @text_input.text = chars.join
119
+
120
+ when Gosu::KB_V
121
+ if instance_of?(EditLine) # EditLine assumes a single line of text
122
+ @text_input.text = @text_input.text.insert(@text_input.caret_pos,
123
+ Clipboard.paste.encode("UTF-8").gsub("\n", ""))
124
+ else
125
+ @text_input.text = @text_input.text.insert(@text_input.caret_pos, Clipboard.paste.encode("UTF-8"))
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ def caret_position_under_mouse(mouse_x)
132
+ 1.upto(@text.text.length) do |i|
133
+ return i - 1 if mouse_x < @text.x - @offset_x + @text.width(@text.text[0...i])
134
+ end
135
+
136
+ @text_input.text.length
137
+ end
138
+
139
+ def move_caret_to_mouse(mouse_x, _mouse_y)
140
+ @text_input.caret_pos = @text_input.selection_start = caret_position_under_mouse(mouse_x)
141
+ end
142
+
143
+ def keep_caret_visible
144
+ caret_pos = (caret_position - @text.x) + @caret_width
145
+
146
+ @last_text ||= "/\\"
147
+ @last_pos ||= -1
148
+
149
+ @last_text = @text.text
150
+ @last_pos = caret_pos
151
+
152
+ if caret_pos.between?(@offset_x, @width + @offset_x)
153
+ # Do nothing
154
+
155
+ elsif caret_pos < @offset_x
156
+ @offset_x = if caret_pos > @width
157
+ caret_pos + @width
158
+ else
159
+ 0
160
+ end
161
+
162
+ elsif caret_pos > @width
163
+ @offset_x = caret_pos - @width
164
+
165
+ else
166
+ # Reset to Zero
167
+ @offset_x = 0
168
+ end
169
+ end
170
+
171
+ def caret_position
172
+ text_input_position_for(:caret_pos)
173
+ end
174
+
175
+ def selection_start_position
176
+ text_input_position_for(:selection_start)
177
+ end
178
+
179
+ def text_input_position_for(method)
180
+ if @type == :password
181
+ @text.x + @text.width(default(:password_character) * @text_input.text[0...@text_input.send(method)].length)
182
+ else
183
+ @text.x + @text.width(@text_input.text[0...@text_input.send(method)])
184
+ end
185
+ end
186
+
187
+ def left_mouse_button(sender, x, y)
188
+ super
189
+ window.text_input = @text_input
190
+
191
+ @caret_last_interval = Gosu.milliseconds
192
+ @show_caret = true
193
+
194
+ move_caret_to_mouse(x, y)
195
+
196
+ :handled
197
+ end
198
+
199
+ def focus(sender)
200
+ super
201
+
202
+ window.text_input = @text_input
203
+ @text_input.caret_pos = @text_input.selection_start = @text_input.text.length
204
+
205
+ :handled
206
+ end
207
+
208
+ def enter(sender)
209
+ _has_focus = @focus
210
+
211
+ super
212
+
213
+ @focus = _has_focus
214
+
215
+ :handled
216
+ end
217
+
218
+ def blur(_sender)
219
+ super
220
+ window.text_input = nil
221
+
222
+ :handled
223
+ end
224
+
225
+ def draggable?(button)
226
+ button == :left
227
+ end
228
+
229
+ def begin_drag(_sender, x, _y, _button)
230
+ @drag_start = x
231
+ @offset_drag_start = @offset_x
232
+ @drag_caret_position = @text_input.caret_pos
233
+
234
+ :handled
235
+ end
236
+
237
+ def drag_update(_sender, x, _y, _button)
238
+ @text_input.caret_pos = caret_position_under_mouse(x)
239
+
240
+ :handled
241
+ end
242
+
243
+ def end_drag(_sender, _x, _y, _button)
244
+ :handled
245
+ end
246
+
247
+ def recalculate
248
+ super
249
+
250
+ @width = dimensional_size(@style.width, :width) || default(:width)
251
+ update_background
252
+ end
253
+
254
+ def value
255
+ @text_input.text
256
+ end
257
+
258
+ def value=(string)
259
+ @text_input.text = string
260
+ end
261
+ end
262
+ end
263
+ end
@@ -1,15 +1,15 @@
1
- module CyberarmEngine
2
- class Element
3
- class Flow < Container
4
- def layout
5
- @children.each do |child|
6
- if fits_on_line?(child)
7
- position_on_current_line(child)
8
- else
9
- position_on_next_line(child)
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class Flow < Container
4
+ def layout
5
+ @children.each do |child|
6
+ if fits_on_line?(child)
7
+ position_on_current_line(child)
8
+ else
9
+ position_on_next_line(child)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end