wii4r 0.5.0-x86-linux
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.
- data/LICENSE +675 -0
- data/README.rdoc +39 -0
- data/Rakefile +10 -0
- data/examples/playsound.rb +14 -0
- data/examples/poll.rb +104 -0
- data/ext/wii4r/classic.c +233 -0
- data/ext/wii4r/guitarhero3.c +175 -0
- data/ext/wii4r/nunchuk.c +310 -0
- data/ext/wii4r/wii4r.c +186 -0
- data/ext/wii4r/wiimote.c +1258 -0
- data/ext/wii4r/wiimotemanager.c +369 -0
- data/lib/wii4r.so +0 -0
- data/wii4r.gemspec +28 -0
- metadata +98 -0
data/README.rdoc
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
= Wii4R
|
2
|
+
|
3
|
+
Ruby C Extension for controlling Wii Remote devices via bluetooth connection.
|
4
|
+
Binding of C wiiuse library (http://www.wiiuse.net)
|
5
|
+
|
6
|
+
== Install
|
7
|
+
|
8
|
+
$ make
|
9
|
+
$ make install
|
10
|
+
$ make clean
|
11
|
+
|
12
|
+
That should be all.
|
13
|
+
|
14
|
+
== Dependencies
|
15
|
+
|
16
|
+
* wiiuse lib (http://www.wiiuse.net) (lacks of speaker support and small fixes)
|
17
|
+
* wiiuse_fork (github) (lacks of speaker support as for now)
|
18
|
+
|
19
|
+
== Usage
|
20
|
+
|
21
|
+
require 'wii4r'
|
22
|
+
include Wii
|
23
|
+
|
24
|
+
w = WiimoteManager.new
|
25
|
+
w.connect
|
26
|
+
w.poll do |(wiimote, event)|
|
27
|
+
if event == :generic
|
28
|
+
if wiimote.pressed? BUTTON_A
|
29
|
+
puts "button a pressed!"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
See rdoc documentation at doc/ for more details
|
35
|
+
|
36
|
+
== Copyright
|
37
|
+
Copyright (c) 2009 KzMz & BuZz.
|
38
|
+
|
39
|
+
LICENSE for details
|
data/Rakefile
ADDED
data/examples/poll.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
#! /usr/bin/env/ruby
|
2
|
+
############################################################################
|
3
|
+
# #
|
4
|
+
# Copyright (C) 2009 by KzMz KzMz@modusbibendi.org #
|
5
|
+
# Copyright (C) 2009 by BuZz Gambino.Giorgio@gmail.com #
|
6
|
+
# #
|
7
|
+
# This program is free software; you can redistribute it and/or modify #
|
8
|
+
# it under the terms of the GNU General Public License as published by #
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or #
|
10
|
+
# (at your option) any later version. #
|
11
|
+
# #
|
12
|
+
# This program is distributed in the hope that it will be useful, #
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
15
|
+
# GNU General Public License for more details. #
|
16
|
+
# #
|
17
|
+
# You should have received a copy of the GNU General Public License #
|
18
|
+
# along with this program; if not, write to the #
|
19
|
+
# Free Software Foundation, Inc., #
|
20
|
+
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
|
21
|
+
############################################################################
|
22
|
+
|
23
|
+
require '../wii4r'
|
24
|
+
include Wii
|
25
|
+
|
26
|
+
def set_rumble(w)
|
27
|
+
w.rumble= w.rumble? ? false : true
|
28
|
+
end
|
29
|
+
|
30
|
+
def status(w)
|
31
|
+
puts w.status
|
32
|
+
end
|
33
|
+
|
34
|
+
def accel_on(w)
|
35
|
+
w.motion_sensing = true
|
36
|
+
puts "Pitch: #{w.pitch}"
|
37
|
+
puts "Roll: #{w.roll}"
|
38
|
+
w.motion_sensing = false
|
39
|
+
end
|
40
|
+
|
41
|
+
def vres(w)
|
42
|
+
puts "Virtual Resolution => #{w.virtual_resolution}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def sens_pos(w)
|
46
|
+
puts "Sensor Bar Position => #{w.sensor_bar_position}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def a_ratio(w)
|
50
|
+
puts "Aspect Ratio => #{w.aspect_ratio}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def sens(w)
|
54
|
+
w.ir = true
|
55
|
+
puts "IR Sensitivity Level => #{w.sensitivity}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def speaker(w)
|
59
|
+
|
60
|
+
if w.speaker?
|
61
|
+
puts "Wiimote is using speaker"
|
62
|
+
else puts "Wiimote is not using speaker"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
begin
|
67
|
+
|
68
|
+
w = WiimoteManager.new
|
69
|
+
|
70
|
+
puts "Connecting.... Press 1 and 2 BUTTONS"
|
71
|
+
|
72
|
+
w.connect
|
73
|
+
|
74
|
+
while(!w.wiimotes[0].pressed? Wii::BUTTON_UP)
|
75
|
+
w.poll do |(wm, event)|
|
76
|
+
if event == :generic
|
77
|
+
if wm.pressed? Wii::BUTTON_A
|
78
|
+
set_rumble(wm)
|
79
|
+
elsif wm.pressed? Wii::BUTTON_B
|
80
|
+
status(wm)
|
81
|
+
elsif wm.pressed? Wii::BUTTON_DOWN
|
82
|
+
speaker(wm)
|
83
|
+
elsif wm.pressed? Wii::BUTTON_LEFT
|
84
|
+
puts "LEFT!"
|
85
|
+
elsif wm.pressed? Wii::BUTTON_RIGHT
|
86
|
+
puts "RIGHT!"
|
87
|
+
elsif wm.pressed? Wii::BUTTON_PLUS
|
88
|
+
accel_on(wm)
|
89
|
+
elsif wm.pressed? Wii::BUTTON_MINUS
|
90
|
+
vres(wm)
|
91
|
+
elsif wm.pressed? Wii::BUTTON_HOME
|
92
|
+
sens_pos(wm)
|
93
|
+
elsif wm.pressed? Wii::BUTTON_ONE
|
94
|
+
a_ratio(wm)
|
95
|
+
elsif wm.pressed? Wii::BUTTON_TWO
|
96
|
+
sens(wm)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
ensure
|
103
|
+
w.cleanup!
|
104
|
+
end
|
data/ext/wii4r/classic.c
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
/*
|
2
|
+
############################################################################
|
3
|
+
# #
|
4
|
+
# Copyright (C) 2009 by KzMz KzMz@modusbibendi.org #
|
5
|
+
# Copyright (C) 2009 by BuZz Gambino.Giorgio@gmail.com #
|
6
|
+
# #
|
7
|
+
# This program is free software; you can redistribute it and/or modify #
|
8
|
+
# it under the terms of the GNU General Public License as published by #
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or #
|
10
|
+
# (at your option) any later version. #
|
11
|
+
# #
|
12
|
+
# This program is distributed in the hope that it will be useful, #
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
15
|
+
# GNU General Public License for more details. #
|
16
|
+
# #
|
17
|
+
# You should have received a copy of the GNU General Public License #
|
18
|
+
# along with this program; if not, write to the #
|
19
|
+
# Free Software Foundation, Inc., #
|
20
|
+
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
|
21
|
+
############################################################################
|
22
|
+
*/
|
23
|
+
|
24
|
+
#include "wii4r.h"
|
25
|
+
|
26
|
+
/*
|
27
|
+
* call-seq:
|
28
|
+
* classicctrl.pressed?(button) -> true or false
|
29
|
+
*
|
30
|
+
* Returns true if <i>button</i> is being pressed on <i>self</i>.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
static VALUE rb_cc_pressed(VALUE self, VALUE arg) {
|
35
|
+
classic_ctrl_t *cc;
|
36
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
37
|
+
if(!cc) return Qnil;
|
38
|
+
Check_Type(arg, T_FIXNUM);
|
39
|
+
if(IS_PRESSED(cc, NUM2INT(arg)))
|
40
|
+
return Qtrue;
|
41
|
+
else
|
42
|
+
return Qfalse;
|
43
|
+
}
|
44
|
+
|
45
|
+
/*
|
46
|
+
* call-seq:
|
47
|
+
* classicctrl.just_pressed?(button) -> true of false
|
48
|
+
*
|
49
|
+
* Returns true if <i>button</i> is just pressed on <i>self</i>.
|
50
|
+
*
|
51
|
+
*/
|
52
|
+
|
53
|
+
static VALUE rb_cc_jpressed(VALUE self, VALUE arg) {
|
54
|
+
classic_ctrl_t *cc;
|
55
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
56
|
+
if(!cc) return Qnil;
|
57
|
+
Check_Type(arg, T_FIXNUM);
|
58
|
+
if(IS_JUST_PRESSED(cc, NUM2INT(arg)))
|
59
|
+
return Qtrue;
|
60
|
+
else
|
61
|
+
return Qfalse;
|
62
|
+
}
|
63
|
+
|
64
|
+
/*
|
65
|
+
* call-seq:
|
66
|
+
* classicctrl.held?(button) -> true of false
|
67
|
+
*
|
68
|
+
* Returns true if <i>button</i> is being held on <i>self</i>.
|
69
|
+
*
|
70
|
+
*/
|
71
|
+
|
72
|
+
static VALUE rb_cc_held(VALUE self, VALUE arg) {
|
73
|
+
classic_ctrl_t *cc;
|
74
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
75
|
+
if(!cc) return Qnil;
|
76
|
+
Check_Type(arg, T_FIXNUM);
|
77
|
+
if(IS_HELD(cc, NUM2INT(arg)))
|
78
|
+
return Qtrue;
|
79
|
+
else
|
80
|
+
return Qfalse;
|
81
|
+
}
|
82
|
+
|
83
|
+
/*
|
84
|
+
* call-seq:
|
85
|
+
* classicctrl.released?(button) -> true or false
|
86
|
+
*
|
87
|
+
* Returns true if <i>button</i> is just released on <i>self</i>.
|
88
|
+
*
|
89
|
+
*/
|
90
|
+
|
91
|
+
static VALUE rb_cc_rel(VALUE self, VALUE arg) {
|
92
|
+
classic_ctrl_t *cc;
|
93
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
94
|
+
if(!cc) return Qnil;
|
95
|
+
Check_Type(arg, T_FIXNUM);
|
96
|
+
if(IS_RELEASED(cc, NUM2INT(arg)))
|
97
|
+
return Qtrue;
|
98
|
+
else
|
99
|
+
return Qfalse;
|
100
|
+
}
|
101
|
+
|
102
|
+
/*
|
103
|
+
* call-seq:
|
104
|
+
* classicctrl.right_joystick_angle -> float
|
105
|
+
*
|
106
|
+
* Returns the angle at which the right joystick is being held.
|
107
|
+
* 0 => Straight up
|
108
|
+
* 90 => right
|
109
|
+
* 180 => down
|
110
|
+
* 270 => left
|
111
|
+
*
|
112
|
+
*/
|
113
|
+
|
114
|
+
static VALUE rb_cc_rjangle(VALUE self) {
|
115
|
+
classic_ctrl_t *cc;
|
116
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
117
|
+
if(!cc) return Qnil;
|
118
|
+
return rb_float_new(cc->rjs.ang);
|
119
|
+
}
|
120
|
+
|
121
|
+
/*
|
122
|
+
* call-seq:
|
123
|
+
* classicctrl.right_joystick_magnitude -> float
|
124
|
+
*
|
125
|
+
* Returns the magnitude at which the right joystick is being held.
|
126
|
+
* Range: [0, 1]
|
127
|
+
* 0 => center
|
128
|
+
* 1 => edges
|
129
|
+
*
|
130
|
+
*/
|
131
|
+
|
132
|
+
static VALUE rb_cc_rjmag(VALUE self) {
|
133
|
+
classic_ctrl_t *cc;
|
134
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
135
|
+
if(!cc) return Qnil;
|
136
|
+
return rb_float_new(cc->rjs.mag);
|
137
|
+
}
|
138
|
+
|
139
|
+
/*
|
140
|
+
* call-seq:
|
141
|
+
* classicctrl.left_joystick_angle -> float
|
142
|
+
*
|
143
|
+
* Returns the angle at which the left joystick is being held.
|
144
|
+
* 0 => Straight up
|
145
|
+
* 90 => right
|
146
|
+
* 180 => down
|
147
|
+
* 270 => left
|
148
|
+
*
|
149
|
+
*/
|
150
|
+
|
151
|
+
static VALUE rb_cc_ljangle(VALUE self) {
|
152
|
+
classic_ctrl_t *cc;
|
153
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
154
|
+
if(!cc) return Qnil;
|
155
|
+
return rb_float_new(cc->ljs.ang);
|
156
|
+
}
|
157
|
+
|
158
|
+
/*
|
159
|
+
* call-seq:
|
160
|
+
* classicctrl.left_joystick_magnitude -> float
|
161
|
+
*
|
162
|
+
* Returns the magnitude at which the left joystick is being held.
|
163
|
+
* Range: [0, 1]
|
164
|
+
* 0 => center
|
165
|
+
* 1 => edges
|
166
|
+
*
|
167
|
+
*/
|
168
|
+
|
169
|
+
static VALUE rb_cc_ljmag(VALUE self) {
|
170
|
+
classic_ctrl_t *cc;
|
171
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
172
|
+
if(!cc) return Qnil;
|
173
|
+
return rb_float_new(cc->ljs.mag);
|
174
|
+
}
|
175
|
+
|
176
|
+
/*
|
177
|
+
* call-seq:
|
178
|
+
* classicctrl.left_shoulder -> float
|
179
|
+
*
|
180
|
+
* Returns the magnitude at which the left shoulder button is being held.
|
181
|
+
* Range: [0, 1]
|
182
|
+
* 0 => not pressed
|
183
|
+
* 1 => fully pressed
|
184
|
+
*
|
185
|
+
*/
|
186
|
+
|
187
|
+
static VALUE rb_cc_lshoulder(VALUE self) {
|
188
|
+
classic_ctrl_t *cc;
|
189
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
190
|
+
if(!cc) return Qnil;
|
191
|
+
return rb_float_new(cc->l_shoulder);
|
192
|
+
}
|
193
|
+
|
194
|
+
/*
|
195
|
+
* call-seq:
|
196
|
+
* classicctrl.right_shoulder -> float
|
197
|
+
*
|
198
|
+
* Returns the magnitude at which the right shoulder button is being held.
|
199
|
+
* Range: [0, 1]
|
200
|
+
* 0 => not pressed
|
201
|
+
* 1 => fully pressed
|
202
|
+
*
|
203
|
+
*/
|
204
|
+
|
205
|
+
static VALUE rb_cc_rshoulder(VALUE self) {
|
206
|
+
classic_ctrl_t *cc;
|
207
|
+
Data_Get_Struct(self, classic_ctrl_t, cc);
|
208
|
+
if(!cc) return Qnil;
|
209
|
+
return rb_float_new(cc->r_shoulder);
|
210
|
+
}
|
211
|
+
|
212
|
+
/*
|
213
|
+
* Provides a set of methods for accessing ClassicController properties and members.
|
214
|
+
* - button events (pressed, released, held, just pressed)
|
215
|
+
* - joystick values (angles & magnitude)
|
216
|
+
*
|
217
|
+
*
|
218
|
+
*/
|
219
|
+
|
220
|
+
void init_cc() {
|
221
|
+
cc_class = rb_define_class_under(wii_class, "ClassicController", rb_cObject);
|
222
|
+
|
223
|
+
rb_define_method(cc_class, "pressed?", rb_cc_pressed, 1);
|
224
|
+
rb_define_method(cc_class, "just_pressed?", rb_cc_jpressed, 1);
|
225
|
+
rb_define_method(cc_class, "held?", rb_cc_held, 1);
|
226
|
+
rb_define_method(cc_class, "released?", rb_cc_rel, 1);
|
227
|
+
rb_define_method(cc_class, "left_joystick_angle", rb_cc_ljangle, 0);
|
228
|
+
rb_define_method(cc_class, "left_joystick_magnitude", rb_cc_ljmag, 0);
|
229
|
+
rb_define_method(cc_class, "right_joystick_angle", rb_cc_rjangle, 0);
|
230
|
+
rb_define_method(cc_class, "right_joystick_magnitude", rb_cc_rjmag, 0);
|
231
|
+
rb_define_method(cc_class, "right_shoulder", rb_cc_rshoulder, 0);
|
232
|
+
rb_define_method(cc_class, "left_shoulder", rb_cc_lshoulder, 0);
|
233
|
+
}
|
@@ -0,0 +1,175 @@
|
|
1
|
+
/*
|
2
|
+
############################################################################
|
3
|
+
# #
|
4
|
+
# Copyright (C) 2009 by KzMz KzMz@modusbibendi.org #
|
5
|
+
# Copyright (C) 2009 by BuZz Gambino.Giorgio@gmail.com #
|
6
|
+
# #
|
7
|
+
# This program is free software; you can redistribute it and/or modify #
|
8
|
+
# it under the terms of the GNU General Public License as published by #
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or #
|
10
|
+
# (at your option) any later version. #
|
11
|
+
# #
|
12
|
+
# This program is distributed in the hope that it will be useful, #
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
15
|
+
# GNU General Public License for more details. #
|
16
|
+
# #
|
17
|
+
# You should have received a copy of the GNU General Public License #
|
18
|
+
# along with this program; if not, write to the #
|
19
|
+
# Free Software Foundation, Inc., #
|
20
|
+
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
|
21
|
+
############################################################################
|
22
|
+
*/
|
23
|
+
|
24
|
+
#include "wii4r.h"
|
25
|
+
|
26
|
+
/*
|
27
|
+
* call-seq:
|
28
|
+
* gh3ctrl.pressed?(button) -> true or false
|
29
|
+
*
|
30
|
+
* Returns true if <i>button</i> is being pressed on <i>self</i>.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
static VALUE rb_gh3_pressed(VALUE self, VALUE arg) {
|
35
|
+
guitar_hero_3_t *gh3;
|
36
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
37
|
+
if(!gh3) return Qnil;
|
38
|
+
Check_Type(arg, T_FIXNUM);
|
39
|
+
if(IS_PRESSED(gh3, NUM2INT(arg)))
|
40
|
+
return Qtrue;
|
41
|
+
else
|
42
|
+
return Qfalse;
|
43
|
+
}
|
44
|
+
|
45
|
+
/*
|
46
|
+
* call-seq:
|
47
|
+
* gh3ctrl.just_pressed?(button) -> true of false
|
48
|
+
*
|
49
|
+
* Returns true if <i>button</i> is just pressed on <i>self</i>.
|
50
|
+
*
|
51
|
+
*/
|
52
|
+
|
53
|
+
static VALUE rb_gh3_jpressed(VALUE self, VALUE arg) {
|
54
|
+
guitar_hero_3_t *gh3;
|
55
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
56
|
+
if(!gh3) return Qnil;
|
57
|
+
Check_Type(arg, T_FIXNUM);
|
58
|
+
if(IS_JUST_PRESSED(gh3, NUM2INT(arg)))
|
59
|
+
return Qtrue;
|
60
|
+
else
|
61
|
+
return Qfalse;
|
62
|
+
}
|
63
|
+
|
64
|
+
/*
|
65
|
+
* call-seq:
|
66
|
+
* gh3ctrl.held?(button) -> true of false
|
67
|
+
*
|
68
|
+
* Returns true if <i>button</i> is being held on <i>self</i>.
|
69
|
+
*
|
70
|
+
*/
|
71
|
+
|
72
|
+
static VALUE rb_gh3_held(VALUE self, VALUE arg) {
|
73
|
+
guitar_hero_3_t *gh3;
|
74
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
75
|
+
if(!gh3) return Qnil;
|
76
|
+
Check_Type(arg, T_FIXNUM);
|
77
|
+
if(IS_HELD(gh3, NUM2INT(arg)))
|
78
|
+
return Qtrue;
|
79
|
+
else
|
80
|
+
return Qfalse;
|
81
|
+
}
|
82
|
+
|
83
|
+
/*
|
84
|
+
* call-seq:
|
85
|
+
* gh3ctrl.released?(button) -> true or false
|
86
|
+
*
|
87
|
+
* Returns true if <i>button</i> is just released on <i>self</i>.
|
88
|
+
*
|
89
|
+
*/
|
90
|
+
|
91
|
+
static VALUE rb_gh3_rel(VALUE self, VALUE arg) {
|
92
|
+
guitar_hero_3_t *gh3;
|
93
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
94
|
+
if(!gh3) return Qnil;
|
95
|
+
Check_Type(arg, T_FIXNUM);
|
96
|
+
if(IS_RELEASED(gh3, NUM2INT(arg)))
|
97
|
+
return Qtrue;
|
98
|
+
else
|
99
|
+
return Qfalse;
|
100
|
+
}
|
101
|
+
|
102
|
+
/*
|
103
|
+
* call-seq:
|
104
|
+
* gh3ctrl.joystick_angle -> float
|
105
|
+
*
|
106
|
+
* Returns the angle at which the joystick is being held.
|
107
|
+
* 0 => Straight up
|
108
|
+
* 90 => right
|
109
|
+
* 180 => down
|
110
|
+
* 270 => left
|
111
|
+
*
|
112
|
+
*/
|
113
|
+
|
114
|
+
static VALUE rb_gh3_jangle(VALUE self) {
|
115
|
+
guitar_hero_3_t *gh3;
|
116
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
117
|
+
if(!gh3) return Qnil;
|
118
|
+
return rb_float_new(gh3->js.ang);
|
119
|
+
}
|
120
|
+
|
121
|
+
/*
|
122
|
+
* call-seq:
|
123
|
+
* gh3ctrl.joystick_magnitude -> float
|
124
|
+
*
|
125
|
+
* Returns the magnitude at which the joystick is being held.
|
126
|
+
* Range: [0, 1]
|
127
|
+
* 0 => center
|
128
|
+
* 1 => edges
|
129
|
+
*
|
130
|
+
*/
|
131
|
+
|
132
|
+
static VALUE rb_gh3_jmag(VALUE self) {
|
133
|
+
guitar_hero_3_t *gh3;
|
134
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
135
|
+
if(!gh3) return Qnil;
|
136
|
+
return rb_float_new(gh3->js.mag);
|
137
|
+
}
|
138
|
+
|
139
|
+
/*
|
140
|
+
* call-seq:
|
141
|
+
* gh3ctrl.whammy_bar -> float
|
142
|
+
*
|
143
|
+
* Returns the magnitude at which the whammy bar is being held.
|
144
|
+
* Range: [0, 1]
|
145
|
+
* 0 => not pressed
|
146
|
+
* 1 => fully pressed
|
147
|
+
*
|
148
|
+
*/
|
149
|
+
|
150
|
+
static VALUE rb_gh3_wbar(VALUE self) {
|
151
|
+
guitar_hero_3_t *gh3;
|
152
|
+
Data_Get_Struct(self, guitar_hero_3_t, gh3);
|
153
|
+
if(!gh3) return Qnil;
|
154
|
+
return rb_float_new(gh3->whammy_bar);
|
155
|
+
}
|
156
|
+
|
157
|
+
/*
|
158
|
+
* Provides a set of methods for accessing Guitar Hero 3 Controller properties and members.
|
159
|
+
* - button events (pressed, just pressed, held, released)
|
160
|
+
* - whammy bar value
|
161
|
+
* - joystick values (angle, magnitude)
|
162
|
+
*
|
163
|
+
*/
|
164
|
+
|
165
|
+
void init_gh3() {
|
166
|
+
gh3_class = rb_define_class_under(wii_class, "GH3Controller", rb_cObject);
|
167
|
+
|
168
|
+
rb_define_method(gh3_class, "pressed?", rb_gh3_pressed, 1);
|
169
|
+
rb_define_method(gh3_class, "just_pressed?", rb_gh3_jpressed, 1);
|
170
|
+
rb_define_method(gh3_class, "held?", rb_gh3_held, 1);
|
171
|
+
rb_define_method(gh3_class, "released?", rb_gh3_rel, 1);
|
172
|
+
rb_define_method(gh3_class, "whammy_bar", rb_gh3_wbar, 0);
|
173
|
+
rb_define_method(gh3_class, "joystick_angle", rb_gh3_jangle, 0);
|
174
|
+
rb_define_method(gh3_class, "joystick_magnitude", rb_gh3_jmag, 0);
|
175
|
+
}
|