diff --git a/fcore/core-key.sml b/fcore/core-key.sml index d20ab95..bec6cfe 100644 --- a/fcore/core-key.sml +++ b/fcore/core-key.sml @@ -135,6 +135,8 @@ sig , jump: key_code , attack: key_code } + + val keyFromString: string -> key_code option end structure CoreKey :> CORE_KEY = @@ -274,4 +276,128 @@ struct , jump: key_code , attack: key_code } + + fun keyFromString str = + case str of + "KEY_SPACE" => SOME KEY_SPACE + | "KEY_APOSTROPHE" => SOME KEY_APOSTROPHE + | "KEY_COMMA" => SOME KEY_COMMA + | "KEY_MINUS" => SOME KEY_MINUS + | "KEY_PERIOD" => SOME KEY_PERIOD + | "KEY_SLASH" => SOME KEY_SLASH + | "KEY_0" => SOME KEY_0 + | "KEY_1" => SOME KEY_1 + | "KEY_2" => SOME KEY_2 + | "KEY_3" => SOME KEY_3 + | "KEY_4" => SOME KEY_4 + | "KEY_5" => SOME KEY_5 + | "KEY_6" => SOME KEY_6 + | "KEY_7" => SOME KEY_7 + | "KEY_8" => SOME KEY_8 + | "KEY_9" => SOME KEY_9 + | "KEY_SEMICOLON" => SOME KEY_SEMICOLON + | "KEY_EQUAL" => SOME KEY_EQUAL + | "KEY_A" => SOME KEY_A + | "KEY_B" => SOME KEY_B + | "KEY_C" => SOME KEY_C + | "KEY_D" => SOME KEY_D + | "KEY_E" => SOME KEY_E + | "KEY_F" => SOME KEY_F + | "KEY_G" => SOME KEY_G + | "KEY_H" => SOME KEY_H + | "KEY_I" => SOME KEY_I + | "KEY_J" => SOME KEY_J + | "KEY_K" => SOME KEY_K + | "KEY_L" => SOME KEY_L + | "KEY_M" => SOME KEY_M + | "KEY_N" => SOME KEY_N + | "KEY_O" => SOME KEY_O + | "KEY_P" => SOME KEY_P + | "KEY_Q" => SOME KEY_Q + | "KEY_R" => SOME KEY_R + | "KEY_S" => SOME KEY_S + | "KEY_T" => SOME KEY_T + | "KEY_U" => SOME KEY_U + | "KEY_V" => SOME KEY_V + | "KEY_W" => SOME KEY_W + | "KEY_X" => SOME KEY_X + | "KEY_Y" => SOME KEY_Y + | "KEY_Z" => SOME KEY_Z + | "KEY_LEFT_BRACKET" => SOME KEY_LEFT_BRACKET + | "KEY_BACKSLASH" => SOME KEY_BACKSLASH + | "KEY_RIGHT_BRACKET" => SOME KEY_RIGHT_BRACKET + | "KEY_GRAVE_ACCENT" => SOME KEY_GRAVE_ACCENT + | "KEY_WORLD_1" => SOME KEY_WORLD_1 + | "KEY_WORLD_2" => SOME KEY_WORLD_2 + | "KEY_ESCAPE" => SOME KEY_ESCAPE + | "KEY_ENTER" => SOME KEY_ENTER + | "KEY_TAB" => SOME KEY_TAB + | "KEY_BACKSPACE" => SOME KEY_BACKSPACE + | "KEY_INSERT" => SOME KEY_INSERT + | "KEY_DELETE" => SOME KEY_DELETE + | "KEY_LEFT" => SOME KEY_LEFT + | "KEY_RIGHT" => SOME KEY_RIGHT + | "KEY_DOWN" => SOME KEY_DOWN + | "KEY_UP" => SOME KEY_UP + | "KEY_PAGE_UP" => SOME KEY_PAGE_UP + | "KEY_PAGE_DOWN" => SOME KEY_PAGE_DOWN + | "KEY_HOME" => SOME KEY_HOME + | "KEY_END" => SOME KEY_END + | "KEY_CAPS_LOCK" => SOME KEY_CAPS_LOCK + | "KEY_SCROLL_LOCK" => SOME KEY_SCROLL_LOCK + | "KEY_NUM_LOCK" => SOME KEY_NUM_LOCK + | "KEY_PRINT_SCREEN" => SOME KEY_PRINT_SCREEN + | "KEY_PAUSE" => SOME KEY_PAUSE + | "KEY_F1" => SOME KEY_F1 + | "KEY_F2" => SOME KEY_F2 + | "KEY_F3" => SOME KEY_F3 + | "KEY_F4" => SOME KEY_F4 + | "KEY_F5" => SOME KEY_F5 + | "KEY_F6" => SOME KEY_F6 + | "KEY_F7" => SOME KEY_F7 + | "KEY_F8" => SOME KEY_F8 + | "KEY_F9" => SOME KEY_F9 + | "KEY_F10" => SOME KEY_F10 + | "KEY_F11" => SOME KEY_F11 + | "KEY_F12" => SOME KEY_F12 + | "KEY_F13" => SOME KEY_F13 + | "KEY_F14" => SOME KEY_F14 + | "KEY_F15" => SOME KEY_F15 + | "KEY_F16" => SOME KEY_F16 + | "KEY_F17" => SOME KEY_F17 + | "KEY_F18" => SOME KEY_F18 + | "KEY_F19" => SOME KEY_F19 + | "KEY_F20" => SOME KEY_F20 + | "KEY_F21" => SOME KEY_F21 + | "KEY_F22" => SOME KEY_F22 + | "KEY_F23" => SOME KEY_F23 + | "KEY_F24" => SOME KEY_F24 + | "KEY_F25" => SOME KEY_F25 + | "KEY_KP_0" => SOME KEY_KP_0 + | "KEY_KP_1" => SOME KEY_KP_1 + | "KEY_KP_2" => SOME KEY_KP_2 + | "KEY_KP_3" => SOME KEY_KP_3 + | "KEY_KP_4" => SOME KEY_KP_4 + | "KEY_KP_5" => SOME KEY_KP_5 + | "KEY_KP_6" => SOME KEY_KP_6 + | "KEY_KP_7" => SOME KEY_KP_7 + | "KEY_KP_8" => SOME KEY_KP_8 + | "KEY_KP_9" => SOME KEY_KP_9 + | "KEY_KP_DECIMAL" => SOME KEY_KP_DECIMAL + | "KEY_KP_DIVIDE" => SOME KEY_KP_DIVIDE + | "KEY_KP_MULTIPLY" => SOME KEY_KP_MULTIPLY + | "KEY_KP_SUBTRACT" => SOME KEY_KP_SUBTRACT + | "KEY_KP_ADD" => SOME KEY_KP_ADD + | "KEY_KP_ENTER" => SOME KEY_KP_ENTER + | "KEY_KP_EQUAL" => SOME KEY_KP_EQUAL + | "KEY_LEFT_SHIFT" => SOME KEY_LEFT_SHIFT + | "KEY_LEFT_CONTROL" => SOME KEY_LEFT_CONTROL + | "KEY_LEFT_ALT" => SOME KEY_LEFT_ALT + | "KEY_LEFT_SUPER" => SOME KEY_LEFT_SUPER + | "KEY_RIGHT_SHIFT" => SOME KEY_RIGHT_SHIFT + | "KEY_RIGHT_CONTROL" => SOME KEY_RIGHT_CONTROL + | "KEY_RIGHT_ALT" => SOME KEY_RIGHT_ALT + | "KEY_RIGHT_SUPER" => SOME KEY_RIGHT_SUPER + | "KEY_MENU" => SOME KEY_MENU + | _ => NONE end diff --git a/oms.mlb b/oms.mlb index 810912c..6852636 100644 --- a/oms.mlb +++ b/oms.mlb @@ -72,4 +72,5 @@ end shell/input-state.sml shell/gl-shaders.sml shell/gl-draw.sml +shell/parse-controls.sml shell/shell.sml diff --git a/shell/input-state.sml b/shell/input-state.sml index 8cff41f..5607e65 100644 --- a/shell/input-state.sml +++ b/shell/input-state.sml @@ -30,7 +30,9 @@ struct , jumpHeld = !(#jumpHeld state) } - fun actionToBool action = action = Input.PRESS + (* there are three action states reported by OS: PRESS, REPEAT and RELEASE. + * If input is PRESS or REPEAT, then return true, or else return false. *) + fun actionToBool action = action <> Input.RELEASE fun handleKey (key, action) = case GlfwKeyMap.codeFromKey key of diff --git a/shell/parse-controls.sml b/shell/parse-controls.sml new file mode 100644 index 0000000..3e5beda --- /dev/null +++ b/shell/parse-controls.sml @@ -0,0 +1 @@ +structure ParseControls = struct end