薙刀式UWSC版の課題

前回の記事で分かった課題は大きく分けて2つです。
1.(おそらく)条件分岐が多岐にわたると、処理が重くなり安定して動作しない
2.複数同時押しと並行して単打を実装するのが難しい

1に関してはコードを複数のファイルへ分割し呼び出す方法である程度解決しそうです。2はこれからです。

追記

IMEオンで同時押しを、IMEオフで単打を出力してはどうかと考えました。AutoHotkeyのホットストリングで実装するとこんな感じです。

#include ime.ahk
#If !IME_GET()
:*?:r::し
:*?:j::あ
:*?:i::る

Space & r::
clipboard = め
Send, ^v
Return
Space & j::
clipboard = の
Send, ^v
Return
~f & g::
~g & f::
Send,!{F1}
IME_SET(1)
Return
#If IME_GET()
~h & j::
~j & h::
Send,!{F2}
IME_SET(0)
Return

メイン側

CALL JYO.uws
CALL JYU.uws
CALL JYA.uws
PUBLIC MAIN_FL=1
PUBLIC RJ_FL=0
WHILE 1
IF GETKEYSTATE(VK_R) and (GETKEYSTATE(VK_I) or GETKEYSTATE(VK_P) or GETKEYSTATE(VK_H)) then
  sleep(0.125)
  thread JYO.JYO_MAIN
  MAIN_FL=0
ELSEIF (GETKEYSTATE(VK_R) and GETKEYSTATE(VK_J)) and !(GETKEYSTATE(VK_I) or GETKEYSTATE(VK_P) or GETKEYSTATE(VK_H)) then
  SENDSTR(GETID(GET_ACTIVE_WIN),"じ")
  RJ_FL=1
  sleep(0.125)
ENDIF

IF GETKEYSTATE(VK_R) and GETKEYSTATE(VK_J) and GETKEYSTATE(VK_I) then
 IF RJ_FL>0
  SENDSTR(GETID(GET_ACTIVE_WIN),"ょ")
  RJ_FL=0
  sleep(0.125)
 ELSEIF MAIN_FL>0
  SENDSTR(GETID(GET_ACTIVE_WIN),"じょ")
  MAIN_FL=0
 ENDIF
ENDIF
WEND

サブ側

CLASS JYO
PROCEDURE JYO_MAIN
PUBLIC RJI_FL=0
PUBLIC RJP_FL=0
PUBLIC RJH_FL=0
PUBLIC RJ_FL=0
PUBLIC RI_FL=0
PUBLIC RP_FL=0
PUBLIC RH_FL=0
PUBLIC TN_FL=0

WHILE GETKEYSTATE(VK_R)
 TN_FL=1
 IF GETKEYSTATE(VK_I) AND GETKEYSTATE(VK_J)
  RJI_FL=1
  RI_FL=0
  sleep(0.125)
  EXIT
 ELSEIF GETKEYSTATE(VK_I)
  RI_FL=1
  sleep(0.25)
 ENDIF
WEND

IF RI_FL>0 then
 SENDSTR(GETID(GET_ACTIVE_WIN),"しょ")
 RI_FL=0
ELSEIF RJI_FL>0 then
 SENDSTR(GETID(GET_ACTIVE_WIN),"じょ")
 RJI_FL=0
ENDIF
FEND
ENDCLASS