From 685f8b63b3c5553a1561890d3bf86952618d8002 Mon Sep 17 00:00:00 2001 From: Jonas Kulla Date: Tue, 9 Dec 2014 04:21:48 +0100 Subject: [PATCH] Input: Integer button codes are still allowed in RGSS3 --- binding-mri/input-binding.cpp | 17 +++++++++++------ binding-mruby/input-binding.cpp | 18 ++++++++++++------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/binding-mri/input-binding.cpp b/binding-mri/input-binding.cpp index 0fc0ef2..f20b06a 100644 --- a/binding-mri/input-binding.cpp +++ b/binding-mri/input-binding.cpp @@ -38,17 +38,22 @@ static int getButtonArg(int argc, VALUE *argv) { int num; - if (rgssVer >= 3) - { - ID sym; - rb_get_args(argc, argv, "n", &sym RB_ARG_END); + rb_check_argc(argc, 1); + if (FIXNUM_P(argv[0])) + { + num = FIX2INT(argv[0]); + } + else if (SYMBOL_P(argv[0]) && rgssVer >= 3) + { VALUE symHash = getRbData()->buttoncodeHash; - num = FIX2INT(rb_hash_lookup2(symHash, ID2SYM(sym), INT2FIX(Input::None))); + num = FIX2INT(rb_hash_lookup2(symHash, argv[0], INT2FIX(Input::None))); } else { - rb_get_args(argc, argv, "i", &num RB_ARG_END); + // FIXME: RMXP allows only few more types that + // don't make sense (symbols in pre 3, floats) + num = 0; } return num; diff --git a/binding-mruby/input-binding.cpp b/binding-mruby/input-binding.cpp index 7791dec..921ca7f 100644 --- a/binding-mruby/input-binding.cpp +++ b/binding-mruby/input-binding.cpp @@ -40,20 +40,26 @@ MRB_FUNCTION(inputUpdate) static mrb_int getButtonArg(mrb_state *mrb) { mrb_int num; + mrb_value arg; - if (rgssVer >= 3) + mrb_get_args(mrb, "o", &arg); + + if (mrb_fixnum_p(arg)) + { + num = mrb_fixnum(arg); + } + else if (mrb_symbol_p(arg) && rgssVer >= 3) { - mrb_sym sym; - mrb_get_args(mrb, "n", &sym); - mrb_value symHash = getMrbData(mrb)->buttoncodeHash; - mrb_value numVal = mrb_hash_fetch(mrb, symHash, mrb_symbol_value(sym), + mrb_value numVal = mrb_hash_fetch(mrb, symHash, arg, mrb_fixnum_value(Input::None)); num = mrb_fixnum(numVal); } else { - mrb_get_args(mrb, "i", &num); + // FIXME: RMXP allows only few more types that + // don't make sense (symbols in pre 3, floats) + num = 0; } return num;