cyberarm_engine 0.13.0 → 0.17.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -8
  3. data/.rubocop.yml +8 -0
  4. data/.travis.yml +5 -5
  5. data/Gemfile +6 -6
  6. data/LICENSE.txt +21 -21
  7. data/README.md +73 -43
  8. data/Rakefile +10 -10
  9. data/assets/textures/default.png +0 -0
  10. data/bin/console +14 -14
  11. data/bin/setup +8 -8
  12. data/cyberarm_engine.gemspec +39 -36
  13. data/lib/cyberarm_engine.rb +64 -47
  14. data/lib/cyberarm_engine/animator.rb +56 -54
  15. data/lib/cyberarm_engine/background.rb +179 -175
  16. data/lib/cyberarm_engine/background_nine_slice.rb +125 -0
  17. data/lib/cyberarm_engine/bounding_box.rb +150 -150
  18. data/lib/cyberarm_engine/cache.rb +4 -0
  19. data/lib/cyberarm_engine/cache/download_manager.rb +121 -0
  20. data/lib/cyberarm_engine/common.rb +96 -96
  21. data/lib/cyberarm_engine/config_file.rb +46 -0
  22. data/lib/cyberarm_engine/game_object.rb +248 -257
  23. data/lib/cyberarm_engine/game_state.rb +92 -89
  24. data/lib/cyberarm_engine/model.rb +207 -0
  25. data/lib/cyberarm_engine/model/material.rb +21 -0
  26. data/lib/cyberarm_engine/model/model_object.rb +131 -0
  27. data/lib/cyberarm_engine/model/parser.rb +74 -0
  28. data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -0
  29. data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -0
  30. data/lib/cyberarm_engine/model_cache.rb +31 -0
  31. data/lib/cyberarm_engine/opengl.rb +28 -0
  32. data/lib/cyberarm_engine/opengl/light.rb +50 -0
  33. data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -0
  34. data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -0
  35. data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -0
  36. data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -0
  37. data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +289 -0
  38. data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -0
  39. data/lib/cyberarm_engine/opengl/shader.rb +406 -0
  40. data/lib/cyberarm_engine/opengl/texture.rb +69 -0
  41. data/lib/cyberarm_engine/ray.rb +56 -56
  42. data/lib/cyberarm_engine/stats.rb +21 -0
  43. data/lib/cyberarm_engine/text.rb +160 -146
  44. data/lib/cyberarm_engine/timer.rb +23 -23
  45. data/lib/cyberarm_engine/transform.rb +296 -273
  46. data/lib/cyberarm_engine/ui/border_canvas.rb +102 -101
  47. data/lib/cyberarm_engine/ui/dsl.rb +138 -99
  48. data/lib/cyberarm_engine/ui/element.rb +315 -276
  49. data/lib/cyberarm_engine/ui/elements/button.rb +160 -67
  50. data/lib/cyberarm_engine/ui/elements/check_box.rb +51 -59
  51. data/lib/cyberarm_engine/ui/elements/container.rb +256 -176
  52. data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -0
  53. data/lib/cyberarm_engine/ui/elements/edit_line.rb +262 -172
  54. data/lib/cyberarm_engine/ui/elements/flow.rb +15 -17
  55. data/lib/cyberarm_engine/ui/elements/image.rb +72 -52
  56. data/lib/cyberarm_engine/ui/elements/label.rb +156 -50
  57. data/lib/cyberarm_engine/ui/elements/list_box.rb +82 -0
  58. data/lib/cyberarm_engine/ui/elements/progress.rb +51 -50
  59. data/lib/cyberarm_engine/ui/elements/radio.rb +6 -0
  60. data/lib/cyberarm_engine/ui/elements/slider.rb +104 -0
  61. data/lib/cyberarm_engine/ui/elements/stack.rb +11 -13
  62. data/lib/cyberarm_engine/ui/elements/text_block.rb +156 -0
  63. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +65 -56
  64. data/lib/cyberarm_engine/ui/event.rb +47 -47
  65. data/lib/cyberarm_engine/ui/gui_state.rb +226 -135
  66. data/lib/cyberarm_engine/ui/style.rb +38 -37
  67. data/lib/cyberarm_engine/ui/theme.rb +182 -120
  68. data/lib/cyberarm_engine/vector.rb +293 -203
  69. data/lib/cyberarm_engine/version.rb +4 -4
  70. data/lib/cyberarm_engine/{engine.rb → window.rb} +114 -101
  71. metadata +88 -18
  72. data/lib/cyberarm_engine/gosu_ext/circle.rb +0 -9
  73. data/lib/cyberarm_engine/shader.rb +0 -262
@@ -1,262 +0,0 @@
1
- module CyberarmEngine
2
- # Ref: https://github.com/vaiorabbit/ruby-opengl/blob/master/sample/OrangeBook/brick.rb
3
- class Shader
4
- include OpenGL
5
- @@shaders = {}
6
- PREPROCESSOR_CHARACTER = "@"
7
-
8
- def self.add(name, instance)
9
- @@shaders[name] = instance
10
- end
11
-
12
- def self.use(name, &block)
13
- shader = @@shaders.dig(name)
14
- if shader
15
- shader.use(&block)
16
- else
17
- raise ArgumentError, "Shader '#{name}' not found!"
18
- end
19
- end
20
-
21
- def self.available?(name)
22
- @@shaders.dig(name).is_a?(Shader)
23
- end
24
-
25
- def self.get(name)
26
- @@shaders.dig(name)
27
- end
28
-
29
- def self.active_shader
30
- @active_shader
31
- end
32
-
33
- def self.active_shader=(instance)
34
- @active_shader = instance
35
- end
36
-
37
- def self.stop
38
- shader = Shader.active_shader
39
-
40
- if shader
41
- shader.stop
42
- else
43
- raise ArgumentError, "No active shader to stop!"
44
- end
45
- end
46
-
47
- def self.attribute_location(variable)
48
- raise RuntimeError, "No active shader!" unless Shader.active_shader
49
- Shader.active_shader.attribute_location(variable)
50
- end
51
-
52
- def self.set_uniform(variable, value)
53
- raise RuntimeError, "No active shader!" unless Shader.active_shader
54
- Shader.active_shader.set_uniform(variable, value)
55
- end
56
-
57
- attr_reader :name, :program
58
- def initialize(name:, includes_dir: nil, vertex: "shaders/default.vert", fragment:)
59
- raise "Shader name can not be blank" if name.length == 0
60
-
61
- @name = name
62
- @includes_dir = includes_dir
63
- @compiled = false
64
-
65
- @program = nil
66
-
67
- @error_buffer_size = 1024
68
- @variable_missing = {}
69
-
70
- @data = {shaders: {}}
71
-
72
- unless shader_files_exist?(vertex: vertex, fragment: fragment)
73
- raise ArgumentError, "Shader files not found: #{vertex} or #{fragment}"
74
- end
75
-
76
- create_shader(type: :vertex, source: File.read(vertex))
77
- create_shader(type: :fragment, source: File.read(fragment))
78
-
79
- compile_shader(type: :vertex)
80
- compile_shader(type: :fragment)
81
- link_shaders
82
-
83
- # Only add shader if it successfully compiles
84
- if @compiled
85
- puts "compiled!"
86
- puts "Compiled shader: #{@name}"
87
- Shader.add(@name, self)
88
- else
89
- warn "FAILED to compile shader: #{@name}", ""
90
- end
91
- end
92
-
93
- def shader_files_exist?(vertex:, fragment:)
94
- File.exist?(vertex) && File.exist?(fragment)
95
- end
96
-
97
- def create_shader(type:, source:)
98
- _shader = nil
99
-
100
- case type
101
- when :vertex
102
- _shader = glCreateShader(GL_VERTEX_SHADER)
103
- when :fragment
104
- _shader = glCreateShader(GL_FRAGMENT_SHADER)
105
- else
106
- warn "Unsupported shader type: #{type.inspect}"
107
- end
108
-
109
- processed_source = preprocess_source(source: source)
110
-
111
- _source = [processed_source].pack("p")
112
- _size = [processed_source.length].pack("I")
113
- glShaderSource(_shader, 1, _source, _size)
114
-
115
- @data[:shaders][type] =_shader
116
- end
117
-
118
- def preprocess_source(source:)
119
- lines = source.lines
120
-
121
- lines.each_with_index do |line, i|
122
- if line.start_with?(PREPROCESSOR_CHARACTER)
123
- preprocessor = line.strip.split(" ")
124
- lines.delete(line)
125
-
126
- case preprocessor.first
127
- when "@include"
128
- raise ArgumentError, "Shader preprocessor include directory was not given for shader #{@name}" unless @includes_dir
129
-
130
- preprocessor[1..preprocessor.length - 1].join.scan(/"([^"]*)"/).flatten.each do |file|
131
- source = File.read("#{@includes_dir}/#{file}.glsl")
132
-
133
- lines.insert(i, source)
134
- end
135
- else
136
- warn "Unsupported preprocessor #{preprocessor.first} for #{@name}"
137
- end
138
- end
139
- end
140
-
141
- lines.join
142
- end
143
-
144
- def compile_shader(type:)
145
- _compiled = false
146
- _shader = @data[:shaders][type]
147
- raise ArgumentError, "No shader for #{type.inspect}" unless _shader
148
-
149
- glCompileShader(_shader)
150
- buffer = ' '
151
- glGetShaderiv(_shader, GL_COMPILE_STATUS, buffer)
152
- compiled = buffer.unpack('L')[0]
153
-
154
- if compiled == 0
155
- log = ' ' * @error_buffer_size
156
- glGetShaderInfoLog(_shader, @error_buffer_size, nil, log)
157
- puts "Shader Error: Program \"#{@name}\""
158
- puts " #{type.to_s.capitalize} Shader InfoLog:", " #{log.strip.split("\n").join("\n ")}\n\n"
159
- puts " Shader Compiled status: #{compiled}"
160
- puts " NOTE: assignment of uniforms in shaders is illegal!"
161
- puts
162
- else
163
- _compiled = true
164
- end
165
-
166
- return _compiled
167
- end
168
-
169
- def link_shaders
170
- @program = glCreateProgram
171
- @data[:shaders].values.each do |_shader|
172
- glAttachShader(@program, _shader)
173
- end
174
- glLinkProgram(@program)
175
-
176
- buffer = ' '
177
- glGetProgramiv(@program, GL_LINK_STATUS, buffer)
178
- linked = buffer.unpack('L')[0]
179
-
180
- if linked == 0
181
- log = ' ' * @error_buffer_size
182
- glGetProgramInfoLog(@program, @error_buffer_size, nil, log)
183
- puts "Shader Error: Program \"#{@name}\""
184
- puts " Program InfoLog:", " #{log.strip.split("\n").join("\n ")}\n\n"
185
- end
186
-
187
- @compiled = linked == 0 ? false : true
188
- end
189
-
190
- # Returns the location of a uniform variable
191
- def variable(variable)
192
- loc = glGetUniformLocation(@program, variable)
193
- if (loc == -1)
194
- puts "Shader Error: Program \"#{@name}\" has no such uniform named \"#{variable}\"", " Is it used in the shader? GLSL may have optimized it out.", " Is it miss spelled?" unless @variable_missing[variable]
195
- @variable_missing[variable] = true
196
- end
197
- return loc
198
- end
199
-
200
- def use(&block)
201
- return unless compiled?
202
- raise "Another shader is already in use! #{Shader.active_shader.name.inspect}" if Shader.active_shader
203
- Shader.active_shader=self
204
-
205
- glUseProgram(@program)
206
-
207
- if block
208
- block.call(self)
209
- stop
210
- end
211
- end
212
-
213
- def stop
214
- Shader.active_shader = nil if Shader.active_shader == self
215
- glUseProgram(0)
216
- end
217
-
218
- def compiled?
219
- @compiled
220
- end
221
-
222
- def attribute_location(variable)
223
- glGetUniformLocation(@program, variable)
224
- end
225
-
226
- def uniform_transform(variable, value, location = nil)
227
- attr_loc = location ? location : attribute_location(variable)
228
-
229
- glUniformMatrix4fv(attr_loc, 1, GL_FALSE, value.to_gl.pack("F16"))
230
- end
231
-
232
- def uniform_boolean(variable, value, location = nil)
233
- attr_loc = location ? location : attribute_location(variable)
234
-
235
- glUniform1i(attr_loc, value ? 1 : 0)
236
- end
237
-
238
- def uniform_integer(variable, value, location = nil)
239
- attr_loc = location ? location : attribute_location(variable)
240
-
241
- glUniform1i(attr_loc, value)
242
- end
243
-
244
- def uniform_float(variable, value, location = nil)
245
- attr_loc = location ? location : attribute_location(variable)
246
-
247
- glUniform1f(attr_loc, value)
248
- end
249
-
250
- def uniform_vec3(variable, value, location = nil)
251
- attr_loc = location ? location : attribute_location(variable)
252
-
253
- glUniform3f(attr_loc, *value.to_a[0..2])
254
- end
255
-
256
- def uniform_vec4(variable, value, location = nil)
257
- attr_loc = location ? location : attribute_location(variable)
258
-
259
- glUniform4f(attr_loc, *value.to_a)
260
- end
261
- end
262
- end