From fa8ceec20f04fcdfe14189aa415ad1b5f8c32728 Mon Sep 17 00:00:00 2001 From: Tom Black Date: Sun, 9 Oct 2016 16:27:13 -0400 Subject: Add `on_controller` input block Also add `which` to the controller callback --- ext/ruby2d/ruby2d.c | 3 ++- lib/ruby2d/application.rb | 4 ++++ lib/ruby2d/dsl.rb | 4 ++++ lib/ruby2d/window.rb | 11 ++++++++--- 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 -- cgit v1.2.3