dxruby_sdl 0.0.4 → 0.0.5
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 +8 -8
- data/.rubocop.yml +9 -0
- data/.travis.yml +2 -1
- data/Guardfile +1 -1
- data/README.md +41 -17
- data/lib/dxruby_sdl/color.rb +2 -2
- data/lib/dxruby_sdl/font.rb +132 -11
- data/lib/dxruby_sdl/image.rb +49 -3
- data/lib/dxruby_sdl/input.rb +40 -24
- data/lib/dxruby_sdl/sound.rb +20 -3
- data/lib/dxruby_sdl/sound_effect.rb +4 -0
- data/lib/dxruby_sdl/sprite.rb +178 -0
- data/lib/dxruby_sdl/version.rb +1 -1
- data/lib/dxruby_sdl/window.rb +46 -7
- data/lib/dxruby_sdl.rb +3 -0
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/color_spec.rb +2 -2
- data/spec/lib/dxruby_sdl/font_spec.rb +40 -0
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/image_spec.rb +47 -4
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/input_spec.rb +82 -43
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/sound_effect_spec.rb +0 -0
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/sound_spec.rb +0 -0
- data/spec/lib/dxruby_sdl/sprite_spec.rb +570 -0
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/window__draw_spec.rb +64 -5
- data/spec/{dxruby_sdl → lib/dxruby_sdl}/window_spec.rb +32 -0
- data/spec/{dxruby_sdl_spec.rb → lib/dxruby_sdl_spec.rb} +0 -0
- data/spec/{dxruby_spec.rb → lib/dxruby_spec.rb} +4 -0
- data/spec/spec_helper.rb +9 -0
- metadata +25 -22
- data/spec/dxruby_sdl/font_spec.rb +0 -13
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Mzg1MmJhMGFhODU4MmYzZmY5M2QyOTdjYWJiMGJmNWI0ZTA3MmZmMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmUwNmU2ZjgwZWY1NTIyMmRjMzBhNDg2MzY0OGU5NDBiNDhkZjhlZA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzFhNGIyM2E0Y2MxMmE3N2RhYTE0NmY4MzhkYzg2NTAzOTY1MTg5Yzc3NmNl
|
10
|
+
MDAyMzJkOGI3ZTFhNjgwNzVmZWUzNDI4NTU5Y2VkNjYwNTgyOWU0NDNmYzE2
|
11
|
+
NTliNWY0NDhmY2MxMDE0MTQzNjI0MTA2OGQ4YWJiNWRlNGJmOWM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTllMjA5YzFjZGM3M2JiZGZjYjA5Y2JjNGUzMjY3NzY4OGE2ZDVjNTVlMmEz
|
14
|
+
YWMyMDI5ZDU3MDRiYTM5NDFhZWM2N2MxNzg1ZGJiMzY5M2U3NjQ0YzI5YTQ0
|
15
|
+
YWMxNDVjYmIxMDgwODZmMTJhMGY0NTVlNWMzN2UwYjM1ZjZlNzI=
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -8,4 +8,5 @@ env:
|
|
8
8
|
|
9
9
|
before_install:
|
10
10
|
- sudo apt-get update -qq
|
11
|
-
- sudo apt-get install -qq libsdl1.2-dev libsdl-mixer1.2-dev timidity libsdl-ttf2.0-dev libsdl-sge-dev
|
11
|
+
- sudo apt-get install -qq libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev timidity libsdl-ttf2.0-dev libsdl-sge-dev fonts-horai-umefont fonts-ipafont
|
12
|
+
|
data/Guardfile
CHANGED
@@ -10,7 +10,7 @@ if /darwin/ =~ RUBY_PLATFORM
|
|
10
10
|
end
|
11
11
|
guard :rspec, rspec_option do
|
12
12
|
watch(%r{^spec/.+_spec\.rb$})
|
13
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
13
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
14
14
|
watch('spec/spec_helper.rb') { "spec" }
|
15
15
|
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
16
16
|
end
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# dxruby_sdl
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/dxruby_sdl)
|
3
4
|
[](https://travis-ci.org/takaokouji/dxruby_sdl)
|
4
5
|
[](https://coveralls.io/r/takaokouji/dxruby_sdl?branch=master)
|
5
6
|
[](https://gemnasium.com/takaokouji/dxruby_sdl)
|
@@ -8,41 +9,64 @@
|
|
8
9
|
`dxruby_sdl` is a ruby library for 2D graphics and game. It has same
|
9
10
|
DXRuby API. It use SDL/Ruby.
|
10
11
|
|
12
|
+
Current API compatibility status: http://dxruby-apis.herokuapp.com/en/
|
13
|
+
|
11
14
|
## Installation
|
12
15
|
|
13
|
-
### SDL
|
16
|
+
### SDL, SGE, etc...
|
17
|
+
|
18
|
+
#### Mac OS X
|
19
|
+
|
20
|
+
(1) SDL
|
21
|
+
|
22
|
+
```
|
23
|
+
(if you use MacPorts.)
|
24
|
+
$ sudo port install libsdl libsdl_image libsdl_mixer libsdl_sound libsdl_ttf
|
25
|
+
```
|
26
|
+
|
27
|
+
(2) SGE
|
14
28
|
|
15
|
-
|
29
|
+
```
|
30
|
+
$ curl -O http://www.digitalfanatics.org/cal/sge/files/sge030809.tar.gz
|
31
|
+
$ tar xvzf sge030809.tar.gz
|
32
|
+
$ cd sge030809
|
33
|
+
$ curl https://gist.github.com/steved555/963525/raw/7b638e4100f9dd1a9d00560b98ea2ddd4375b2b0/sge_030809_freetype.patch | patch
|
34
|
+
$ curl https://gist.github.com/steved555/963524/raw/c03396e1fb8bb87e9f4ba92597d087f730c6c48b/sge_030809_cmap.patch | patch
|
35
|
+
$ curl https://gist.github.com/steved555/963522/raw/5b277a0a6b08a1c077fbe2c96eead4ef1d761856/sge-030809-build.patch | patch
|
36
|
+
$ sed -i -e 's/-soname/-install_name/g' Makefile
|
37
|
+
$ make
|
38
|
+
$ sudo make install
|
39
|
+
```
|
16
40
|
|
17
|
-
|
41
|
+
(3) MS PGohic (DXRuby's default font)
|
18
42
|
|
19
|
-
|
43
|
+
Install Microsoft Office:mac from http://www.microsoft.com/japan/mac.
|
20
44
|
|
21
|
-
|
45
|
+
#### Linux
|
22
46
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
curl https://gist.github.com/steved555/963525/raw/7b638e4100f9dd1a9d00560b98ea2ddd4375b2b0/sge_030809_freetype.patch | patch
|
27
|
-
curl https://gist.github.com/steved555/963524/raw/c03396e1fb8bb87e9f4ba92597d087f730c6c48b/sge_030809_cmap.patch | patch
|
28
|
-
curl https://gist.github.com/steved555/963522/raw/5b277a0a6b08a1c077fbe2c96eead4ef1d761856/sge-030809-build.patch | patch
|
29
|
-
sed -i -e 's/-soname/-install_name/g' Makefile
|
30
|
-
make
|
31
|
-
sudo make install
|
47
|
+
```
|
48
|
+
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev timidity libsdl-ttf2.0-dev libsdl-sge-dev fonts-horai-umefont fonts-ipafont
|
49
|
+
```
|
32
50
|
|
33
51
|
### dxruby_sdl
|
34
52
|
|
35
53
|
Add this line to your application's Gemfile:
|
36
54
|
|
37
|
-
|
55
|
+
```
|
56
|
+
gem 'dxruby_sdl'
|
57
|
+
```
|
38
58
|
|
39
59
|
And then execute:
|
40
60
|
|
41
|
-
|
61
|
+
```
|
62
|
+
$ bundle
|
63
|
+
```
|
42
64
|
|
43
65
|
Or install it yourself as:
|
44
66
|
|
45
|
-
|
67
|
+
```
|
68
|
+
$ gem install dxruby_sdl
|
69
|
+
```
|
46
70
|
|
47
71
|
## Usage
|
48
72
|
|
data/lib/dxruby_sdl/color.rb
CHANGED
@@ -8,7 +8,7 @@ module DXRubySDL
|
|
8
8
|
if color.length == 4
|
9
9
|
return color[0..2]
|
10
10
|
else
|
11
|
-
color
|
11
|
+
return color
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ module DXRubySDL
|
|
16
16
|
if color.length == 4
|
17
17
|
return color[3]
|
18
18
|
else
|
19
|
-
return
|
19
|
+
return nil
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/dxruby_sdl/font.rb
CHANGED
@@ -5,33 +5,154 @@ module DXRubySDL
|
|
5
5
|
attr_reader :size
|
6
6
|
attr_reader :_ttf
|
7
7
|
|
8
|
+
@font_cache = {}
|
9
|
+
|
8
10
|
def initialize(size, fontname = '', hash = {})
|
9
11
|
@size = size
|
10
12
|
|
11
13
|
if !SDL::TTF.init?
|
12
14
|
SDL::TTF.init
|
13
15
|
end
|
14
|
-
if !(path = FONTS[fontname
|
16
|
+
if !(path = (FONTS[fontname] || FONT_ALIASES[fontname]))
|
15
17
|
path = FONTS.first.last
|
16
18
|
end
|
17
|
-
|
19
|
+
font_cache = Font.instance_variable_get('@font_cache')
|
20
|
+
args = [path, size]
|
21
|
+
if font_cache.key?(args)
|
22
|
+
@_ttf = font_cache[args]
|
23
|
+
else
|
24
|
+
@_ttf = font_cache[args] = SDL::TTF.open(*args)
|
25
|
+
end
|
18
26
|
end
|
19
27
|
|
28
|
+
def get_width(string)
|
29
|
+
return @_ttf.text_size(string).first
|
30
|
+
end
|
31
|
+
|
32
|
+
alias_method :getWidth, :get_width
|
33
|
+
|
20
34
|
private
|
21
35
|
|
36
|
+
FONTS = {}
|
37
|
+
private_constant :FONTS
|
38
|
+
|
39
|
+
FONT_ALIASES = {}
|
40
|
+
private_constant :FONT_ALIASES
|
41
|
+
|
22
42
|
# :nocov:
|
23
43
|
if /darwin/ =~ RUBY_PLATFORM
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
44
|
+
font_info =
|
45
|
+
[
|
46
|
+
%w[
|
47
|
+
MS\ Pゴシック
|
48
|
+
/Library/Fonts/Microsoft/MS\ PGothic.ttf
|
49
|
+
MS\ Pゴシック
|
50
|
+
MS\ PGothic
|
51
|
+
],
|
52
|
+
%w[
|
53
|
+
MS\ ゴシック
|
54
|
+
/Library/Fonts/Microsoft/MS\ Gothic.ttf
|
55
|
+
MS\ ゴシック
|
56
|
+
MS\ Gothic
|
57
|
+
],
|
58
|
+
%w[
|
59
|
+
MS\ P明朝
|
60
|
+
/Library/Fonts/Microsoft/MS\ PMincho.ttf
|
61
|
+
MS\ P明朝
|
62
|
+
MS\ PMincho
|
63
|
+
],
|
64
|
+
%w[
|
65
|
+
MS\ 明朝
|
66
|
+
/Library/Fonts/Microsoft/MS\ Mincho.ttf
|
67
|
+
MS\ 明朝
|
68
|
+
MS\ Mincho
|
69
|
+
],
|
70
|
+
%w[
|
71
|
+
osaka
|
72
|
+
/Library/Fonts/osaka.ttf
|
73
|
+
],
|
74
|
+
%w[
|
75
|
+
IPA\ Pゴシック
|
76
|
+
/Library/Fonts/ipagp.ttf
|
77
|
+
IPA\ PGothic
|
78
|
+
ipagp
|
79
|
+
],
|
80
|
+
%w[
|
81
|
+
IPA\ ゴシック
|
82
|
+
/Library/Fonts/ipag.ttf
|
83
|
+
IPA\ Gothic
|
84
|
+
ipag
|
85
|
+
],
|
86
|
+
]
|
29
87
|
elsif /linux/ =~ RUBY_PLATFORM
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
88
|
+
font_info =
|
89
|
+
[
|
90
|
+
%w[
|
91
|
+
梅Pゴシック
|
92
|
+
/usr/share/fonts/truetype/horai-umefont/ume-pgo4.ttf
|
93
|
+
ume-pgo4
|
94
|
+
MS\ Pゴシック
|
95
|
+
MS\ Pゴシック
|
96
|
+
MS\ PGothic
|
97
|
+
],
|
98
|
+
%w[
|
99
|
+
梅ゴシック
|
100
|
+
/usr/share/fonts/truetype/horai-umefont/ume-tgo4.ttf
|
101
|
+
ume-tgo4
|
102
|
+
MS\ ゴシック
|
103
|
+
MS\ ゴシック
|
104
|
+
MS\ Gothic
|
105
|
+
],
|
106
|
+
%w[
|
107
|
+
梅P明朝
|
108
|
+
/usr/share/fonts/truetype/horai-umefont/ume-pmo3.ttf
|
109
|
+
ume-pmo3
|
110
|
+
MS\ P明朝
|
111
|
+
MS\ P明朝
|
112
|
+
MS\ PMincho
|
113
|
+
],
|
114
|
+
%w[
|
115
|
+
梅明朝
|
116
|
+
/usr/share/fonts/truetype/horai-umefont/ume-tmo3.ttf
|
117
|
+
ume-tmo3
|
118
|
+
MS\ 明朝
|
119
|
+
MS\ 明朝
|
120
|
+
MS\ Mincho
|
121
|
+
],
|
122
|
+
%w[
|
123
|
+
IPA\ Pゴシック
|
124
|
+
/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf
|
125
|
+
IPA\ PGothic
|
126
|
+
ipagp
|
127
|
+
],
|
128
|
+
%w[
|
129
|
+
IPA\ ゴシック
|
130
|
+
/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf
|
131
|
+
IPA\ Gothic
|
132
|
+
ipag
|
133
|
+
],
|
134
|
+
%w[
|
135
|
+
IPA\ P明朝
|
136
|
+
/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf
|
137
|
+
IPA\ PMincho
|
138
|
+
ipamp
|
139
|
+
],
|
140
|
+
%w[
|
141
|
+
IPA\ 明朝
|
142
|
+
/usr/share/fonts/opentype/ipafont-mincho/ipam.ttf
|
143
|
+
IPA\ Mincho
|
144
|
+
ipam
|
145
|
+
],
|
146
|
+
]
|
34
147
|
end
|
35
148
|
# :nocov:
|
149
|
+
font_info.each do |name, path, *aliases|
|
150
|
+
if File.exist?(path)
|
151
|
+
FONTS[name] = path
|
152
|
+
aliases.each do |a|
|
153
|
+
FONT_ALIASES[a] = path
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
36
157
|
end
|
37
158
|
end
|
data/lib/dxruby_sdl/image.rb
CHANGED
@@ -31,6 +31,7 @@ module DXRubySDL
|
|
31
31
|
|
32
32
|
def initialize(width, height, color = [0, 0, 0, 0])
|
33
33
|
@color = color
|
34
|
+
@_surface_is_dirty = false
|
34
35
|
|
35
36
|
if width == 0 && height == 0
|
36
37
|
return
|
@@ -39,6 +40,14 @@ module DXRubySDL
|
|
39
40
|
@_surface =
|
40
41
|
SDL::Surface.new(SDL::SWSURFACE, width, height, Window.send(:screen))
|
41
42
|
@_surface.fill_rect(0, 0, width, height, @color)
|
43
|
+
@_surface_is_dirty = true
|
44
|
+
end
|
45
|
+
|
46
|
+
def _surface_display_format_alpha
|
47
|
+
if @_surface_is_dirty
|
48
|
+
@_surface = @_surface.display_format_alpha
|
49
|
+
@_surface_is_dirty = false
|
50
|
+
end
|
42
51
|
end
|
43
52
|
|
44
53
|
def width
|
@@ -49,6 +58,16 @@ module DXRubySDL
|
|
49
58
|
return @_surface.h
|
50
59
|
end
|
51
60
|
|
61
|
+
def set_color_key(color)
|
62
|
+
@_surface.set_color_key(SDL::SRCCOLORKEY | SDL::RLEACCEL, color)
|
63
|
+
@_surface_is_dirty = true
|
64
|
+
end
|
65
|
+
|
66
|
+
def compare(x, y, color)
|
67
|
+
pixel = lock { @_surface.get_pixel(x, y) }
|
68
|
+
return @_surface.format.get_rgb(pixel) == color
|
69
|
+
end
|
70
|
+
|
52
71
|
def slice(x, y, width, height)
|
53
72
|
s = @_surface.copy_rect(x, y, width, height)
|
54
73
|
image = Image.new(0, 0)
|
@@ -61,6 +80,7 @@ module DXRubySDL
|
|
61
80
|
@_surface.draw_line(x1, y1, x2, y2,
|
62
81
|
to_sdl_color(color), true, to_sdl_alpha(color))
|
63
82
|
end
|
83
|
+
@_surface_is_dirty = true
|
64
84
|
return self
|
65
85
|
end
|
66
86
|
|
@@ -69,6 +89,7 @@ module DXRubySDL
|
|
69
89
|
@_surface.draw_circle(x, y, r, to_sdl_color(color), false, true,
|
70
90
|
to_sdl_alpha(color))
|
71
91
|
end
|
92
|
+
@_surface_is_dirty = true
|
72
93
|
return self
|
73
94
|
end
|
74
95
|
|
@@ -77,6 +98,7 @@ module DXRubySDL
|
|
77
98
|
@_surface.draw_circle(x, y, r, to_sdl_color(color), true, false,
|
78
99
|
to_sdl_alpha(color))
|
79
100
|
end
|
101
|
+
@_surface_is_dirty = true
|
80
102
|
return self
|
81
103
|
end
|
82
104
|
|
@@ -89,6 +111,7 @@ module DXRubySDL
|
|
89
111
|
@_surface.draw_rect(x, y, w, h, to_sdl_color(color), false,
|
90
112
|
to_sdl_alpha(color))
|
91
113
|
end
|
114
|
+
@_surface_is_dirty = true
|
92
115
|
return self
|
93
116
|
end
|
94
117
|
|
@@ -101,18 +124,41 @@ module DXRubySDL
|
|
101
124
|
@_surface.draw_rect(x, y, w, h, to_sdl_color(color), true,
|
102
125
|
to_sdl_alpha(color))
|
103
126
|
end
|
127
|
+
@_surface_is_dirty = true
|
128
|
+
return self
|
129
|
+
end
|
130
|
+
|
131
|
+
def clear
|
132
|
+
@_surface.fill_rect(0, 0, width, height, @color)
|
133
|
+
@_surface_is_dirty = true
|
134
|
+
end
|
135
|
+
|
136
|
+
def draw_font(x, y, string, font, color = [255, 255, 255])
|
137
|
+
if string.empty?
|
138
|
+
return
|
139
|
+
end
|
140
|
+
r, g, b = *color
|
141
|
+
h = font._ttf.height + 1
|
142
|
+
string.lines.each.with_index do |line, i|
|
143
|
+
line.chomp!
|
144
|
+
if line.empty?
|
145
|
+
next
|
146
|
+
end
|
147
|
+
font._ttf.draw_blended_utf8(@_surface, line, x, y + i * h, r, g, b)
|
148
|
+
end
|
149
|
+
@_surface_is_dirty = true
|
104
150
|
return self
|
105
151
|
end
|
106
152
|
|
107
|
-
# rubocop:disable SymbolName
|
108
153
|
class << self
|
109
154
|
alias_method :loadTiles, :load_tiles
|
110
155
|
alias_method :load_to_array, :load_tiles
|
111
156
|
alias_method :loadToArray, :load_to_array
|
112
157
|
end
|
158
|
+
alias_method :setColorKey, :set_color_key
|
113
159
|
alias_method :circleFill, :circle_fill
|
114
160
|
alias_method :boxFill, :box_fill
|
115
|
-
|
161
|
+
alias_method :drawFont, :draw_font
|
116
162
|
|
117
163
|
private
|
118
164
|
|
@@ -122,7 +168,7 @@ module DXRubySDL
|
|
122
168
|
else
|
123
169
|
begin
|
124
170
|
@_surface.lock
|
125
|
-
yield
|
171
|
+
return yield
|
126
172
|
ensure
|
127
173
|
@_surface.unlock
|
128
174
|
end
|
data/lib/dxruby_sdl/input.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
+
require 'set'
|
4
|
+
|
3
5
|
module DXRubySDL
|
4
6
|
module Input
|
5
7
|
module_function
|
@@ -98,7 +100,10 @@ module DXRubySDL
|
|
98
100
|
return SDL::Mouse.state[index] && !@last_mouse_state[index]
|
99
101
|
end
|
100
102
|
|
101
|
-
|
103
|
+
def keys
|
104
|
+
return @keys
|
105
|
+
end
|
106
|
+
|
102
107
|
class << self
|
103
108
|
alias_method :setRepeat, :set_repeat
|
104
109
|
alias_method :padDown?, :pad_down?
|
@@ -110,12 +115,12 @@ module DXRubySDL
|
|
110
115
|
alias_method :mouseDown?, :mouse_down?
|
111
116
|
alias_method :mousePush?, :mouse_push?
|
112
117
|
end
|
113
|
-
# rubocop:enable SymbolName
|
114
118
|
|
115
119
|
private
|
116
120
|
|
117
|
-
@
|
118
|
-
@
|
121
|
+
@keys = Set.new
|
122
|
+
@checked_keys = Set.new
|
123
|
+
@down_keys = Set.new
|
119
124
|
@last_mouse_state = [false, false, false]
|
120
125
|
@joysticks = []
|
121
126
|
|
@@ -123,7 +128,7 @@ module DXRubySDL
|
|
123
128
|
|
124
129
|
private
|
125
130
|
|
126
|
-
|
131
|
+
SDL_KEY_TABLE = {}
|
127
132
|
replace_table = {
|
128
133
|
'BACK' => 'BACKSPACE',
|
129
134
|
'ADD' => 'PLUS',
|
@@ -156,40 +161,35 @@ module DXRubySDL
|
|
156
161
|
end
|
157
162
|
end
|
158
163
|
begin
|
159
|
-
|
164
|
+
SDL_KEY_TABLE[DXRubySDL.const_get(k)] =
|
165
|
+
SDL::Key.const_get(name.to_sym)
|
160
166
|
rescue NameError
|
161
167
|
end
|
162
168
|
end
|
163
|
-
private_constant :
|
169
|
+
private_constant :SDL_KEY_TABLE
|
170
|
+
|
171
|
+
DXRUBY_KEY_TABLE = SDL_KEY_TABLE.invert
|
172
|
+
private_constant :DXRUBY_KEY_TABLE
|
164
173
|
|
165
174
|
def store_last_state
|
166
|
-
|
167
|
-
|
168
|
-
SDL::Key.scan
|
169
|
-
keys.each do |key|
|
170
|
-
if SDL::Key.press?(key)
|
171
|
-
@current_key_state.add(key)
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
@last_key_state = @current_key_state
|
176
|
-
@current_key_state = Set.new
|
175
|
+
@down_keys.merge(@checked_keys)
|
176
|
+
@checked_keys.clear
|
177
177
|
@last_mouse_state = SDL::Mouse.state
|
178
178
|
end
|
179
179
|
|
180
180
|
def sdl_key_press?(key)
|
181
|
-
|
182
|
-
if
|
183
|
-
@
|
181
|
+
dkey = to_dxruby_key(key)
|
182
|
+
if @keys.include?(dkey)
|
183
|
+
@checked_keys.add(dkey)
|
184
184
|
return true
|
185
185
|
else
|
186
|
-
@current_key_state.delete(key)
|
187
186
|
return false
|
188
187
|
end
|
189
188
|
end
|
190
189
|
|
191
190
|
def sdl_key_push?(key)
|
192
|
-
|
191
|
+
dkey = to_dxruby_key(key)
|
192
|
+
return sdl_key_press?(key) && !@down_keys.include?(dkey)
|
193
193
|
end
|
194
194
|
|
195
195
|
def joystick(pad_number)
|
@@ -203,7 +203,23 @@ module DXRubySDL
|
|
203
203
|
end
|
204
204
|
|
205
205
|
def to_sdl_key(key_code)
|
206
|
-
return
|
206
|
+
return SDL_KEY_TABLE[key_code]
|
207
|
+
end
|
208
|
+
|
209
|
+
def to_dxruby_key(key_code)
|
210
|
+
return DXRUBY_KEY_TABLE[key_code]
|
211
|
+
end
|
212
|
+
|
213
|
+
def handle_key_event(event)
|
214
|
+
dkey = to_dxruby_key(event.sym)
|
215
|
+
case event
|
216
|
+
when SDL::Event::KeyDown
|
217
|
+
@keys.add(dkey)
|
218
|
+
when SDL::Event::KeyUp
|
219
|
+
@keys.delete(dkey)
|
220
|
+
@checked_keys.delete(dkey)
|
221
|
+
@down_keys.delete(dkey)
|
222
|
+
end
|
207
223
|
end
|
208
224
|
end
|
209
225
|
end
|
data/lib/dxruby_sdl/sound.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
+
require 'forwardable'
|
4
|
+
|
3
5
|
module DXRubySDL
|
4
6
|
class Sound
|
7
|
+
extend Forwardable
|
8
|
+
|
5
9
|
@sdl_mixer_openend = false
|
6
10
|
|
7
11
|
def initialize(filename)
|
@@ -17,9 +21,9 @@ module DXRubySDL
|
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
24
|
+
def_delegators :@sound, :play, :set_volume
|
25
|
+
|
26
|
+
alias_method :setVolume, :set_volume
|
23
27
|
|
24
28
|
private
|
25
29
|
|
@@ -31,10 +35,16 @@ module DXRubySDL
|
|
31
35
|
def play
|
32
36
|
SDL::Mixer.play_music(@music, -1)
|
33
37
|
end
|
38
|
+
|
39
|
+
def set_volume(volume, time = 0)
|
40
|
+
raise NotImplementedError, 'Sound#set_volume(volume, time) with MIDI'
|
41
|
+
end
|
34
42
|
end
|
35
43
|
private_constant :Music
|
36
44
|
|
37
45
|
class Wave
|
46
|
+
extend Forwardable
|
47
|
+
|
38
48
|
def initialize(filename)
|
39
49
|
@wave = SDL::Mixer::Wave.load(filename)
|
40
50
|
@last_played_channel = nil
|
@@ -48,6 +58,13 @@ module DXRubySDL
|
|
48
58
|
retry
|
49
59
|
end
|
50
60
|
end
|
61
|
+
|
62
|
+
def set_volume(volume, time = 0)
|
63
|
+
if time > 0
|
64
|
+
raise NotImplementedError, 'Sound#set_volume(volume, time != 0)'
|
65
|
+
end
|
66
|
+
@wave.set_volume(volume)
|
67
|
+
end
|
51
68
|
end
|
52
69
|
private_constant :Wave
|
53
70
|
end
|