# JspadStick

ゲームパッドのキー入力をstick命令に寄せて取得

JspadStick p1,p2,p3

p1=変数 : 読み込むための変数
p2=0〜(0) : 非トリガータイプキー指定
p3=0〜3(0) : 移動キーオプション

(プラグイン / モジュール : mod_dish-js-gamepad)

## 解説

    # HSP3Dish.jsでのみ動作します。

    ゲームパッドの複数のボタン状況を１つの数値として、p1で指定した変数に代入します。

    ゲームパッドのボタン情報をstick命令と互換性を持たせるように割り当て直しています。
    JspadGetButtons()とは取得した際のボタン入力数値が異なるので注意してください。

値(10進) | 値(16進) | PC(stick命令) | ゲームパッド
--- | --- | --- | ---
1 | $00001 | カーソルキー左(←) | LEFTボタン
2 | $00002 | カーソルキー上(↑) | UPボタン
4 | $00004 | カーソルキー右(→) | RIGHTボタン
8 | $00008 | カーソルキー下(↓) | DOWNボタン
16 | $00010 | スペースキー | 東ボタン: A(N)、○(DS4)、B(MS)
32 | $00020 | Enterキー | PLUSボタン(OPTIONS,MENU)
64 | $00040 | Ctrlキー | 南ボタン: B(N)、×(DS4)、A(MS)
128 | $00080 | ESCキー | MINUSボタン(SHARE,VIEW)
256 | $00100 | マウスの左ボタン | ZRボタン(R2,RT)
512 | $00200 | マウスの右ボタン | ZLボタン(L2,LT)
1024 | $00400 | TABキー | Lボタン(L1,LB)
2048 | $00800 | [Z]キー | 西ボタン: Y(N)、□(DS4)、X(MS)
4096 | $01000 | [X]キー | 北ボタン: X(N)、△(DS4)、Y(MS)
8192 | $02000 | [C]キー | Rボタン
16384 | $04000 | [A]キー | Lスティック-左倒し
32768 | $08000 | [W]キー | Lスティック-上倒し
65536 | $10000 | [D]キー | Lスティック-右倒し
131072 | $20000 | [S]キー | Lスティック-下倒し
16777216 | $01000000 | --- | Lスティック押し込み
33554432 | $02000000 | --- | Rスティック押し込み
67108864 | $04000000 | --- | HOMEボタン(PS)

    (Nintendo Switch系のコントローラを念頭にテキトーにキー割り当てをしていますが、モジュール内の命令をカスタマイズして使って頂ければと思います。)

    何もボタンが押されていない場合には0が代入されます。
    もし複数のボタンが同時に押されていた場合には、それらの数値がすべて加算されます。

    Lスティックによる移動はスティックを50%以上倒したときに初めて検出されるので注意してください。
    倒し始めてすぐ検出したい場合は JspadGetLeftX, JspadGetLeftY を使用してください。

    stick命令と同じようにボタンが押された瞬間だけを検出します。つまり、ボタンが押された時に１度だけ押されている情報を返し、あとは押されているボタンをはなすまでは、押されていることになりません。

    ただし、p2の非トリガータイプキー指定により、押しっぱなしであっても情報を検出することができるようになります。

    p2に押しっぱなしでも検出されるキーのコード(上の表にあるコードです。 複数の場合はそれぞれの数値を加えます)を指定すると、 そのキーだけはボタンが押されている間ずっと検出されるようになります。

    また、stick命令と互換性があるのでstick命令でキー情報を取得した変数に、JspadStickで取得した変数情報を重ね合わせるとキーボードとゲームパッド両方に対応した条件分岐を行うことができます。

    例 :
    	stick a, 0           ; 変数aにキー状態を読み出し
    	JspadStick b, 0      ; 変数bにゲームパッド状態を読み出し
    	a |= b               ; ゲームパッドのボタン状態をstickのキー状態に被せ合わせる
    	if a&16 : goto *spc  ; スペースまたは南ボタン[B(N)、×(DS4)、A(MS)]が押されたか?
    	if a&32 : goto *ent  ; EnterまたはPLUSボタン(OPTIONS,MENU)が押されたか?

    p3オプションを使うとゲームパッドの上下左右ボタンまたはLスティックによる移動を、stick命令の上下左右キーとWASDキーのどちらに対応させるかを変更することができます。

ゲームパッド | p3オプション | 上下左右ボタン | Lスティック
--- | --- | --- | ---
stick命令 | 0 | 上下左右キー | WASDキー
| 1 | WASDキー | 上下左右キー
| 2 | 上下左右キー | 上下左右キー
| 3 | WASDキー | WASDキー

## サンプル

    #include "hsp3dish.as"

    #include "mod_dish-js-gamepad.hsp"

    x=ginfo_sx/2 : y=ginfo_sy/2
    *main
    	redraw 0
    	color 255,255,255:boxf:color:pos 0,0

    	stick stk, $3C00F         ; 上下左右,WASDキーを非トリガー設定
    	JspadStick jspstk, $3C00F ; 上下左右ボタン,Lスティック移動を非トリガー設定
    	stk |= jspstk             ; ゲームパッドのボタン状態をstickのキー状態に被せ合わせる

    	if stk&$00080 : end  ; stick:Esc または pad:MINUSボタン(SHARE,VIEW)で終了
    	if (stk&$1)!0 || (stk&$04000)!0 : x -= 5  ; stick:左,Aキー または pad:左,Lスティック左
    	if (stk&$2)!0 || (stk&$08000)!0 : y -= 5  ; stick:上,Wキー または pad:上,Lスティック上
    	if (stk&$4)!0 || (stk&$10000)!0 : x += 5  ; stick:右,Dキー または pad:右,Lスティック右
    	if (stk&$8)!0 || (stk&$20000)!0 : y += 5  ; stick:下,Sキー または pad:下,Lスティック下

    	mes "JspadGetID=" + JspadGetID()
    	mes "JspadGetButtons=" + JspadGetButtons()
    	mes "JspadGetLeft=" + strf("(%f,%f)",JspadGetLeftX(),JspadGetLeftY())
    	pos x,y : mes "●"
    	redraw 1
    	await (1000 / 60)
    goto *main

## 関連項目

JspadEnable | ゲームパッドが使用できる状態か取得 | (mod_dish-js-gamepad)
JspadGetID | 接続しているゲームパッドのID文字列を取得 | (mod_dish-js-gamepad)
JspadButtonsNum | 接続されているゲームパッドのボタン数を取得 | (mod_dish-js-gamepad)
JspadAxesNum | 接続されているゲームパッドのアナログスティック入力数を取得 | (mod_dish-js-gamepad)
JspadGetButtons | ゲームパッドのボタン入力状態を取得 | (mod_dish-js-gamepad)
JspadGetLeftTrigger | ゲームパッドのLトリガー(L2)アナログ入力情報を取得 | (mod_dish-js-gamepad)
JspadGetRightTrigger | ゲームパッドのRトリガー(R2)アナログ入力情報を取得 | (mod_dish-js-gamepad)
JspadGetLeftX | ゲームパッドのLスティックX方向のアナログ入力情報を取得 | (mod_dish-js-gamepad)
JspadGetLeftY | ゲームパッドのLスティックY方向のアナログ入力情報を取得 | (mod_dish-js-gamepad)
JspadGetRightX | ゲームパッドのRスティックX方向のアナログ入力情報を取得 | (mod_dish-js-gamepad)
JspadGetRightY | ゲームパッドのRスティックY方向のアナログ入力情報を取得 | (mod_dish-js-gamepad)
JspadSetBAYX | ゲームパッドの A⇔B, X⇔Y ボタンの入れ替え設定 | (mod_dish-js-gamepad)

## サンプル逆引き (1)

sample05_gamepad.hsp | #include "hsp3dish.as" #include "ezlocal-dish-js.hsp" e..

## 情報

プラグイン / モジュール | mod_dish-js-gamepad
バージョン | 1.1
作成日 | 2025/1/3
著作者 | MIZUSHIKI
URL | https://suwa.pupu.jp/HSP/index.html
備考 | HSP3Dish.jsでゲームパッドを使用できるようになります。[Gamepad API利用]
タイプ | 拡張命令
グループ | 拡張入出力制御命令
対応環境 | ・Windows 版 HSP