cyberarm_engine 0.25.0 → 0.25.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 (94) 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/Gemfile.lock +25 -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/bin/console +14 -14
  17. data/bin/setup +8 -8
  18. data/cyberarm_engine.gemspec +36 -36
  19. data/lib/cyberarm_engine/animator.rb +219 -219
  20. data/lib/cyberarm_engine/background.rb +158 -158
  21. data/lib/cyberarm_engine/background_image.rb +93 -93
  22. data/lib/cyberarm_engine/background_nine_slice.rb +142 -142
  23. data/lib/cyberarm_engine/bounding_box.rb +150 -150
  24. data/lib/cyberarm_engine/builtin/intro_state.rb +130 -130
  25. data/lib/cyberarm_engine/cache/download_manager.rb +123 -123
  26. data/lib/cyberarm_engine/cache.rb +4 -4
  27. data/lib/cyberarm_engine/common.rb +131 -131
  28. data/lib/cyberarm_engine/config_file.rb +46 -46
  29. data/lib/cyberarm_engine/console/command.rb +157 -157
  30. data/lib/cyberarm_engine/console/commands/help_command.rb +43 -43
  31. data/lib/cyberarm_engine/console/subcommand.rb +99 -99
  32. data/lib/cyberarm_engine/console.rb +248 -248
  33. data/lib/cyberarm_engine/game_object.rb +244 -244
  34. data/lib/cyberarm_engine/game_state.rb +124 -124
  35. data/lib/cyberarm_engine/gosu_ext/draw_arc.rb +111 -111
  36. data/lib/cyberarm_engine/gosu_ext/draw_circle.rb +30 -30
  37. data/lib/cyberarm_engine/gosu_ext/draw_path.rb +17 -17
  38. data/lib/cyberarm_engine/model/material.rb +21 -21
  39. data/lib/cyberarm_engine/model/mesh.rb +131 -131
  40. data/lib/cyberarm_engine/model/parser.rb +74 -74
  41. data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -138
  42. data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -154
  43. data/lib/cyberarm_engine/model.rb +216 -216
  44. data/lib/cyberarm_engine/model_cache.rb +31 -31
  45. data/lib/cyberarm_engine/notification.rb +82 -82
  46. data/lib/cyberarm_engine/notification_manager.rb +241 -241
  47. data/lib/cyberarm_engine/opengl/light.rb +52 -52
  48. data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -46
  49. data/lib/cyberarm_engine/opengl/perspective_camera.rb +41 -41
  50. data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -249
  51. data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +167 -167
  52. data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +307 -307
  53. data/lib/cyberarm_engine/opengl/renderer/renderer.rb +33 -33
  54. data/lib/cyberarm_engine/opengl/shader.rb +408 -408
  55. data/lib/cyberarm_engine/opengl/texture.rb +69 -69
  56. data/lib/cyberarm_engine/opengl.rb +53 -53
  57. data/lib/cyberarm_engine/ray.rb +56 -56
  58. data/lib/cyberarm_engine/result.rb +20 -0
  59. data/lib/cyberarm_engine/stats.rb +200 -200
  60. data/lib/cyberarm_engine/text.rb +260 -260
  61. data/lib/cyberarm_engine/timer.rb +23 -23
  62. data/lib/cyberarm_engine/transform.rb +296 -296
  63. data/lib/cyberarm_engine/trees/aabb_node.rb +126 -126
  64. data/lib/cyberarm_engine/trees/aabb_tree.rb +55 -55
  65. data/lib/cyberarm_engine/trees/aabb_tree_debug.rb +29 -29
  66. data/lib/cyberarm_engine/ui/border_canvas.rb +102 -102
  67. data/lib/cyberarm_engine/ui/dsl.rb +142 -142
  68. data/lib/cyberarm_engine/ui/element.rb +662 -662
  69. data/lib/cyberarm_engine/ui/elements/button.rb +100 -100
  70. data/lib/cyberarm_engine/ui/elements/check_box.rb +54 -54
  71. data/lib/cyberarm_engine/ui/elements/container.rb +407 -407
  72. data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -179
  73. data/lib/cyberarm_engine/ui/elements/edit_line.rb +297 -297
  74. data/lib/cyberarm_engine/ui/elements/flow.rb +15 -15
  75. data/lib/cyberarm_engine/ui/elements/image.rb +72 -72
  76. data/lib/cyberarm_engine/ui/elements/list_box.rb +79 -79
  77. data/lib/cyberarm_engine/ui/elements/menu.rb +27 -27
  78. data/lib/cyberarm_engine/ui/elements/menu_item.rb +6 -6
  79. data/lib/cyberarm_engine/ui/elements/progress.rb +93 -93
  80. data/lib/cyberarm_engine/ui/elements/radio.rb +6 -6
  81. data/lib/cyberarm_engine/ui/elements/slider.rb +107 -107
  82. data/lib/cyberarm_engine/ui/elements/stack.rb +11 -11
  83. data/lib/cyberarm_engine/ui/elements/text_block.rb +222 -222
  84. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +67 -67
  85. data/lib/cyberarm_engine/ui/event.rb +54 -54
  86. data/lib/cyberarm_engine/ui/gui_state.rb +326 -326
  87. data/lib/cyberarm_engine/ui/style.rb +61 -61
  88. data/lib/cyberarm_engine/ui/theme.rb +225 -225
  89. data/lib/cyberarm_engine/vector.rb +312 -312
  90. data/lib/cyberarm_engine/version.rb +4 -4
  91. data/lib/cyberarm_engine/window.rb +195 -195
  92. data/lib/cyberarm_engine.rb +77 -76
  93. data/mrbgem.rake +29 -29
  94. metadata +4 -3
@@ -1,61 +1,61 @@
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 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,225 +1,225 @@
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
+ 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