summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTom Black <[email protected]>2016-10-09 16:27:13 -0400
committerTom Black <[email protected]>2016-10-09 16:27:13 -0400
commitfa8ceec20f04fcdfe14189aa415ad1b5f8c32728 (patch)
tree66ff45b6325f98df840441bda250583c1978e6c7
parent11ef2c4992ad87c6d73d4357970f8a3a64abedcf (diff)
downloadruby2d-fa8ceec20f04fcdfe14189aa415ad1b5f8c32728.tar.gz
ruby2d-fa8ceec20f04fcdfe14189aa415ad1b5f8c32728.zip
Add `on_controller` input block
Also add `which` to the controller callback
-rw-r--r--ext/ruby2d/ruby2d.c3
-rw-r--r--lib/ruby2d/application.rb4
-rw-r--r--lib/ruby2d/dsl.rb4
-rw-r--r--lib/ruby2d/window.rb11
4 files changed, 18 insertions, 4 deletions
diff --git a/ext/ruby2d/ruby2d.c b/ext/ruby2d/ruby2d.c
index 06a35ad..c97b739 100644
--- a/ext/ruby2d/ruby2d.c
+++ b/ext/ruby2d/ruby2d.c
@@ -127,7 +127,8 @@ static void on_key_down(const char *key) {
* Simple 2D `on_controller` input callback function
*/
static void on_controller(int which, bool is_axis, int axis, int val, bool is_btn, int btn) {
- rb_funcall(self, rb_intern("controller_callback"), 5,
+ rb_funcall(self, rb_intern("controller_callback"), 6,
+ INT2NUM(which),
is_axis ? Qtrue : Qfalse, INT2NUM(axis), INT2NUM(val),
is_btn ? Qtrue : Qfalse, INT2NUM(btn)
);
diff --git a/lib/ruby2d/application.rb b/lib/ruby2d/application.rb
index f2c74da..52b50e1 100644
--- a/lib/ruby2d/application.rb
+++ b/lib/ruby2d/application.rb
@@ -20,6 +20,10 @@ module Ruby2D::Application
@@window.on_key(&proc)
end
+ def on_controller(&proc)
+ @@window.on_controller(&proc)
+ end
+
def add(o)
@@window.add(o)
end
diff --git a/lib/ruby2d/dsl.rb b/lib/ruby2d/dsl.rb
index 5c15c30..dbc6390 100644
--- a/lib/ruby2d/dsl.rb
+++ b/lib/ruby2d/dsl.rb
@@ -17,6 +17,10 @@ module Ruby2D::DSL
Application.on_key(&proc)
end
+ def on_controller(&proc)
+ Application.on_controller(&proc)
+ end
+
def update(&proc)
Application.update(&proc)
end
diff --git a/lib/ruby2d/window.rb b/lib/ruby2d/window.rb
index 28fd019..1d47e7b 100644
--- a/lib/ruby2d/window.rb
+++ b/lib/ruby2d/window.rb
@@ -17,6 +17,7 @@ module Ruby2D
@objects = []
@keys, @keys_up, @keys_down, @controller = {}, {}, {}, {}
@on_key_proc = Proc.new {}
+ @on_controller_proc = Proc.new {}
@update_proc = Proc.new {}
end
@@ -133,9 +134,13 @@ module Ruby2D
end
end
- def controller_callback(is_axis, axis, val, is_btn, btn)
-
- # puts "is_axis: #{is_axis}, axis: #{axis}, val: #{val}, is_btn: #{is_btn}, btn: #{btn}"
+ def on_controller(&proc)
+ @on_controller_proc = proc
+ true
+ end
+
+ def controller_callback(which, is_axis, axis, val, is_btn, btn)
+ @on_controller_proc.call(which, is_axis, axis, val, is_btn, btn)
if is_axis
if axis == 0 && val == -32768