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
@@ -3,8 +3,30 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe DXRubySDL::Input,
|
5
5
|
'キーボード・ゲームパッド・マウスの入力を扱うモジュール' do
|
6
|
-
|
7
|
-
|
6
|
+
def push_key_down_event(sym)
|
7
|
+
e = SDL::Event::KeyDown.new
|
8
|
+
e.press = true
|
9
|
+
e.sym = sym
|
10
|
+
e.mod = 0
|
11
|
+
e.unicode = 0
|
12
|
+
SDL::Event.push(e)
|
13
|
+
end
|
14
|
+
|
15
|
+
def push_key_up_event(sym)
|
16
|
+
e = SDL::Event::KeyUp.new
|
17
|
+
e.press = false
|
18
|
+
e.sym = sym
|
19
|
+
e.mod = 0
|
20
|
+
e.unicode = 0
|
21
|
+
SDL::Event.push(e)
|
22
|
+
end
|
23
|
+
|
24
|
+
def update_input_keys
|
25
|
+
expect {
|
26
|
+
DXRubySDL::Window.loop do
|
27
|
+
SDL::Event.push(SDL::Event::Quit.new)
|
28
|
+
end
|
29
|
+
}.to raise_error(SystemExit)
|
8
30
|
end
|
9
31
|
|
10
32
|
shared_context '.set_repeat' do
|
@@ -19,43 +41,41 @@ describe DXRubySDL::Input,
|
|
19
41
|
end
|
20
42
|
|
21
43
|
describe '.set_repeat', 'キーリピートを設定する' do
|
22
|
-
subject {
|
44
|
+
subject { described_class.set_repeat(15, 2) }
|
23
45
|
|
24
46
|
include_context '.set_repeat'
|
25
47
|
|
26
48
|
describe 'alias' do
|
27
49
|
describe '.setRepeat' do
|
28
50
|
it_behaves_like '.set_repeat' do
|
29
|
-
subject {
|
51
|
+
subject { described_class.setRepeat(15, 2) }
|
30
52
|
end
|
31
53
|
end
|
32
54
|
end
|
33
55
|
end
|
34
56
|
|
35
|
-
shared_context '
|
57
|
+
shared_context 'push key_down events' do
|
36
58
|
let(:_keys) { [] }
|
37
59
|
|
38
60
|
before do
|
39
|
-
|
40
|
-
|
41
|
-
[_keys].flatten.include?(key) ? true : false
|
42
|
-
}
|
61
|
+
_keys.each { |key| push_key_down_event(key) }
|
62
|
+
update_input_keys
|
43
63
|
end
|
44
64
|
end
|
45
65
|
|
46
66
|
describe '.x' do
|
47
|
-
include_context '
|
67
|
+
include_context 'push key_down events'
|
48
68
|
|
49
69
|
subject { described_class.x }
|
50
70
|
|
51
71
|
context '左カーソルが押されている場合' do
|
52
|
-
let(:_keys) { SDL::Key::LEFT }
|
72
|
+
let(:_keys) { [SDL::Key::LEFT] }
|
53
73
|
|
54
74
|
it { should eq(-1) }
|
55
75
|
end
|
56
76
|
|
57
77
|
context '右カーソルが押されている場合' do
|
58
|
-
let(:_keys) { SDL::Key::RIGHT }
|
78
|
+
let(:_keys) { [SDL::Key::RIGHT] }
|
59
79
|
|
60
80
|
it { should eq(1) }
|
61
81
|
end
|
@@ -72,18 +92,18 @@ describe DXRubySDL::Input,
|
|
72
92
|
end
|
73
93
|
|
74
94
|
describe '.y' do
|
75
|
-
include_context '
|
95
|
+
include_context 'push key_down events'
|
76
96
|
|
77
97
|
subject { described_class.y }
|
78
98
|
|
79
99
|
context '上カーソルが押されている場合' do
|
80
|
-
let(:_keys) { SDL::Key::UP }
|
100
|
+
let(:_keys) { [SDL::Key::UP] }
|
81
101
|
|
82
102
|
it { should eq(-1) }
|
83
103
|
end
|
84
104
|
|
85
105
|
context '下カーソルが押されている場合' do
|
86
|
-
let(:_keys) { SDL::Key::DOWN }
|
106
|
+
let(:_keys) { [SDL::Key::DOWN] }
|
87
107
|
|
88
108
|
it { should eq(1) }
|
89
109
|
end
|
@@ -100,7 +120,7 @@ describe DXRubySDL::Input,
|
|
100
120
|
end
|
101
121
|
|
102
122
|
shared_context '.pad_down?' do
|
103
|
-
include_context '
|
123
|
+
include_context 'push key_down events'
|
104
124
|
|
105
125
|
context 'Joystickが接続されている場合' do
|
106
126
|
let(:joystick) {
|
@@ -141,7 +161,7 @@ describe DXRubySDL::Input,
|
|
141
161
|
end
|
142
162
|
|
143
163
|
context "#{_key}キーが押されている場合" do
|
144
|
-
let(:_keys) { SDL::Key.const_get(_key) }
|
164
|
+
let(:_keys) { [SDL::Key.const_get(_key)] }
|
145
165
|
|
146
166
|
it { should be_true }
|
147
167
|
end
|
@@ -173,7 +193,7 @@ describe DXRubySDL::Input,
|
|
173
193
|
let(:button_code) { DXRubySDL.const_get(_button) }
|
174
194
|
|
175
195
|
context "#{_key}キーが押されている場合" do
|
176
|
-
let(:_keys) { SDL::Key.const_get(_key) }
|
196
|
+
let(:_keys) { [SDL::Key.const_get(_key)] }
|
177
197
|
|
178
198
|
it { should be_true }
|
179
199
|
end
|
@@ -201,12 +221,7 @@ describe DXRubySDL::Input,
|
|
201
221
|
end
|
202
222
|
|
203
223
|
shared_context '.pad_push?' do
|
204
|
-
include_context '
|
205
|
-
|
206
|
-
before do
|
207
|
-
DXRubySDL::Input.instance_variable_set('@current_key_state', Set.new)
|
208
|
-
DXRubySDL::Input.instance_variable_set('@last_key_state', Set.new)
|
209
|
-
end
|
224
|
+
include_context 'push key_down events'
|
210
225
|
|
211
226
|
context 'Joystickが接続されている場合' do
|
212
227
|
let(:joystick) {
|
@@ -247,7 +262,7 @@ describe DXRubySDL::Input,
|
|
247
262
|
end
|
248
263
|
|
249
264
|
context "#{_key}キーが押されている場合" do
|
250
|
-
let(:_keys) { SDL::Key.const_get(_key) }
|
265
|
+
let(:_keys) { [SDL::Key.const_get(_key)] }
|
251
266
|
|
252
267
|
it { should be_true }
|
253
268
|
end
|
@@ -279,7 +294,7 @@ describe DXRubySDL::Input,
|
|
279
294
|
let(:button_code) { DXRubySDL.const_get(_button) }
|
280
295
|
|
281
296
|
context "#{_key}キーが押されている場合" do
|
282
|
-
let(:_keys) { SDL::Key.const_get(_key) }
|
297
|
+
let(:_keys) { [SDL::Key.const_get(_key)] }
|
283
298
|
|
284
299
|
it { should be_true }
|
285
300
|
end
|
@@ -343,10 +358,10 @@ describe DXRubySDL::Input,
|
|
343
358
|
end
|
344
359
|
|
345
360
|
shared_context '.key_down?' do
|
346
|
-
include_context '
|
361
|
+
include_context 'push key_down events'
|
347
362
|
|
348
363
|
context 'ESCAPEキーが押されている場合' do
|
349
|
-
let(:_keys) { SDL::Key::ESCAPE }
|
364
|
+
let(:_keys) { [SDL::Key::ESCAPE] }
|
350
365
|
let(:key_code) { DXRubySDL::K_ESCAPE }
|
351
366
|
|
352
367
|
it { should be_true }
|
@@ -368,26 +383,20 @@ describe DXRubySDL::Input,
|
|
368
383
|
end
|
369
384
|
|
370
385
|
shared_context '.key_push?' do
|
371
|
-
include_context '
|
386
|
+
include_context 'push key_down events'
|
372
387
|
|
373
388
|
subject { described_class.send(method, key_code) }
|
374
389
|
|
375
|
-
before do
|
376
|
-
DXRubySDL::Input.instance_variable_set('@current_key_state', Set.new)
|
377
|
-
DXRubySDL::Input.instance_variable_set('@last_key_state', Set.new)
|
378
|
-
end
|
379
|
-
|
380
390
|
context 'ESCAPEキーが押されている場合' do
|
381
|
-
let(:_keys) { SDL::Key::ESCAPE }
|
391
|
+
let(:_keys) { [SDL::Key::ESCAPE] }
|
382
392
|
let(:key_code) { DXRubySDL::K_ESCAPE }
|
383
393
|
|
384
394
|
it { should be_true }
|
385
395
|
|
386
396
|
context 'キーが押しっぱなしの場合' do
|
387
397
|
before do
|
388
|
-
|
389
|
-
|
390
|
-
last_key_state.add(*_keys)
|
398
|
+
down_keys = described_class.instance_variable_get('@down_keys')
|
399
|
+
down_keys.add(key_code)
|
391
400
|
end
|
392
401
|
|
393
402
|
it { should be_false }
|
@@ -395,7 +404,7 @@ describe DXRubySDL::Input,
|
|
395
404
|
|
396
405
|
context 'キーが押しっぱなしだが、' \
|
397
406
|
'Input.key_push?をメインループで毎回処理しない場合' do
|
398
|
-
|
407
|
+
specify '最初の1回以外は全てfalseを返す' do
|
399
408
|
begin
|
400
409
|
first = true
|
401
410
|
i = 0
|
@@ -528,8 +537,8 @@ describe DXRubySDL::Input,
|
|
528
537
|
shared_context '.mouse_push?' do
|
529
538
|
context '直前にマウスのボタンを押していない場合' do
|
530
539
|
before do
|
531
|
-
|
532
|
-
|
540
|
+
described_class.instance_variable_set('@last_mouse_state',
|
541
|
+
[0, 0, false, false, false])
|
533
542
|
end
|
534
543
|
|
535
544
|
context 'マウスの左ボタンを押している場合' do
|
@@ -610,8 +619,8 @@ describe DXRubySDL::Input,
|
|
610
619
|
|
611
620
|
context '直前にマウスのボタンを全て押していた場合' do
|
612
621
|
before do
|
613
|
-
|
614
|
-
|
622
|
+
described_class.instance_variable_set('@last_mouse_state',
|
623
|
+
[0, 0, true, true, true])
|
615
624
|
end
|
616
625
|
|
617
626
|
context 'マウスの左ボタンを押している場合' do
|
@@ -704,4 +713,34 @@ describe DXRubySDL::Input,
|
|
704
713
|
end
|
705
714
|
end
|
706
715
|
end
|
716
|
+
|
717
|
+
describe '.keys' do
|
718
|
+
subject {
|
719
|
+
update_input_keys
|
720
|
+
described_class.keys
|
721
|
+
}
|
722
|
+
|
723
|
+
context 'スペースキー、上カーソルキー、Aキーを押している場合' do
|
724
|
+
before do
|
725
|
+
push_key_down_event(SDL::Key::SPACE)
|
726
|
+
push_key_down_event(SDL::Key::UP)
|
727
|
+
push_key_down_event(SDL::Key::DOWN)
|
728
|
+
push_key_up_event(SDL::Key::DOWN)
|
729
|
+
push_key_down_event(SDL::Key::A)
|
730
|
+
end
|
731
|
+
|
732
|
+
it {
|
733
|
+
should include(DXRubySDL::K_SPACE, DXRubySDL::K_UP, DXRubySDL::K_A)
|
734
|
+
}
|
735
|
+
end
|
736
|
+
|
737
|
+
context '下カーソルキーを押したあとに離した場合' do
|
738
|
+
before do
|
739
|
+
push_key_down_event(SDL::Key::DOWN)
|
740
|
+
push_key_up_event(SDL::Key::DOWN)
|
741
|
+
end
|
742
|
+
|
743
|
+
it { should be_empty }
|
744
|
+
end
|
745
|
+
end
|
707
746
|
end
|
File without changes
|
File without changes
|