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
@@ -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
|