dxruby_sdl 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/dxruby_sdl.png)](http://badge.fury.io/rb/dxruby_sdl)
|
3
4
|
[![Build Status](https://travis-ci.org/takaokouji/dxruby_sdl.png?branch=master)](https://travis-ci.org/takaokouji/dxruby_sdl)
|
4
5
|
[![Coverage Status](https://coveralls.io/repos/takaokouji/dxruby_sdl/badge.png?branch=master)](https://coveralls.io/r/takaokouji/dxruby_sdl?branch=master)
|
5
6
|
[![Dependency Status](https://gemnasium.com/takaokouji/dxruby_sdl.png)](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
|