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,167 +1,167 @@
1
- module CyberarmEngine
2
- class GBuffer
3
- include OpenGL
4
-
5
- attr_reader :screen_vbo, :vertices, :uvs
6
- attr_reader :width, :height
7
-
8
- def initialize(width:, height:)
9
- @width = width
10
- @height = height
11
-
12
- @framebuffer = nil
13
- @buffers = %i[position diffuse normal texcoord]
14
- @textures = {}
15
- @screen_vbo = nil
16
- @ready = false
17
-
18
- @vertices = [
19
- -1.0, -1.0, 0,
20
- 1.0, -1.0, 0,
21
- -1.0, 1.0, 0,
22
-
23
- -1.0, 1.0, 0,
24
- 1.0, -1.0, 0,
25
- 1.0, 1.0, 0
26
- ].freeze
27
-
28
- @uvs = [
29
- 0, 0,
30
- 1, 0,
31
- 0, 1,
32
-
33
- 0, 1,
34
- 1, 0,
35
- 1, 1
36
- ].freeze
37
-
38
- create_framebuffer
39
- create_screen_vbo
40
- end
41
-
42
- def create_framebuffer
43
- buffer = " " * 4
44
- glGenFramebuffers(1, buffer)
45
- @framebuffer = buffer.unpack1("L2")
46
-
47
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, @framebuffer)
48
-
49
- create_textures
50
-
51
- status = glCheckFramebufferStatus(GL_FRAMEBUFFER)
52
-
53
- if status != GL_FRAMEBUFFER_COMPLETE
54
- message = ""
55
-
56
- message = case status
57
- when GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
58
- "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
59
- when GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
60
- "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"
61
- when GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER
62
- "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"
63
- when GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER
64
- "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"
65
- when GL_FRAMEBUFFER_UNSUPPORTED
66
- "GL_FRAMEBUFFER_UNSUPPORTED"
67
- else
68
- "Unknown error!"
69
- end
70
- puts "Incomplete framebuffer: #{status}\nError: #{message}"
71
- else
72
- @ready = true
73
- end
74
-
75
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0)
76
- end
77
-
78
- def create_textures
79
- @buffers.size.times do |i|
80
- buffer = " " * 4
81
- glGenTextures(1, buffer)
82
- texture_id = buffer.unpack1("L2")
83
- @textures[@buffers[i]] = texture_id
84
-
85
- glBindTexture(GL_TEXTURE_2D, texture_id)
86
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, @width, @height, 0, GL_RGBA, GL_FLOAT, nil)
87
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
88
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
89
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, texture_id, 0)
90
- end
91
-
92
- buffer = " " * 4
93
- glGenTextures(1, buffer)
94
- texture_id = buffer.unpack1("L2")
95
- @textures[:depth] = texture_id
96
-
97
- glBindTexture(GL_TEXTURE_2D, texture_id)
98
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, @width, @height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nil)
99
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texture_id, 0)
100
-
101
- draw_buffers = [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3]
102
- glDrawBuffers(draw_buffers.size, draw_buffers.pack("I*"))
103
- end
104
-
105
- def create_screen_vbo
106
- buffer = " " * 4
107
- glGenVertexArrays(1, buffer)
108
- @screen_vbo = buffer.unpack1("L2")
109
-
110
- buffer = " " * 4
111
- glGenBuffers(1, buffer)
112
- @positions_buffer_id = buffer.unpack1("L2")
113
-
114
- buffer = " " * 4
115
- glGenBuffers(1, buffer)
116
- @uvs_buffer_id = buffer.unpack1("L2")
117
-
118
- glBindVertexArray(@screen_vbo)
119
- glBindBuffer(GL_ARRAY_BUFFER, @positions_buffer_id)
120
- glBufferData(GL_ARRAY_BUFFER, @vertices.size * Fiddle::SIZEOF_FLOAT, @vertices.pack("f*"), GL_STATIC_DRAW)
121
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nil)
122
-
123
- glBindBuffer(GL_ARRAY_BUFFER, @uvs_buffer_id)
124
- glBufferData(GL_ARRAY_BUFFER, @uvs.size * Fiddle::SIZEOF_FLOAT, @uvs.pack("f*"), GL_STATIC_DRAW)
125
- glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, nil)
126
-
127
- glEnableVertexAttribArray(0)
128
- glEnableVertexAttribArray(1)
129
-
130
- glBindVertexArray(0)
131
- end
132
-
133
- def bind_for_writing
134
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, @framebuffer)
135
- end
136
-
137
- def bind_for_reading
138
- glBindFramebuffer(GL_READ_FRAMEBUFFER, @framebuffer)
139
- end
140
-
141
- def set_read_buffer(buffer)
142
- glReadBuffer(GL_COLOR_ATTACHMENT0 + @textures.keys.index(buffer))
143
- end
144
-
145
- def set_read_buffer_depth
146
- glReadBuffer(GL_DEPTH_ATTACHMENT)
147
- end
148
-
149
- def unbind_framebuffer
150
- glBindFramebuffer(GL_FRAMEBUFFER, 0)
151
- end
152
-
153
- def texture(type)
154
- @textures[type]
155
- end
156
-
157
- def clean_up
158
- glDeleteFramebuffers(1, [@framebuffer].pack("L"))
159
-
160
- glDeleteTextures(@textures.values.size, @textures.values.pack("L*"))
161
-
162
- glDeleteBuffers(2, [@positions_buffer_id, @uvs_buffer_id].pack("L*"))
163
- glDeleteVertexArrays(1, [@screen_vbo].pack("L"))
164
- gl_error?
165
- end
166
- end
167
- end
1
+ module CyberarmEngine
2
+ class GBuffer
3
+ include OpenGL
4
+
5
+ attr_reader :screen_vbo, :vertices, :uvs
6
+ attr_reader :width, :height
7
+
8
+ def initialize(width:, height:)
9
+ @width = width
10
+ @height = height
11
+
12
+ @framebuffer = nil
13
+ @buffers = %i[position diffuse normal texcoord]
14
+ @textures = {}
15
+ @screen_vbo = nil
16
+ @ready = false
17
+
18
+ @vertices = [
19
+ -1.0, -1.0, 0,
20
+ 1.0, -1.0, 0,
21
+ -1.0, 1.0, 0,
22
+
23
+ -1.0, 1.0, 0,
24
+ 1.0, -1.0, 0,
25
+ 1.0, 1.0, 0
26
+ ].freeze
27
+
28
+ @uvs = [
29
+ 0, 0,
30
+ 1, 0,
31
+ 0, 1,
32
+
33
+ 0, 1,
34
+ 1, 0,
35
+ 1, 1
36
+ ].freeze
37
+
38
+ create_framebuffer
39
+ create_screen_vbo
40
+ end
41
+
42
+ def create_framebuffer
43
+ buffer = " " * 4
44
+ glGenFramebuffers(1, buffer)
45
+ @framebuffer = buffer.unpack1("L2")
46
+
47
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, @framebuffer)
48
+
49
+ create_textures
50
+
51
+ status = glCheckFramebufferStatus(GL_FRAMEBUFFER)
52
+
53
+ if status != GL_FRAMEBUFFER_COMPLETE
54
+ message = ""
55
+
56
+ message = case status
57
+ when GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
58
+ "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
59
+ when GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
60
+ "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"
61
+ when GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER
62
+ "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"
63
+ when GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER
64
+ "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"
65
+ when GL_FRAMEBUFFER_UNSUPPORTED
66
+ "GL_FRAMEBUFFER_UNSUPPORTED"
67
+ else
68
+ "Unknown error!"
69
+ end
70
+ puts "Incomplete framebuffer: #{status}\nError: #{message}"
71
+ else
72
+ @ready = true
73
+ end
74
+
75
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0)
76
+ end
77
+
78
+ def create_textures
79
+ @buffers.size.times do |i|
80
+ buffer = " " * 4
81
+ glGenTextures(1, buffer)
82
+ texture_id = buffer.unpack1("L2")
83
+ @textures[@buffers[i]] = texture_id
84
+
85
+ glBindTexture(GL_TEXTURE_2D, texture_id)
86
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, @width, @height, 0, GL_RGBA, GL_FLOAT, nil)
87
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
88
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
89
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, texture_id, 0)
90
+ end
91
+
92
+ buffer = " " * 4
93
+ glGenTextures(1, buffer)
94
+ texture_id = buffer.unpack1("L2")
95
+ @textures[:depth] = texture_id
96
+
97
+ glBindTexture(GL_TEXTURE_2D, texture_id)
98
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, @width, @height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nil)
99
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texture_id, 0)
100
+
101
+ draw_buffers = [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3]
102
+ glDrawBuffers(draw_buffers.size, draw_buffers.pack("I*"))
103
+ end
104
+
105
+ def create_screen_vbo
106
+ buffer = " " * 4
107
+ glGenVertexArrays(1, buffer)
108
+ @screen_vbo = buffer.unpack1("L2")
109
+
110
+ buffer = " " * 4
111
+ glGenBuffers(1, buffer)
112
+ @positions_buffer_id = buffer.unpack1("L2")
113
+
114
+ buffer = " " * 4
115
+ glGenBuffers(1, buffer)
116
+ @uvs_buffer_id = buffer.unpack1("L2")
117
+
118
+ glBindVertexArray(@screen_vbo)
119
+ glBindBuffer(GL_ARRAY_BUFFER, @positions_buffer_id)
120
+ glBufferData(GL_ARRAY_BUFFER, @vertices.size * Fiddle::SIZEOF_FLOAT, @vertices.pack("f*"), GL_STATIC_DRAW)
121
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nil)
122
+
123
+ glBindBuffer(GL_ARRAY_BUFFER, @uvs_buffer_id)
124
+ glBufferData(GL_ARRAY_BUFFER, @uvs.size * Fiddle::SIZEOF_FLOAT, @uvs.pack("f*"), GL_STATIC_DRAW)
125
+ glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, nil)
126
+
127
+ glEnableVertexAttribArray(0)
128
+ glEnableVertexAttribArray(1)
129
+
130
+ glBindVertexArray(0)
131
+ end
132
+
133
+ def bind_for_writing
134
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, @framebuffer)
135
+ end
136
+
137
+ def bind_for_reading
138
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, @framebuffer)
139
+ end
140
+
141
+ def set_read_buffer(buffer)
142
+ glReadBuffer(GL_COLOR_ATTACHMENT0 + @textures.keys.index(buffer))
143
+ end
144
+
145
+ def set_read_buffer_depth
146
+ glReadBuffer(GL_DEPTH_ATTACHMENT)
147
+ end
148
+
149
+ def unbind_framebuffer
150
+ glBindFramebuffer(GL_FRAMEBUFFER, 0)
151
+ end
152
+
153
+ def texture(type)
154
+ @textures[type]
155
+ end
156
+
157
+ def clean_up
158
+ glDeleteFramebuffers(1, [@framebuffer].pack("L"))
159
+
160
+ glDeleteTextures(@textures.values.size, @textures.values.pack("L*"))
161
+
162
+ glDeleteBuffers(2, [@positions_buffer_id, @uvs_buffer_id].pack("L*"))
163
+ glDeleteVertexArrays(1, [@screen_vbo].pack("L"))
164
+ gl_error?
165
+ end
166
+ end
167
+ end