graphics 1.0.0b1 → 1.0.0b4

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. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/History.rdoc +30 -0
  5. data/Manifest.txt +39 -7
  6. data/README.rdoc +48 -4
  7. data/Rakefile +8 -2
  8. data/examples/boid.rb +9 -18
  9. data/examples/bounce.rb +15 -23
  10. data/examples/canvas.rb +75 -0
  11. data/examples/collision.rb +6 -6
  12. data/examples/demo.rb +5 -7
  13. data/examples/editor.rb +12 -9
  14. data/examples/fluid.rb +2 -3
  15. data/examples/fluid2.rb +1 -1
  16. data/examples/{lito2.rb → gol.rb} +0 -0
  17. data/examples/{zenspider4.rb → gol2.rb} +0 -0
  18. data/examples/logo.rb +4 -7
  19. data/examples/maze.rb +136 -0
  20. data/examples/tank.rb +10 -11
  21. data/examples/tank2.rb +12 -17
  22. data/examples/targeting.rb +1 -1
  23. data/examples/vants.rb +1 -1
  24. data/examples/walker.rb +3 -12
  25. data/examples/walker2.rb +197 -0
  26. data/examples/zombies.rb +31 -35
  27. data/ext/sdl/extconf.rb +31 -0
  28. data/ext/sdl/sdl.c +1067 -0
  29. data/ext/sdl/sge/INSTALL +72 -0
  30. data/ext/sdl/sge/LICENSE +504 -0
  31. data/ext/sdl/sge/Makefile +83 -0
  32. data/ext/sdl/sge/Makefile.conf +63 -0
  33. data/ext/sdl/sge/README +219 -0
  34. data/ext/sdl/sge/Todo +7 -0
  35. data/ext/sdl/sge/WhatsNew +224 -0
  36. data/ext/sdl/sge/sge.h +31 -0
  37. data/ext/sdl/sge/sge_blib.cpp +1939 -0
  38. data/ext/sdl/sge/sge_blib.h +68 -0
  39. data/ext/sdl/sge/sge_bm_text.cpp +451 -0
  40. data/ext/sdl/sge/sge_bm_text.h +71 -0
  41. data/ext/sdl/sge/sge_collision.cpp +388 -0
  42. data/ext/sdl/sge/sge_collision.h +54 -0
  43. data/ext/sdl/sge/sge_config.h +6 -0
  44. data/ext/sdl/sge/sge_internal.h +152 -0
  45. data/ext/sdl/sge/sge_misc.cpp +92 -0
  46. data/ext/sdl/sge/sge_misc.h +37 -0
  47. data/ext/sdl/sge/sge_primitives.cpp +2516 -0
  48. data/ext/sdl/sge/sge_primitives.h +111 -0
  49. data/ext/sdl/sge/sge_rotation.cpp +683 -0
  50. data/ext/sdl/sge/sge_rotation.h +46 -0
  51. data/ext/sdl/sge/sge_shape.cpp +762 -0
  52. data/ext/sdl/sge/sge_shape.h +365 -0
  53. data/ext/sdl/sge/sge_surface.cpp +1090 -0
  54. data/ext/sdl/sge/sge_surface.h +100 -0
  55. data/ext/sdl/sge/sge_textpp.cpp +785 -0
  56. data/ext/sdl/sge/sge_textpp.h +270 -0
  57. data/ext/sdl/sge/sge_tt_text.cpp +1456 -0
  58. data/ext/sdl/sge/sge_tt_text.h +114 -0
  59. data/graphics_setup.sh +26 -0
  60. data/lib/graphics.rb +1 -1
  61. data/lib/graphics/body.rb +50 -3
  62. data/lib/graphics/extensions.rb +13 -7
  63. data/lib/graphics/simulation.rb +126 -46
  64. data/test/test_graphics.rb +52 -12
  65. data/test/test_sdl.rb +1 -0
  66. metadata +54 -23
  67. metadata.gz.sig +0 -0
  68. data/.gemtest +0 -0
  69. data/examples/lito.rb +0 -108
  70. data/examples/zenspider1.rb +0 -93
  71. data/examples/zenspider2.rb +0 -123
  72. data/examples/zenspider3.rb +0 -104
  73. data/rubysdl_setup.sh +0 -34
@@ -190,6 +190,42 @@ class TestBody < Minitest::Test
190
190
 
191
191
  assert_body 0, 50, 10, 0, 0, b # TODO: maybe should be 9?
192
192
  end
193
+
194
+ def test_angle_to
195
+ # b is at 50, 50
196
+
197
+ b2 = Graphics::Body.new w
198
+
199
+ b2.x, b2.y = 60, 50
200
+ assert_in_epsilon 0, b.angle_to(b2)
201
+
202
+ b2.x, b2.y = 50, 40
203
+ assert_in_epsilon 270, b.angle_to(b2)
204
+
205
+ b2.x, b2.y = 60, 60
206
+ assert_in_epsilon 45, b.angle_to(b2)
207
+
208
+ b2.x, b2.y = 0, 0
209
+ assert_in_epsilon 225, b.angle_to(b2)
210
+ end
211
+
212
+ def test_distance_to_squared
213
+ # b is at 50, 50
214
+
215
+ b2 = Graphics::Body.new w
216
+
217
+ b2.x, b2.y = 60, 50
218
+ assert_in_epsilon 100, b.distance_to_squared(b2)
219
+
220
+ b2.x, b2.y = 50, 40
221
+ assert_in_epsilon 100, b.distance_to_squared(b2)
222
+
223
+ b2.x, b2.y = 60, 60
224
+ assert_in_epsilon((10*Math.sqrt(2))**2, b.distance_to_squared(b2))
225
+
226
+ b2.x, b2.y = 0, 0
227
+ assert_in_epsilon((50*Math.sqrt(2))**2, b.distance_to_squared(b2))
228
+ end
193
229
  end
194
230
 
195
231
  class TestInteger < Minitest::Test
@@ -234,7 +270,7 @@ class TestSimulation < Minitest::Test
234
270
 
235
271
  s = []
236
272
 
237
- def s.method_missing(*a)
273
+ def s.method_missing *a
238
274
  @data ||= []
239
275
  @data << a
240
276
  end
@@ -244,7 +280,6 @@ class TestSimulation < Minitest::Test
244
280
  end
245
281
 
246
282
  self.screen = s
247
-
248
283
  end
249
284
  end
250
285
 
@@ -257,21 +292,23 @@ class TestSimulation < Minitest::Test
257
292
  end
258
293
 
259
294
  def test_angle
295
+ h = t.h-1
296
+
260
297
  t.angle 50, 50, 0, 10, :white
261
- exp << [:draw_line, 50, 50, 60.0, 50.0, white, :antialiased]
298
+ exp << [:draw_line, 50, h-50, 60.0, h-50.0, white]
262
299
 
263
300
  t.angle 50, 50, 90, 10, :white
264
- exp << [:draw_line, 50, 50, 50.0, 40.0, white, :antialiased]
301
+ exp << [:draw_line, 50, 49, 50.0, h-60.0, white]
265
302
 
266
303
  t.angle 50, 50, 180, 10, :white
267
- exp << [:draw_line, 50, 50, 40.0, 50.0, white, :antialiased]
304
+ exp << [:draw_line, 50, h-50, 40.0, h-50.0, white]
268
305
 
269
306
  t.angle 50, 50, 270, 10, :white
270
- exp << [:draw_line, 50, 50, 50.0, 60.0, white, :antialiased]
307
+ exp << [:draw_line, 50, h-50, 50.0, h-40.0, white]
271
308
 
272
309
  t.angle 50, 50, 45, 10, :white
273
310
  d45 = 10 * Math.sqrt(2) / 2
274
- exp << [:draw_line, 50, 50, 50+d45, 50-d45, white, :antialiased]
311
+ exp << [:draw_line, 50, h-50, 50+d45, h-50-d45, white]
275
312
 
276
313
  assert_equal exp, t.screen.data
277
314
  end
@@ -306,7 +343,9 @@ class TestSimulation < Minitest::Test
306
343
 
307
344
  def test_ellipse
308
345
  t.ellipse 0, 0, 25, 25, :white
309
- exp << [:draw_ellipse, 0, t.h-0, 25, 25, t.color[:white], false, :antialiased]
346
+
347
+ h = t.h-1
348
+ exp << [:draw_ellipse, 0, h, 25, 25, t.color[:white]]
310
349
 
311
350
  assert_equal exp, t.screen.data
312
351
  end
@@ -329,8 +368,8 @@ class TestSimulation < Minitest::Test
329
368
 
330
369
  def test_hline
331
370
  t.hline 42, :white
332
- h = t.h
333
- exp << [:draw_line, 0, h-42, 100, h-42, t.color[:white], :antialiased]
371
+ h = t.h - 1
372
+ exp << [:draw_line, 0, h-42, 100, h-42, t.color[:white]]
334
373
 
335
374
  assert_equal exp, t.screen.data
336
375
  end
@@ -341,13 +380,14 @@ class TestSimulation < Minitest::Test
341
380
 
342
381
  def test_line
343
382
  t.line 0, 0, 25, 25, :white
344
- h = t.h
345
- exp << [:draw_line, 0, h-0, 25, h-25, t.color[:white], :antialiased]
383
+ h = t.h - 1
384
+ exp << [:draw_line, 0, h, 25, h-25, t.color[:white]]
346
385
 
347
386
  assert_equal exp, t.screen.data
348
387
  end
349
388
 
350
389
  def test_point
390
+ skip "not yet"
351
391
  t.point 2, 10, :white
352
392
 
353
393
  exp = [nil, nil, t.color[:white]]
@@ -0,0 +1 @@
1
+ # TODO
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0b1
4
+ version: 1.0.0b4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -29,7 +29,7 @@ cert_chain:
29
29
  xJcC6UN6NHMOVMyAXsr2HR0gRRx4ofN1LoP2KhXzSr8UMvQYlwPmE0N5GQv1b5AO
30
30
  VpzF30vNaJK6ZT7xlIsIlwmH
31
31
  -----END CERTIFICATE-----
32
- date: 2015-08-05 00:00:00.000000000 Z
32
+ date: 2015-09-15 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rsdl
@@ -46,61 +46,61 @@ dependencies:
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.1'
48
48
  - !ruby/object:Gem::Dependency
49
- name: rubysdl
49
+ name: minitest
50
50
  requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: '2.2'
55
- type: :runtime
54
+ version: '5.8'
55
+ type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '2.2'
61
+ version: '5.8'
62
62
  - !ruby/object:Gem::Dependency
63
- name: minitest
63
+ name: rdoc
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '5.6'
68
+ version: '4.0'
69
69
  type: :development
70
70
  prerelease: false
71
71
  version_requirements: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: '5.6'
75
+ version: '4.0'
76
76
  - !ruby/object:Gem::Dependency
77
- name: rdoc
77
+ name: rake-compiler
78
78
  requirement: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: '4.0'
82
+ version: '0.9'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: '4.0'
89
+ version: '0.9'
90
90
  - !ruby/object:Gem::Dependency
91
91
  name: hoe
92
92
  requirement: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: '3.13'
96
+ version: '3.14'
97
97
  type: :development
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: '3.13'
103
+ version: '3.14'
104
104
  description: |-
105
105
  Graphics provides a simple framework to implement games and/or
106
106
  simulations and is designed to follow mathematical conventions, NOT
@@ -124,33 +124,64 @@ extra_rdoc_files:
124
124
  - README.rdoc
125
125
  files:
126
126
  - .autotest
127
- - .gemtest
128
127
  - History.rdoc
129
128
  - Manifest.txt
130
129
  - README.rdoc
131
130
  - Rakefile
132
131
  - examples/boid.rb
133
132
  - examples/bounce.rb
133
+ - examples/canvas.rb
134
134
  - examples/collision.rb
135
135
  - examples/demo.rb
136
136
  - examples/editor.rb
137
137
  - examples/fluid.rb
138
138
  - examples/fluid2.rb
139
- - examples/lito.rb
140
- - examples/lito2.rb
139
+ - examples/gol.rb
140
+ - examples/gol2.rb
141
141
  - examples/logo.rb
142
142
  - examples/math.rb
143
+ - examples/maze.rb
143
144
  - examples/radar.rb
144
145
  - examples/tank.rb
145
146
  - examples/tank2.rb
146
147
  - examples/targeting.rb
147
148
  - examples/vants.rb
148
149
  - examples/walker.rb
149
- - examples/zenspider1.rb
150
- - examples/zenspider2.rb
151
- - examples/zenspider3.rb
152
- - examples/zenspider4.rb
150
+ - examples/walker2.rb
153
151
  - examples/zombies.rb
152
+ - ext/sdl/extconf.rb
153
+ - ext/sdl/sdl.c
154
+ - ext/sdl/sge/INSTALL
155
+ - ext/sdl/sge/LICENSE
156
+ - ext/sdl/sge/Makefile
157
+ - ext/sdl/sge/Makefile.conf
158
+ - ext/sdl/sge/README
159
+ - ext/sdl/sge/Todo
160
+ - ext/sdl/sge/WhatsNew
161
+ - ext/sdl/sge/sge.h
162
+ - ext/sdl/sge/sge_blib.cpp
163
+ - ext/sdl/sge/sge_blib.h
164
+ - ext/sdl/sge/sge_bm_text.cpp
165
+ - ext/sdl/sge/sge_bm_text.h
166
+ - ext/sdl/sge/sge_collision.cpp
167
+ - ext/sdl/sge/sge_collision.h
168
+ - ext/sdl/sge/sge_config.h
169
+ - ext/sdl/sge/sge_internal.h
170
+ - ext/sdl/sge/sge_misc.cpp
171
+ - ext/sdl/sge/sge_misc.h
172
+ - ext/sdl/sge/sge_primitives.cpp
173
+ - ext/sdl/sge/sge_primitives.h
174
+ - ext/sdl/sge/sge_rotation.cpp
175
+ - ext/sdl/sge/sge_rotation.h
176
+ - ext/sdl/sge/sge_shape.cpp
177
+ - ext/sdl/sge/sge_shape.h
178
+ - ext/sdl/sge/sge_surface.cpp
179
+ - ext/sdl/sge/sge_surface.h
180
+ - ext/sdl/sge/sge_textpp.cpp
181
+ - ext/sdl/sge/sge_textpp.h
182
+ - ext/sdl/sge/sge_tt_text.cpp
183
+ - ext/sdl/sge/sge_tt_text.h
184
+ - graphics_setup.sh
154
185
  - lib/graphics.rb
155
186
  - lib/graphics/body.rb
156
187
  - lib/graphics/extensions.rb
@@ -159,9 +190,9 @@ files:
159
190
  - lib/graphics/v.rb
160
191
  - resources/images/body.png
161
192
  - resources/images/turret.png
162
- - rubysdl_setup.sh
163
193
  - test/test_graphics.rb
164
- homepage: https://github.com/seattlerb/graphics
194
+ - test/test_sdl.rb
195
+ homepage: https://github.com/zenspider/graphics
165
196
  licenses:
166
197
  - MIT
167
198
  metadata: {}
metadata.gz.sig CHANGED
Binary file
data/.gemtest DELETED
File without changes
@@ -1,108 +0,0 @@
1
- require 'matrix'
2
-
3
- class Matrix
4
- def rotate x, y
5
- # I can't find a neat matrix-math solution for
6
- # this, so let's do it with regular 'ol `map`.
7
- Matrix[ *self.to_a.rotate(y).map {|row| row.rotate x} ]
8
- end
9
-
10
- # Pad or shrink a matrix
11
- def take x, y
12
- Matrix.build(y, x){|i, j| if self[i, j].nil? then 0 else self[i, j] end }
13
- end
14
-
15
- # Bitwise operations on boolean matrices
16
- def & other
17
- Matrix.Raise ErrDimensionMismatch unless
18
- self.row_count == other.row_count and
19
- self.column_count == other.column_count
20
-
21
- Matrix.build(self.row_count){|i, j| self[i, j] & other[i, j] }
22
- end
23
-
24
- def | other
25
- Matrix.Raise ErrDimensionMismatch unless
26
- self.row_count == other.row_count and
27
- self.column_count == other.column_count
28
-
29
- Matrix.build(self.row_count){|i, j| self[i, j] | other[i, j] }
30
- end
31
- end
32
-
33
- def sum l
34
- l.reduce :+
35
- end
36
-
37
- def twos grid
38
- grid.map{|i| if i == 2 then 1 else 0 end}
39
- end
40
-
41
- def threes grid
42
- grid.map{|i| if i == 3 then 1 else 0 end}
43
- end
44
-
45
- AROUND = [-1, 0, 1].product([-1, 0, 1])
46
-
47
- def neighbors grid
48
- sum(AROUND.map{|x, y| grid.rotate x, y } ) - grid
49
- end
50
-
51
- def life grid
52
- ((twos neighbors grid) & grid) | (threes neighbors grid)
53
- end
54
-
55
- size, width, count = 10, 64, 256
56
-
57
- require "sdl"
58
-
59
- SDL.init SDL::INIT_VIDEO
60
- SDL::WM::set_caption "Conway's Game of Life", "Conway's Game of Life"
61
-
62
- screen = SDL::Screen.open 640, 640, 16, SDL::HWSURFACE|SDL::DOUBLEBUF
63
-
64
- black = screen.format.map_rgb 0, 0, 0
65
- white = screen.format.map_rgb 255, 255, 255
66
-
67
- w, h = screen.w, screen.h
68
-
69
- matrix = Matrix[[1, 1, 1],
70
- [0, 0, 1],
71
- [1, 1, 1]].take(width, width).rotate(-(width/2), -(width/2))
72
-
73
- paused = false
74
- step = false
75
- (1..(1.0/0)).each do |n|
76
- puts n if n % 100 == 0
77
-
78
- screen.fill_rect 0, 0, w, h, black
79
-
80
- matrix.to_a.each_with_index do |row, y|
81
- row.each_with_index do |c, x|
82
- if c == 1 then
83
- screen.fill_rect x*size, y*size, size-1, size-1, white
84
- end
85
- end
86
- end
87
-
88
- screen.flip
89
-
90
- while event = SDL::Event.poll
91
- case event
92
- when SDL::Event::KeyDown then
93
- c = event.sym.chr
94
- exit if c == "q" or c == "Q" or c == "\e"
95
- step = true if c == " "
96
- puts n
97
- paused = ! paused
98
- when SDL::Event::Quit then
99
- exit
100
- end
101
- end
102
-
103
- matrix = life matrix unless paused
104
- if step then
105
- paused = true
106
- step = false
107
- end
108
- end
@@ -1,93 +0,0 @@
1
- #!/usr/bin/ruby -w
2
-
3
- srand 42
4
-
5
- class GameOfLife
6
- attr_accessor :cells
7
- attr_accessor :cache
8
-
9
- def initialize
10
- self.cells = []
11
- end
12
-
13
- def randomize n, m
14
- dimensions = n.times.to_a
15
- cells.replace dimensions.product(dimensions).sample(m).sort
16
- end
17
-
18
- def run max = 1.0 / 0
19
- (1..max).each do |n|
20
- yield n
21
- update
22
- end
23
- end
24
-
25
- def update
26
- cells.replace considered.select { |(x, y)| alive? x, y }.sort
27
- end
28
-
29
- def considered
30
- cells.map { |(x, y)| neighbors_for(x, y) }.flatten(1).uniq
31
- end
32
-
33
- MIN = { true => 2, false => 3 }
34
-
35
- def alive? x, y
36
- count = (neighbors_for(x, y) & cells).size
37
- min = MIN[cells.include? [x, y]]
38
- count.between? min, 3
39
- end
40
-
41
- delta = [-1, 0, 1]
42
- same = [0, 0]
43
- DELTAS = (delta.product(delta) - [same])
44
-
45
- @@neighbors = Hash.new { |h, k| h[k] = {} }
46
-
47
- def neighbors_for x, y
48
- DELTAS.map { |(dx, dy)| [x+dx, y+dy] }.reject { |(m, n)| m < 0 || n < 0 }
49
- end
50
- end
51
-
52
- size, width, count = 20, 32, 512
53
-
54
- gol = GameOfLife.new
55
- gol.randomize width, count
56
-
57
- if ARGV.first == "prof" then
58
- gol.run 50 do |n|
59
- $stderr.print "."
60
- end
61
- warn "done"
62
- else
63
- require "sdl"
64
-
65
- SDL.init SDL::INIT_VIDEO
66
- SDL::WM::set_caption "Conway's Game of Life", "Conway's Game of Life"
67
-
68
- screen = SDL::Screen.open 640, 640, 16, SDL::DOUBLEBUF
69
-
70
- black = screen.format.map_rgb 0, 0, 0
71
- white = screen.format.map_rgb 255, 255, 255
72
-
73
- w, h = screen.w, screen.h
74
-
75
- gol.run do
76
- screen.fill_rect 0, 0, w, h, black
77
-
78
- gol.cells.each do |(x, y)|
79
- screen.fill_rect x*size, y*size, size-1, size-1, white
80
- end
81
-
82
- screen.flip
83
-
84
- while event = SDL::Event.poll
85
- case event
86
- when SDL::Event::KeyDown, SDL::Event::Quit
87
- exit
88
- end
89
- end
90
-
91
- gol.update
92
- end
93
- end