cyberarm_engine 0.19.0 → 0.19.1

Sign up to get free protection for your applications and to get access to all the features.
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,179 +1,179 @@
1
- module CyberarmEngine
2
- class Element
3
- class EditBox < EditLine
4
- def initialize(*args)
5
- super(*args)
6
-
7
- @active_line = 0
8
-
9
- @repeatable_keys = [
10
- {
11
- key: Gosu::KB_UP,
12
- down: false,
13
- repeat_delay: 50,
14
- last_repeat: 0,
15
- action: proc { move(:up) }
16
- },
17
- {
18
- key: Gosu::KB_DOWN,
19
- down: false,
20
- repeat_delay: 50,
21
- last_repeat: 0,
22
- action: proc { move(:down) }
23
- }
24
- ]
25
- end
26
-
27
- def update
28
- super
29
-
30
- caret_stay_left_of_last_newline
31
- calculate_active_line
32
-
33
- @repeatable_keys.each do |key|
34
- if key[:down] && (Gosu.milliseconds > key[:last_repeat] + key[:repeat_delay])
35
- key[:action].call
36
- key[:last_repeat] = Gosu.milliseconds
37
- end
38
- end
39
- end
40
-
41
- def draw_caret
42
- Gosu.draw_rect(caret_position, @text.y + @active_line * @text.textobject.height, @caret_width, @caret_height,
43
- @caret_color, @z)
44
- end
45
-
46
- def draw_selection
47
- selection_width = caret_position - selection_start_position
48
-
49
- Gosu.draw_rect(selection_start_position, @text.y, selection_width, @text.textobject.height,
50
- default(:selection_color), @z)
51
- end
52
-
53
- def text_input_position_for(_method)
54
- line = @text_input.text[0...@text_input.caret_pos].lines.last
55
- _x = @text.x + @offset_x
56
-
57
- if @type == :password
58
- _x + @text.width(default(:password_character) * line.length)
59
- else
60
- _x + @text.width(line)
61
- end
62
- end
63
-
64
- def set_position(int)
65
- int = 0 if int < 0
66
- @text_input.selection_start = @text_input.caret_pos = int
67
- end
68
-
69
- def calculate_active_line
70
- sub_text = @text_input.text[0...@text_input.caret_pos]
71
- @active_line = sub_text.lines.size - 1
72
- end
73
-
74
- def caret_stay_left_of_last_newline
75
- @text_input.text += "\n" unless @text_input.text.end_with?("\n")
76
-
77
- eof = @text_input.text.chomp.length
78
- set_position(eof) if @text_input.caret_pos > eof
79
- end
80
-
81
- def caret_position_under_mouse(mouse_x, mouse_y)
82
- active_line = row_at(mouse_y)
83
- right_offset = column_at(mouse_x, mouse_y)
84
-
85
- buffer = @text_input.text.lines[0..active_line].join if active_line != 0
86
- buffer = @text_input.text.lines.first if active_line == 0
87
- line = buffer.lines.last
88
-
89
- if buffer.chars.last == "\n"
90
- (buffer.length - line.length) + right_offset - 1
91
- else
92
- (buffer.length - line.length) + right_offset
93
- end
94
- end
95
-
96
- def move_caret_to_mouse(mouse_x, mouse_y)
97
- set_position(caret_position_under_mouse(mouse_x, mouse_y))
98
- end
99
-
100
- def row_at(y)
101
- ((y - @text.y) / @text.textobject.height).round
102
- end
103
-
104
- def column_at(x, y)
105
- row = row_at(y)
106
-
107
- buffer = @text_input.text.lines[0..row].join if row != 0
108
- buffer = @text_input.text.lines.first if row == 0
109
-
110
- line = @text_input.text.lines[row]
111
- line ||= ""
112
- column = 0
113
-
114
- line.length.times do |_i|
115
- break if @text.textobject.text_width(line[0...column]) >= (x - @text.x).clamp(0.0, Float::INFINITY)
116
-
117
- column += 1
118
- end
119
-
120
- column
121
- end
122
-
123
- def button_down(id)
124
- super
125
-
126
- @repeatable_keys.detect do |key|
127
- next unless key[:key] == id
128
-
129
- key[:down] = true
130
- key[:last_repeat] = Gosu.milliseconds + key[:repeat_delay]
131
- return true
132
- end
133
-
134
- case id
135
- when Gosu::KB_ENTER, Gosu::KB_RETURN
136
- caret_pos = @text_input.caret_pos
137
- @text_input.text = @text_input.text.insert(@text_input.caret_pos, "\n")
138
- @text_input.caret_pos = @text_input.selection_start = caret_pos + 1
139
- end
140
- end
141
-
142
- def button_up(id)
143
- super
144
-
145
- @repeatable_keys.detect do |key|
146
- if key[:key] == id
147
- key[:down] = false
148
- return true
149
- end
150
- end
151
- end
152
-
153
- def move(direction)
154
- pos = @text_input.caret_pos
155
- line = nil
156
-
157
- case direction
158
- when :up
159
- return if @active_line == 0
160
- when :down
161
- return if @active_line == @text_input.text.chomp.lines
162
-
163
- text = @text_input.text.chomp.lines[0..@active_line].join("\n")
164
- pos = text.length
165
- end
166
-
167
- set_position(pos)
168
- end
169
-
170
- def drag_update(_sender, x, y, _button)
171
- int = caret_position_under_mouse(x, y)
172
- int = 0 if int < 0
173
- @text_input.caret_pos = int
174
-
175
- :handled
176
- end
177
- end
178
- end
179
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class EditBox < EditLine
4
+ def initialize(*args)
5
+ super(*args)
6
+
7
+ @active_line = 0
8
+
9
+ @repeatable_keys = [
10
+ {
11
+ key: Gosu::KB_UP,
12
+ down: false,
13
+ repeat_delay: 50,
14
+ last_repeat: 0,
15
+ action: proc { move(:up) }
16
+ },
17
+ {
18
+ key: Gosu::KB_DOWN,
19
+ down: false,
20
+ repeat_delay: 50,
21
+ last_repeat: 0,
22
+ action: proc { move(:down) }
23
+ }
24
+ ]
25
+ end
26
+
27
+ def update
28
+ super
29
+
30
+ caret_stay_left_of_last_newline
31
+ calculate_active_line
32
+
33
+ @repeatable_keys.each do |key|
34
+ if key[:down] && (Gosu.milliseconds > key[:last_repeat] + key[:repeat_delay])
35
+ key[:action].call
36
+ key[:last_repeat] = Gosu.milliseconds
37
+ end
38
+ end
39
+ end
40
+
41
+ def draw_caret
42
+ Gosu.draw_rect(caret_position, @text.y + @active_line * @text.textobject.height, @caret_width, @caret_height,
43
+ @caret_color, @z)
44
+ end
45
+
46
+ def draw_selection
47
+ selection_width = caret_position - selection_start_position
48
+
49
+ Gosu.draw_rect(selection_start_position, @text.y, selection_width, @text.textobject.height,
50
+ default(:selection_color), @z)
51
+ end
52
+
53
+ def text_input_position_for(_method)
54
+ line = @text_input.text[0...@text_input.caret_pos].lines.last
55
+ _x = @text.x + @offset_x
56
+
57
+ if @type == :password
58
+ _x + @text.width(default(:password_character) * line.length)
59
+ else
60
+ _x + @text.width(line)
61
+ end
62
+ end
63
+
64
+ def set_position(int)
65
+ int = 0 if int < 0
66
+ @text_input.selection_start = @text_input.caret_pos = int
67
+ end
68
+
69
+ def calculate_active_line
70
+ sub_text = @text_input.text[0...@text_input.caret_pos]
71
+ @active_line = sub_text.lines.size - 1
72
+ end
73
+
74
+ def caret_stay_left_of_last_newline
75
+ @text_input.text += "\n" unless @text_input.text.end_with?("\n")
76
+
77
+ eof = @text_input.text.chomp.length
78
+ set_position(eof) if @text_input.caret_pos > eof
79
+ end
80
+
81
+ def caret_position_under_mouse(mouse_x, mouse_y)
82
+ active_line = row_at(mouse_y)
83
+ right_offset = column_at(mouse_x, mouse_y)
84
+
85
+ buffer = @text_input.text.lines[0..active_line].join if active_line != 0
86
+ buffer = @text_input.text.lines.first if active_line == 0
87
+ line = buffer.lines.last
88
+
89
+ if buffer.chars.last == "\n"
90
+ (buffer.length - line.length) + right_offset - 1
91
+ else
92
+ (buffer.length - line.length) + right_offset
93
+ end
94
+ end
95
+
96
+ def move_caret_to_mouse(mouse_x, mouse_y)
97
+ set_position(caret_position_under_mouse(mouse_x, mouse_y))
98
+ end
99
+
100
+ def row_at(y)
101
+ ((y - @text.y) / @text.textobject.height).round
102
+ end
103
+
104
+ def column_at(x, y)
105
+ row = row_at(y)
106
+
107
+ buffer = @text_input.text.lines[0..row].join if row != 0
108
+ buffer = @text_input.text.lines.first if row == 0
109
+
110
+ line = @text_input.text.lines[row]
111
+ line ||= ""
112
+ column = 0
113
+
114
+ line.length.times do |_i|
115
+ break if @text.textobject.text_width(line[0...column]) >= (x - @text.x).clamp(0.0, Float::INFINITY)
116
+
117
+ column += 1
118
+ end
119
+
120
+ column
121
+ end
122
+
123
+ def button_down(id)
124
+ super
125
+
126
+ @repeatable_keys.detect do |key|
127
+ next unless key[:key] == id
128
+
129
+ key[:down] = true
130
+ key[:last_repeat] = Gosu.milliseconds + key[:repeat_delay]
131
+ return true
132
+ end
133
+
134
+ case id
135
+ when Gosu::KB_ENTER, Gosu::KB_RETURN
136
+ caret_pos = @text_input.caret_pos
137
+ @text_input.text = @text_input.text.insert(@text_input.caret_pos, "\n")
138
+ @text_input.caret_pos = @text_input.selection_start = caret_pos + 1
139
+ end
140
+ end
141
+
142
+ def button_up(id)
143
+ super
144
+
145
+ @repeatable_keys.detect do |key|
146
+ if key[:key] == id
147
+ key[:down] = false
148
+ return true
149
+ end
150
+ end
151
+ end
152
+
153
+ def move(direction)
154
+ pos = @text_input.caret_pos
155
+ line = nil
156
+
157
+ case direction
158
+ when :up
159
+ return if @active_line == 0
160
+ when :down
161
+ return if @active_line == @text_input.text.chomp.lines
162
+
163
+ text = @text_input.text.chomp.lines[0..@active_line].join("\n")
164
+ pos = text.length
165
+ end
166
+
167
+ set_position(pos)
168
+ end
169
+
170
+ def drag_update(_sender, x, y, _button)
171
+ int = caret_position_under_mouse(x, y)
172
+ int = 0 if int < 0
173
+ @text_input.caret_pos = int
174
+
175
+ :handled
176
+ end
177
+ end
178
+ end
179
+ end