ruby_rpg 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2af1c7ed1b41fa5eaabfdf70e7b3ba0edb82c2af7bf03f5c376e23d8ed16efd1
4
- data.tar.gz: fb36bef8b832479b05401c0eb90522bd255ee40d8ad6357caf75bf40e685322a
3
+ metadata.gz: c328c05de08632fbcec77f982d1bd6e150c200526efa127372f074af4b1637b9
4
+ data.tar.gz: bd7677b6daae32a963efd6147afee0862a06c86dd462914fff7d91f4942e5112
5
5
  SHA512:
6
- metadata.gz: b7976e4dae17174f3483a0ecd4da0fb9ad49a40943d2ad54a31381be28ced45d39c58f5683468f115c37a40d5762603a78121342a44dd16e6b56f87508b6ec94
7
- data.tar.gz: aec55a9871b095a867397b9fe6d78ea0ecf21064c2bc41ec36841818ead2890334ee7faf327942370331f2213c7fb96862898b965e1abfe13cb04045e9a2338e
6
+ metadata.gz: 8faa38680401e6e5b50cee67bf99c40eef7b01dcfa4d9b2e69469e3845b894e247a2d61af58a2c1ea26904821ea0370372ad4a80ff2ce4f40163c6c2f27d1d82
7
+ data.tar.gz: 7eb6191a3068720aa8a47b9b1f44b521a2100e4eff571a7f7456fc289c3c469a64ed474745d152426a4b7df7a672d6740803bbddad8ff2df9468c8c46b9c03a0
data/lib/engine/debug.rb CHANGED
@@ -3,18 +3,28 @@
3
3
  module Engine
4
4
  module Debug
5
5
  @lines = []
6
+ @spheres = []
6
7
 
7
8
  class << self
8
9
  def line(from, to, color: [1, 1, 1])
9
10
  @lines << { from: from, to: to, color: color }
10
11
  end
11
12
 
13
+ def sphere(center, radius, color: [1, 1, 1], segments: 16)
14
+ @spheres << { center: center, radius: radius, color: color, segments: segments }
15
+ end
16
+
12
17
  def lines
13
18
  @lines
14
19
  end
15
20
 
21
+ def spheres
22
+ @spheres
23
+ end
24
+
16
25
  def clear
17
26
  @lines.clear
27
+ @spheres.clear
18
28
  end
19
29
  end
20
30
  end
@@ -7,7 +7,8 @@ module Rendering
7
7
  class << self
8
8
  def draw(target_framebuffer)
9
9
  lines = Engine::Debug.lines
10
- return if lines.empty?
10
+ spheres = Engine::Debug.spheres
11
+ return if lines.empty? && spheres.empty?
11
12
 
12
13
  update_render_texture_size
13
14
 
@@ -20,8 +21,9 @@ module Rendering
20
21
  line_shader.use
21
22
  line_shader.set_mat4('camera', camera_matrix)
22
23
 
23
- update_vertex_data(lines)
24
- draw_lines(lines.size * 2)
24
+ update_vertex_data(lines, spheres)
25
+ vertex_count = lines.size * 2 + spheres.sum { |s| s[:segments] * 3 * 2 }
26
+ draw_lines(vertex_count)
25
27
 
26
28
  # Composite onto main framebuffer
27
29
  Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, target_framebuffer)
@@ -54,7 +56,7 @@ module Rendering
54
56
  @render_texture
55
57
  end
56
58
 
57
- def update_vertex_data(lines)
59
+ def update_vertex_data(lines, spheres)
58
60
  vertex_data = []
59
61
 
60
62
  lines.each do |line|
@@ -65,6 +67,10 @@ module Rendering
65
67
  vertex_data << line[:color][0] << line[:color][1] << line[:color][2]
66
68
  end
67
69
 
70
+ spheres.each do |sphere|
71
+ add_sphere_vertices(vertex_data, sphere)
72
+ end
73
+
68
74
  Engine::GL.BindVertexArray(vao)
69
75
  Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, vbo)
70
76
 
@@ -72,6 +78,40 @@ module Rendering
72
78
  Engine::GL.BufferData(Engine::GL::ARRAY_BUFFER, data.bytesize, data, Engine::GL::DYNAMIC_DRAW)
73
79
  end
74
80
 
81
+ def add_sphere_vertices(vertex_data, sphere)
82
+ center = sphere[:center]
83
+ radius = sphere[:radius]
84
+ color = sphere[:color]
85
+ segments = sphere[:segments]
86
+
87
+ # Generate 3 circles (XY, XZ, YZ planes)
88
+ [
89
+ ->(angle) { [Math.cos(angle), Math.sin(angle), 0] }, # XY plane
90
+ ->(angle) { [Math.cos(angle), 0, Math.sin(angle)] }, # XZ plane
91
+ ->(angle) { [0, Math.cos(angle), Math.sin(angle)] } # YZ plane
92
+ ].each do |plane_fn|
93
+ segments.times do |i|
94
+ angle1 = (i.to_f / segments) * 2 * Math::PI
95
+ angle2 = ((i + 1).to_f / segments) * 2 * Math::PI
96
+
97
+ offset1 = plane_fn.call(angle1)
98
+ offset2 = plane_fn.call(angle2)
99
+
100
+ # Line start vertex
101
+ vertex_data << (center[0] + offset1[0] * radius)
102
+ vertex_data << (center[1] + offset1[1] * radius)
103
+ vertex_data << (center[2] + offset1[2] * radius)
104
+ vertex_data << color[0] << color[1] << color[2]
105
+
106
+ # Line end vertex
107
+ vertex_data << (center[0] + offset2[0] * radius)
108
+ vertex_data << (center[1] + offset2[1] * radius)
109
+ vertex_data << (center[2] + offset2[2] * radius)
110
+ vertex_data << color[0] << color[1] << color[2]
111
+ end
112
+ end
113
+ end
114
+
75
115
  def draw_lines(vertex_count)
76
116
  Engine::GL.BindVertexArray(vao)
77
117
  Engine::GL.DrawArrays(Engine::GL::LINES, 0, vertex_count)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_rpg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Hatfull