sgl 0.3.1 → 0.4.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 (103) hide show
  1. data/ChangeLog +234 -0
  2. data/Manifest.txt +94 -0
  3. data/Rakefile +16 -5
  4. data/examples/cocoa1-basic.rb +14 -0
  5. data/examples/cocoa10-transparent.rb +26 -0
  6. data/examples/cocoa11-application.rb +13 -0
  7. data/examples/cocoa2-draw.rb +23 -0
  8. data/examples/cocoa3-affine.rb +29 -0
  9. data/examples/cocoa4-font.rb +24 -0
  10. data/examples/cocoa5-image.rb +22 -0
  11. data/examples/cocoa6-sound.rb +24 -0
  12. data/examples/cocoa7-movie.rb +40 -0
  13. data/examples/cocoa8-movieoverlay.rb +42 -0
  14. data/examples/cocoa9-streaming.rb +40 -0
  15. data/examples/opengl1-basic.rb +14 -0
  16. data/examples/opengl11-application.rb +13 -0
  17. data/examples/opengl2-draw.rb +23 -0
  18. data/examples/opengl3-affine.rb +29 -0
  19. data/examples/sample1.rb +11 -0
  20. data/examples/sample10.rb +16 -0
  21. data/examples/sample11.rb +22 -0
  22. data/examples/sample11a.rb +33 -0
  23. data/examples/sample12.rb +30 -0
  24. data/examples/sample12a.rb +35 -0
  25. data/examples/sample13.rb +116 -0
  26. data/examples/sample15.rb +24 -0
  27. data/examples/sample16.rb +31 -0
  28. data/examples/sample16a.rb +35 -0
  29. data/examples/sample6.rb +18 -0
  30. data/examples/sample7.rb +16 -0
  31. data/examples/sample9.rb +20 -0
  32. data/examples/sgl-sound1.rb +6 -0
  33. data/examples/sgl-sound2.rb +19 -0
  34. data/examples/sine.ogg +0 -0
  35. data/examples/testgl.rb +169 -0
  36. data/lib/sgl/bass-api.rb +202 -0
  37. data/lib/sgl/bass-sample.rb +106 -0
  38. data/lib/sgl/bass.rb +46 -0
  39. data/lib/sgl/cocoa-app.rb +43 -0
  40. data/lib/sgl/cocoa-color.rb +65 -0
  41. data/lib/sgl/cocoa-draw.rb +72 -0
  42. data/lib/sgl/cocoa-event.rb +229 -0
  43. data/lib/sgl/cocoa-media.rb +144 -0
  44. data/lib/sgl/cocoa-notuse.rb +493 -0
  45. data/lib/sgl/cocoa-window.rb +203 -0
  46. data/lib/sgl/cocoa.rb +8 -0
  47. data/lib/sgl/notuse-objs.rb +358 -0
  48. data/lib/sgl/opengl-app.rb +38 -0
  49. data/lib/sgl/opengl-color.rb +44 -0
  50. data/lib/sgl/opengl-draw.rb +260 -0
  51. data/lib/sgl/opengl-event.rb +325 -0
  52. data/lib/sgl/opengl-modules.rb +22 -0
  53. data/lib/sgl/opengl-window.rb +224 -0
  54. data/lib/sgl/opengl.rb +7 -0
  55. data/lib/sgl/sgl-basic.rb +61 -0
  56. data/lib/sgl/sgl-button.rb +135 -0
  57. data/lib/sgl/sgl-client.rb +21 -0
  58. data/lib/sgl/sgl-color.rb +82 -0
  59. data/lib/sgl/sgl-connect.rb +9 -0
  60. data/lib/sgl/sgl-objlib.rb +0 -0
  61. data/lib/sgl/sgl-objs.rb +0 -0
  62. data/lib/sgl/sgl-server.rb +58 -0
  63. data/lib/sgl/sgl-sound.rb +24 -0
  64. data/lib/sgl/sgl-spring.rb +216 -0
  65. data/lib/sgl/sgl-timer.rb +72 -0
  66. data/lib/sgl/sgl.rb +5 -0
  67. data/lib/sgl/version.rb +2 -2
  68. data/scripts/makemanifest.rb +20 -0
  69. data/test/test_bass.rb +27 -0
  70. data/test/test_cocoa_app.rb +5 -5
  71. data/test/test_helper.rb +9 -1
  72. data/test/test_module_ruby16.rb +22 -21
  73. data/test/test_opengl_app.rb +4 -5
  74. data/test/test_opengl_basic.rb +3 -4
  75. data/test/test_opengl_fullscreen.rb +4 -6
  76. data/test/test_opengl_novice.rb +3 -6
  77. data/test/test_sgl.rb +4 -27
  78. data/test/test_sound.rb +15 -0
  79. data/website/challenge1.html +91 -0
  80. data/website/challenge1.txt +30 -0
  81. data/website/challenge2.html +144 -0
  82. data/website/challenge2.txt +73 -0
  83. data/website/challenge3.html +63 -0
  84. data/website/challenge3.txt +15 -0
  85. data/website/cocoa.html +88 -0
  86. data/website/cocoa.txt +35 -0
  87. data/website/description.html +138 -0
  88. data/website/description.txt +90 -0
  89. data/website/exercise1.html +264 -0
  90. data/website/exercise1.txt +192 -0
  91. data/website/exercise2.html +683 -0
  92. data/website/exercise2.txt +597 -0
  93. data/website/exhibition.html +84 -0
  94. data/website/exhibition.txt +24 -0
  95. data/website/howto.html +134 -0
  96. data/website/howto.txt +56 -0
  97. data/website/index.html +17 -9
  98. data/website/index.txt +13 -4
  99. data/website/sound.html +141 -0
  100. data/website/sound.txt +87 -0
  101. data/website/stylesheets/grade.png +0 -0
  102. data/website/stylesheets/screen.css +21 -20
  103. metadata +109 -3
@@ -0,0 +1,135 @@
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
5
+ require "sgl/opengl"
6
+ require "sgl/sgl-spring"
7
+
8
+ class Button
9
+ def initialize(x, y)
10
+ @dx, @dy = x, y
11
+ @x, @y = x, y
12
+ @w, @h = 8, 8
13
+ end
14
+
15
+ attr_accessor :x, :y
16
+
17
+ def pos
18
+ return [x, y]
19
+ end
20
+
21
+ def move_to(x, y)
22
+ @x, @y = x, y
23
+ end
24
+
25
+ def draw(s)
26
+ colorHSV(0, s, 100, 60)
27
+ draw_rect(@w, @h)
28
+ colorHSV(0, s, 0, 30)
29
+ draw_rect(@w-1, @h-1)
30
+ end
31
+
32
+ def draw_rect(w, h)
33
+ rect(@x-w, @y-h, @x+w, @y+h)
34
+ end
35
+
36
+ def inside?(x, y)
37
+ (@x-@w) < x && x < (@x+@w) && (@y-@h) < y && y < (@y+@h)
38
+ end
39
+ end
40
+
41
+ class ButtonColumn
42
+ def initialize(length, dy, hy)
43
+ @length, @dy, @hy = length, dy, hy #destination y and hide y
44
+ @cur = 0
45
+ @buttons = []
46
+ @y_spring = NumSpring.new(@dy, @dy, 5, 0.6)
47
+ make_buttons
48
+ end
49
+
50
+ attr_reader :y_spring
51
+ attr_accessor :cur
52
+
53
+ def make_buttons
54
+ y = @y_spring.x
55
+ sw = 46
56
+ w = 0
57
+ @length.times {
58
+ @buttons << Button.new(0, y)
59
+ w += sw
60
+ }
61
+ x = -w/2
62
+ @buttons.each {|b|
63
+ b.x = x
64
+ x += sw
65
+ }
66
+ end
67
+
68
+ def move(x, y)
69
+ # @y_spring.target = y.abs < (768/2 - 120) ? @hy : @dy
70
+ #if y.abs < (768/2 - 120)
71
+ if (@dy - y).abs < 50
72
+ @y_spring.target = @dy
73
+ else
74
+ @y_spring.target = @hy
75
+ end
76
+ @y_spring.moving = true
77
+ @y_spring.move
78
+ y = @y_spring.x
79
+ @buttons.each {|b|
80
+ b.y = y
81
+ }
82
+ end
83
+
84
+ def draw
85
+ @buttons.each_index {|i|
86
+ b = @buttons[i]
87
+ s = (@cur == i) ? 100 : 0
88
+ b.draw(s)
89
+ }
90
+ end
91
+
92
+ def onMouseDown(x, y)
93
+ @buttons.each_index {|i|
94
+ b = @buttons[i]
95
+ if b.inside?(x, y)
96
+ @cur = i
97
+ return i
98
+ end
99
+ }
100
+ nil
101
+ end
102
+ end
103
+
104
+ if $0 == __FILE__
105
+ require "test/unit"
106
+ $__test_sgl__ = true
107
+ end
108
+
109
+ if defined?($__test_sgl__) && $__test_sgl__
110
+ class TestSglButton < Test::Unit::TestCase #:nodoc:
111
+ def test_button
112
+ b = Button.new(1, 2)
113
+ assert_equal(1, b.x)
114
+ assert_equal(2, b.y)
115
+ assert_equal([1, 2], b.pos)
116
+ end
117
+
118
+ def test_draw
119
+ app = SGL::Application.new
120
+ app.set_setup {
121
+ app.window(100, 100)
122
+ app.runtime = 0.1
123
+ }
124
+ i = 0
125
+ button = Button.new(0, 0)
126
+ app.set_display {
127
+ button.move_to(i, i)
128
+ button.draw(i)
129
+ i += 5
130
+ i = 0 if 100 < i
131
+ }
132
+ app.mainloop
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
+ require "sgl/sgl-connect"
7
+
8
+ module Sgl
9
+ class Client
10
+ def self.main(argv)
11
+ uri = ARGV.shift
12
+ there = DRbObject.new_with_uri(uri)
13
+ there.puts('Hello, World.')
14
+ end
15
+ end
16
+ end
17
+
18
+ if $0 == __FILE__
19
+ require "test/unit"
20
+ Sgl::Client.main(ARGV)
21
+ end
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
+
7
+ module SGL
8
+ RGB = 0
9
+ HSV = 1
10
+ DEFAULT_MAX = 100
11
+
12
+ class ColorTranslatorRGB
13
+ def initialize(r=nil, g=nil, b=nil, a=nil)
14
+ a = DEFAULT_MAX if a == nil
15
+ r = DEFAULT_MAX if r == nil
16
+ g = b = r if g == nil || b == nil
17
+ @rm, @gm, @bm, @am = r.to_f, g.to_f, b.to_f, a.to_f
18
+ end
19
+
20
+ def norm(r, g=nil, b=nil, a=nil)
21
+ a = DEFAULT_MAX if a == nil
22
+ g = b = r if g == nil || b == nil
23
+ return [r/@rm, g/@gm, b/@bm, a/@am]
24
+ end
25
+ end
26
+
27
+ class ColorTranslatorHSV
28
+ def initialize(h=nil, s=nil, v=nil, a=nil)
29
+ a = DEFAULT_MAX if a == nil
30
+ h = DEFAULT_MAX if h == nil
31
+ s = v = h if s == nil || v == nil
32
+ @hm, @sm, @vm, @am = h.to_f, s.to_f, v.to_f, a.to_f
33
+ end
34
+
35
+ def norm(h, s=nil, v=nil, a=nil)
36
+ if h < 0
37
+ base = (h.abs / @hm).to_i + 1
38
+ h += (base * @hm).to_f
39
+ end
40
+ h = (h % @hm) if @hm < h
41
+ a = DEFAULT_MAX if a == nil
42
+ s = v = h if s == nil || v == nil
43
+ r, g, b = hsv_to_rgb(360.0*h/@hm, s/@sm, v/@vm)
44
+ return [r, g, b, a/@am]
45
+ end
46
+
47
+ def hsv_to_rgb(h, s, v) #h:[0-360] s,v:[0,1], r,g,b:[0,1]
48
+ return v, v, v if s == 0.0
49
+ h = 0 if h == 360
50
+ h /= 60.0 #h is now [0,6)
51
+ i = h.to_i
52
+ f = (h-i).to_f
53
+ pp = v * (1-s)
54
+ q = v * (1-(s*f))
55
+ t = v * (1-(s*(1-f)))
56
+ #p [h,s,v, i, f, pp, q, t]
57
+ case i
58
+ when 0; return v, t, pp
59
+ when 1; return q, v, pp
60
+ when 2; return pp, v, t
61
+ when 3; return pp, q, v
62
+ when 4; return t, pp, v
63
+ when 5; return v, pp, q
64
+ end
65
+ return 0, 0, 0
66
+ end
67
+ end
68
+ end
69
+
70
+ if $0 == __FILE__
71
+ require "test/unit"
72
+ $__test_sgl__ = true
73
+ end
74
+
75
+ if defined?($__test_sgl__) && $__test_sgl__
76
+ class TestSglColor_SglColor < Test::Unit::TestCase #:nodoc:
77
+ def test_all
78
+ rgb = SGL::ColorTranslatorRGB.new(100, 100, 100, 100)
79
+ assert_equal([1.0, 1.0, 1.0, 1.0], rgb.norm(100, 100, 100))
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ require "drb/drb"
6
+
7
+ module Sgl
8
+ DEFAULT_URI = "druby://localhost:12345"
9
+ end
File without changes
File without changes
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
6
+ require "sgl/sgl-connect"
7
+
8
+ module Sgl
9
+ class Puts
10
+ def initialize(stream=$stdout)
11
+ stream.sync = true
12
+ @stream = stream
13
+ end
14
+
15
+ def puts(str)
16
+ @stream.puts(str)
17
+ end
18
+ end
19
+
20
+ class Server
21
+ def self.main(argv)
22
+ server = self.new
23
+ server.run
24
+ end
25
+
26
+ def run(duration=0)
27
+ uri = DEFAULT_URI
28
+ DRb.start_service(uri, Puts.new)
29
+ puts DRb.uri
30
+
31
+ if duration == 0
32
+ sleep
33
+ else
34
+ sleep duration
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ if $0 == __FILE__
41
+ require "test/unit"
42
+ $__test_sgl__ = true
43
+ end
44
+
45
+ if defined?($__test_sgl__) && $__test_sgl__
46
+ class TestSglServer < Test::Unit::TestCase #:nodoc:
47
+ def test_all
48
+ server = Sgl::Server.new
49
+ Thread.start {
50
+ server.run(5)
51
+ }
52
+
53
+ uri = Sgl::DEFAULT_URI
54
+ there = DRbObject.new_with_uri(uri)
55
+ there.puts('Hello, World.')
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ require 'sgl/bass'
5
+
6
+ module SGL
7
+ def useSound() $__a__.useSound; end
8
+ def loadSound(*a) $__a__.loadSound(*a) end
9
+ def stopSound(*a) $__a__.stopAll(*a) end
10
+
11
+ class Application
12
+ def useSound
13
+ bass = Bass::BassLib.instance
14
+ end
15
+
16
+ def loadSound(file)
17
+ return Bass::Sample.new(file)
18
+ end
19
+
20
+ def stopSound
21
+ Bass::BassLib.instance.stop_all
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,216 @@
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
5
+
6
+ module SGL
7
+ =begin
8
+ # not yet.
9
+ module SpringModule
10
+ end
11
+ =end
12
+
13
+ class Spring
14
+ EPSILON = 0.01
15
+
16
+ # �ڕW�ƂȂ�l�A�����l�A�o�l�萔�A�e���萔�A�C�v�V����(�\���������l)
17
+ def initialize(target, initial, ks, kd, e=EPSILON, v=0)
18
+ @target, @initial, @ks, @kd, @e, @v = target, initial, ks, kd, e, v
19
+ @x = @initial
20
+ @moving = true
21
+ end
22
+
23
+ attr_reader :x, :target
24
+ attr_accessor :v, :ks, :kd
25
+
26
+ def inspect
27
+ mov = @moving ? "��" : "��"
28
+ sprintf("[%s%.1f %.1f %.1f %.1f %.1f]", mov, @target, @x, @v, @ks, @kd)
29
+ end
30
+
31
+ def target=(num)
32
+ @target = num
33
+ @moving = true
34
+ end
35
+
36
+ def x=(num)
37
+ @x = num
38
+ @moving = true
39
+ end
40
+
41
+ def move
42
+ return if ! @moving
43
+ if @x.is_a?(Vector)
44
+ l = @x - @target
45
+ diff = l.length
46
+ if diff < @e && @v.length < @e
47
+ @moving = false
48
+ return
49
+ end
50
+ #fa = -(@ks * diff + @kd * @v)
51
+ ln = l.normalize
52
+ fak = -(@ks * diff + @kd * @v.length)
53
+ fa = ln.scale(fak)
54
+ @v += fa
55
+ @x += @v
56
+ #p ['sp', fa, fak, @v, @x]
57
+ else
58
+ diff = @x - @target
59
+ if diff.abs < @e && @v.abs < @e
60
+ @moving = false
61
+ return
62
+ end
63
+ fa = -(@ks * diff + @kd * @v)
64
+ @v += fa
65
+ @x += @v
66
+ end
67
+ end
68
+ end
69
+
70
+ class ISpring < Spring
71
+ # �ڕW�ƂȂ�l�A�����l�A�o�l�萔�A�e���萔�A�C�v�V����(�\���������l)
72
+ def initialize(target, initial, ks, kd, e=EPSILON, v=0)
73
+ super(target, initial, 1.0/ks, 1.0/kd, e, v) # ks��kd��inverse����B
74
+ end
75
+ end
76
+
77
+ class NumSpring
78
+ EPSILON = 0.01
79
+
80
+ # �ڕW�ƂȂ�l�A�����l�A�o�l�萔�A�e���萔�A�C�v�V����(�\���������l)
81
+ def initialize(target, initial, ks, kd, e=EPSILON, v=0)
82
+ @target, @initial, @ks, @kd, @e, @v = target, initial, ks, kd, e, v
83
+ @x = @initial
84
+ @moving = true
85
+ end
86
+
87
+ attr_reader :x, :target
88
+ attr_accessor :v, :ks, :kd, :moving
89
+
90
+ def inspect
91
+ mov = @moving ? "��" : "��"
92
+ sprintf("[%s%.1f %.1f %.1f %.1f %.1f]", mov, @target, @x, @v, @ks, @kd)
93
+ end
94
+
95
+ def target=(num)
96
+ @target = num
97
+ @moving = true
98
+ end
99
+
100
+ def x=(num)
101
+ @x = num
102
+ @moving = true
103
+ end
104
+
105
+ def move
106
+ return if ! @moving
107
+ diff = @target - @x
108
+ if diff.abs < @e && @v.abs < @e
109
+ @moving = false
110
+ return
111
+ end
112
+ @v += (diff / @ks)
113
+ @v *= @kd
114
+ @x += @v
115
+ end
116
+ end
117
+
118
+ class INumSpring < NumSpring
119
+ # �ڕW�ƂȂ�l�A�����l�A�o�l�萔�A�e���萔�A�C�v�V����(�\���������l)
120
+ def initialize(target, initial, ks, kd, e=EPSILON, v=0)
121
+ super(target, initial, ks, 1.0 - 1.0/kd, e, v) # kd����inverse����B
122
+ end
123
+ end
124
+ end
125
+
126
+ =begin
127
+ class NuSpringPos
128
+ EPSILON = 0.01
129
+
130
+ # �����l�A�ڕW�ƂȂ�l�A�o�l�萔�A�e���萔�A�C�v�V����(�\���������l)
131
+ def initialize(x, y, ks, kd, e=EPSILON)
132
+ @x, @y, @ks, @kd, @e = x, y, ks, kd, e
133
+ @vx, @vy, @tx, @ty = 0, 0, 0, 0
134
+ @moving = true
135
+ end
136
+
137
+ attr_reader :x, :y, :moving
138
+
139
+ def set_target(tx, ty)
140
+ @tx, @ty = tx, ty
141
+ end
142
+
143
+ def move
144
+ return if ! @moving
145
+
146
+ #diff = @target - @x
147
+ diff = @tx - @x
148
+ if diff.abs < @e && @v.abs < @e
149
+ @moving = false
150
+ return
151
+ end
152
+ @v += (diff / @ks)
153
+ @v *= @kd
154
+ @x += @v
155
+ end
156
+ end
157
+
158
+ class NuNumSpring
159
+ EPSILON = 0.01
160
+
161
+ # �ڕW�ƂȂ�l�A�����l�A�o�l�萔�A�e���萔�A�C�v�V����(�\���������l)
162
+ def initialize(target, initial, ks, kd, e=EPSILON)
163
+ @target, @initial, @ks, @kd, @e = target, initial, ks, kd, e
164
+ @x = @initial
165
+ @v = 0
166
+ @moving = true
167
+ end
168
+
169
+ attr_reader :v
170
+ attr_accessor :x, :target, :moving, :ks, :kd
171
+
172
+ def inspect
173
+ mov = @moving ? "��" : "��"
174
+ sprintf("[%s%.1f %.1f %.1f %.1f %.1f]", mov, @target, @x, @v, @ks, @kd)
175
+ end
176
+
177
+ def move
178
+ return if ! @moving
179
+ diff = @target - @x
180
+ if diff.abs < @e && @v.abs < @e
181
+ @moving = false
182
+ return
183
+ end
184
+ @v += (diff / @ks)
185
+ @v *= @kd
186
+ @x += @v
187
+ end
188
+
189
+ def rel_ks_notuse(r)
190
+ @ks += r
191
+ @ks = 1 if @ks <= 0
192
+ end
193
+ end
194
+ =end
195
+
196
+ if $0 == __FILE__
197
+ require "test/unit"
198
+ $__test_sgl__ = true
199
+ end
200
+
201
+ if defined?($__test_sgl__) && $__test_sgl__
202
+ class TestSglSpring < Test::Unit::TestCase #:nodoc:
203
+ def test_all
204
+
205
+ s = SGL::NumSpring.new(0, 1, 0.1, 0.1)
206
+ assert_equal(1, s.x)
207
+ assert_equal(true, s.moving)
208
+
209
+ s.move
210
+ assert_equal(0.0, s.x)
211
+
212
+ s.move
213
+ assert_equal(-0.1, s.x)
214
+ end
215
+ end
216
+ end
@@ -0,0 +1,72 @@
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ module SGL
5
+ # starttime�b��Ɏn�܂��āAendtime�b��ɏI��B
6
+ class Timer
7
+ def initialize(st, et)
8
+ @st, @et = st, et
9
+ revert # �����߂�
10
+ count
11
+ @span = (@et - @st).to_f
12
+ #p ['Timer', @bt, @st, @et, @span]
13
+ end
14
+ attr_accessor :st, :et
15
+
16
+ # start at 0.0, finished at 1.0
17
+ def ratio
18
+ count
19
+ return 0.0 if @now < @st
20
+ return 1.0 if @et <= @now
21
+ return (@now - @st) / @span
22
+ end
23
+
24
+ def started?
25
+ count
26
+ @st <= @now
27
+ end
28
+
29
+ def ended?
30
+ count
31
+ @et <= @now
32
+ end
33
+
34
+ def start
35
+ @bt += @st if ! started?
36
+ @bt = Time.now.to_f - @st if ! started?
37
+ end
38
+
39
+ # begintime���J�n����
40
+ def revert
41
+ @bt = Time.now.to_f
42
+ end
43
+
44
+ private
45
+
46
+ def count
47
+ @now = Time.now.to_f - @bt
48
+ end
49
+ end
50
+
51
+ module Fadeout
52
+ EXISTENCE_TIME = 6 # ��������
53
+ FADEOUT_TIME = 2 # fadeout���鎞��
54
+
55
+ def fadeout_initialize
56
+ @timer = Timer.new(EXISTENCE_TIME - FADEOUT_TIME, EXISTENCE_TIME)
57
+ end
58
+
59
+ def set_longer_timer
60
+ t = 10
61
+ @timer = Timer.new(EXISTENCE_TIME * t - FADEOUT_TIME * t, EXISTENCE_TIME * t)
62
+ end
63
+
64
+ def fadeout
65
+ @timer.start
66
+ end
67
+
68
+ def ended?
69
+ @timer.ended?
70
+ end
71
+ end
72
+ end
data/lib/sgl/sgl.rb ADDED
@@ -0,0 +1,5 @@
1
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
2
+ # License: Ruby License
3
+
4
+ require 'sgl/version'
5
+ require "sgl/opengl"
data/lib/sgl/version.rb CHANGED
@@ -4,8 +4,8 @@
4
4
  module SGL #:nodoc:
5
5
  module VERSION #:nodoc:
6
6
  MAJOR = 0
7
- MINOR = 3
8
- TINY = 1
7
+ MINOR = 4
8
+ TINY = 0
9
9
 
10
10
  STRING = [MAJOR, MINOR, TINY].join('.')
11
11
  end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/ruby
2
+
3
+ base_dir = File.join(File.dirname(__FILE__), "..")
4
+ glob_pattern = File.join("**", "*")
5
+ exclude_patterns = [
6
+ /^pkg/,/^doc/,
7
+ ]
8
+
9
+ Dir.chdir(base_dir)
10
+ files = Dir.glob(glob_pattern).delete_if do |fname|
11
+ File.directory?(fname) or
12
+ exclude_patterns.find do |pattern|
13
+ pattern =~ fname
14
+ end
15
+ end
16
+ manifest = File.new("Manifest.txt", "w")
17
+ manifest.puts files.sort.join("\n")
18
+ manifest.close
19
+
20
+ puts "Manifest.txt updated"
data/test/test_bass.rb ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
4
+
5
+ require File.dirname(__FILE__) + '/test_helper.rb'
6
+ require 'sgl/bass'
7
+
8
+ class TestSample < Test::Unit::TestCase
9
+ TEST_FILENAME = "c:/WINDOWS/Media/start.wav"
10
+
11
+ def test_0_simple_play
12
+ bass = Bass::BassLib.instance
13
+ samp = Bass::Sample.new(TEST_FILENAME)
14
+
15
+ # test_play
16
+ samp.play; sleep 0.05
17
+
18
+ # test_note
19
+ [0, 2, 4, 5, 7, 9, 11, 12].each {|n| samp.play(60 + n); sleep 0.05 }
20
+
21
+ # test_volume
22
+ 10.times {|v| samp.play(60, v * 10); sleep 0.05 }
23
+
24
+ # test_pan
25
+ 10.times {|pos| samp.play(60, 100, pos * 20 - 100); sleep 0.05 }
26
+ end
27
+ end
@@ -1,12 +1,12 @@
1
- #!/usr/bin/env ruby
2
- # Copyright (C) 2004-2005 Kouichirou Eto, All rights reserved.
1
+ #!/usr/bin/env ruby -w
2
+ # Copyright (C) 2004-2007 Kouichirou Eto, All rights reserved.
3
+ # License: Ruby License
3
4
 
4
- $LOAD_PATH.unshift("..") if !$LOAD_PATH.include?("..")
5
+ require File.dirname(__FILE__) + '/test_helper.rb'
5
6
 
6
- if /cocoa/ =~ RUBY_PLATFORM
7
+ if /osx/ =~ RUBY_PLATFORM
7
8
 
8
9
  require "sgl/cocoa-app"
9
- require "test/unit"
10
10
 
11
11
  class TestCocoaBasic < Test::Unit::TestCase
12
12
  def test_basic