begin coding functionality for remapping keys
This commit is contained in:
277
fcore/core-key.sml
Normal file
277
fcore/core-key.sml
Normal file
@@ -0,0 +1,277 @@
|
||||
signature CORE_KEY =
|
||||
sig
|
||||
(* enumeration of keys, following GLFW names
|
||||
* taken from https://www.glfw.org/docs/latest/group__keys.html
|
||||
* note that there is no dependency on GLFW here: it is just a plain datatype.
|
||||
* *)
|
||||
datatype key_code =
|
||||
KEY_SPACE
|
||||
| KEY_APOSTROPHE
|
||||
| KEY_COMMA
|
||||
| KEY_MINUS
|
||||
| KEY_PERIOD
|
||||
| KEY_SLASH
|
||||
| KEY_0
|
||||
| KEY_1
|
||||
| KEY_2
|
||||
| KEY_3
|
||||
| KEY_4
|
||||
| KEY_5
|
||||
| KEY_6
|
||||
| KEY_7
|
||||
| KEY_8
|
||||
| KEY_9
|
||||
| KEY_SEMICOLON
|
||||
| KEY_EQUAL
|
||||
| KEY_A
|
||||
| KEY_B
|
||||
| KEY_C
|
||||
| KEY_D
|
||||
| KEY_E
|
||||
| KEY_F
|
||||
| KEY_G
|
||||
| KEY_H
|
||||
| KEY_I
|
||||
| KEY_J
|
||||
| KEY_K
|
||||
| KEY_L
|
||||
| KEY_M
|
||||
| KEY_N
|
||||
| KEY_O
|
||||
| KEY_P
|
||||
| KEY_Q
|
||||
| KEY_R
|
||||
| KEY_S
|
||||
| KEY_T
|
||||
| KEY_U
|
||||
| KEY_V
|
||||
| KEY_W
|
||||
| KEY_X
|
||||
| KEY_Y
|
||||
| KEY_Z
|
||||
| KEY_LEFT_BRACKET
|
||||
| KEY_BACKSLASH
|
||||
| KEY_RIGHT_BRACKET
|
||||
| KEY_GRAVE_ACCENT
|
||||
| KEY_WORLD_1
|
||||
| KEY_WORLD_2
|
||||
| KEY_ESCAPE
|
||||
| KEY_ENTER
|
||||
| KEY_TAB
|
||||
| KEY_BACKSPACE
|
||||
| KEY_INSERT
|
||||
| KEY_DELETE
|
||||
| KEY_LEFT
|
||||
| KEY_RIGHT
|
||||
| KEY_DOWN
|
||||
| KEY_UP
|
||||
| KEY_PAGE_UP
|
||||
| KEY_PAGE_DOWN
|
||||
| KEY_HOME
|
||||
| KEY_END
|
||||
| KEY_CAPS_LOCK
|
||||
| KEY_SCROLL_LOCK
|
||||
| KEY_NUM_LOCK
|
||||
| KEY_PRINT_SCREEN
|
||||
| KEY_PAUSE
|
||||
| KEY_F1
|
||||
| KEY_F2
|
||||
| KEY_F3
|
||||
| KEY_F4
|
||||
| KEY_F5
|
||||
| KEY_F6
|
||||
| KEY_F7
|
||||
| KEY_F8
|
||||
| KEY_F9
|
||||
| KEY_F10
|
||||
| KEY_F11
|
||||
| KEY_F12
|
||||
| KEY_F13
|
||||
| KEY_F14
|
||||
| KEY_F15
|
||||
| KEY_F16
|
||||
| KEY_F17
|
||||
| KEY_F18
|
||||
| KEY_F19
|
||||
| KEY_F20
|
||||
| KEY_F21
|
||||
| KEY_F22
|
||||
| KEY_F23
|
||||
| KEY_F24
|
||||
| KEY_F25
|
||||
| KEY_KP_0
|
||||
| KEY_KP_1
|
||||
| KEY_KP_2
|
||||
| KEY_KP_3
|
||||
| KEY_KP_4
|
||||
| KEY_KP_5
|
||||
| KEY_KP_6
|
||||
| KEY_KP_7
|
||||
| KEY_KP_8
|
||||
| KEY_KP_9
|
||||
| KEY_KP_DECIMAL
|
||||
| KEY_KP_DIVIDE
|
||||
| KEY_KP_MULTIPLY
|
||||
| KEY_KP_SUBTRACT
|
||||
| KEY_KP_ADD
|
||||
| KEY_KP_ENTER
|
||||
| KEY_KP_EQUAL
|
||||
| KEY_LEFT_SHIFT
|
||||
| KEY_LEFT_CONTROL
|
||||
| KEY_LEFT_ALT
|
||||
| KEY_LEFT_SUPER
|
||||
| KEY_RIGHT_SHIFT
|
||||
| KEY_RIGHT_CONTROL
|
||||
| KEY_RIGHT_ALT
|
||||
| KEY_RIGHT_SUPER
|
||||
| KEY_MENU
|
||||
|
||||
(* user's chosen key mappings *)
|
||||
type user_key =
|
||||
{ left: key_code
|
||||
, right: key_code
|
||||
, up: key_code
|
||||
, down: key_code
|
||||
, jump: key_code
|
||||
, attack: key_code
|
||||
}
|
||||
end
|
||||
|
||||
structure CoreKey :> CORE_KEY =
|
||||
struct
|
||||
(* enumeration of keys, following GLFW names
|
||||
* taken from https://www.glfw.org/docs/latest/group__keys.html
|
||||
* note that there is no dependency on GLFW here: it is just a plain datatype.
|
||||
* *)
|
||||
datatype key_code =
|
||||
KEY_SPACE
|
||||
| KEY_APOSTROPHE
|
||||
| KEY_COMMA
|
||||
| KEY_MINUS
|
||||
| KEY_PERIOD
|
||||
| KEY_SLASH
|
||||
| KEY_0
|
||||
| KEY_1
|
||||
| KEY_2
|
||||
| KEY_3
|
||||
| KEY_4
|
||||
| KEY_5
|
||||
| KEY_6
|
||||
| KEY_7
|
||||
| KEY_8
|
||||
| KEY_9
|
||||
| KEY_SEMICOLON
|
||||
| KEY_EQUAL
|
||||
| KEY_A
|
||||
| KEY_B
|
||||
| KEY_C
|
||||
| KEY_D
|
||||
| KEY_E
|
||||
| KEY_F
|
||||
| KEY_G
|
||||
| KEY_H
|
||||
| KEY_I
|
||||
| KEY_J
|
||||
| KEY_K
|
||||
| KEY_L
|
||||
| KEY_M
|
||||
| KEY_N
|
||||
| KEY_O
|
||||
| KEY_P
|
||||
| KEY_Q
|
||||
| KEY_R
|
||||
| KEY_S
|
||||
| KEY_T
|
||||
| KEY_U
|
||||
| KEY_V
|
||||
| KEY_W
|
||||
| KEY_X
|
||||
| KEY_Y
|
||||
| KEY_Z
|
||||
| KEY_LEFT_BRACKET
|
||||
| KEY_BACKSLASH
|
||||
| KEY_RIGHT_BRACKET
|
||||
| KEY_GRAVE_ACCENT
|
||||
| KEY_WORLD_1
|
||||
| KEY_WORLD_2
|
||||
| KEY_ESCAPE
|
||||
| KEY_ENTER
|
||||
| KEY_TAB
|
||||
| KEY_BACKSPACE
|
||||
| KEY_INSERT
|
||||
| KEY_DELETE
|
||||
| KEY_LEFT
|
||||
| KEY_RIGHT
|
||||
| KEY_DOWN
|
||||
| KEY_UP
|
||||
| KEY_PAGE_UP
|
||||
| KEY_PAGE_DOWN
|
||||
| KEY_HOME
|
||||
| KEY_END
|
||||
| KEY_CAPS_LOCK
|
||||
| KEY_SCROLL_LOCK
|
||||
| KEY_NUM_LOCK
|
||||
| KEY_PRINT_SCREEN
|
||||
| KEY_PAUSE
|
||||
| KEY_F1
|
||||
| KEY_F2
|
||||
| KEY_F3
|
||||
| KEY_F4
|
||||
| KEY_F5
|
||||
| KEY_F6
|
||||
| KEY_F7
|
||||
| KEY_F8
|
||||
| KEY_F9
|
||||
| KEY_F10
|
||||
| KEY_F11
|
||||
| KEY_F12
|
||||
| KEY_F13
|
||||
| KEY_F14
|
||||
| KEY_F15
|
||||
| KEY_F16
|
||||
| KEY_F17
|
||||
| KEY_F18
|
||||
| KEY_F19
|
||||
| KEY_F20
|
||||
| KEY_F21
|
||||
| KEY_F22
|
||||
| KEY_F23
|
||||
| KEY_F24
|
||||
| KEY_F25
|
||||
| KEY_KP_0
|
||||
| KEY_KP_1
|
||||
| KEY_KP_2
|
||||
| KEY_KP_3
|
||||
| KEY_KP_4
|
||||
| KEY_KP_5
|
||||
| KEY_KP_6
|
||||
| KEY_KP_7
|
||||
| KEY_KP_8
|
||||
| KEY_KP_9
|
||||
| KEY_KP_DECIMAL
|
||||
| KEY_KP_DIVIDE
|
||||
| KEY_KP_MULTIPLY
|
||||
| KEY_KP_SUBTRACT
|
||||
| KEY_KP_ADD
|
||||
| KEY_KP_ENTER
|
||||
| KEY_KP_EQUAL
|
||||
| KEY_LEFT_SHIFT
|
||||
| KEY_LEFT_CONTROL
|
||||
| KEY_LEFT_ALT
|
||||
| KEY_LEFT_SUPER
|
||||
| KEY_RIGHT_SHIFT
|
||||
| KEY_RIGHT_CONTROL
|
||||
| KEY_RIGHT_ALT
|
||||
| KEY_RIGHT_SUPER
|
||||
| KEY_MENU
|
||||
|
||||
(* user's chosen key mappings *)
|
||||
type user_key =
|
||||
{ left: key_code
|
||||
, right: key_code
|
||||
, up: key_code
|
||||
, down: key_code
|
||||
, jump: key_code
|
||||
, attack: key_code
|
||||
}
|
||||
end
|
||||
@@ -9,6 +9,7 @@ sig
|
||||
, enemies: EnemyMap.t
|
||||
, graph: PlatSet.elem vector vector
|
||||
, fallingEnemies: FallingEnemyMap.t
|
||||
, userKeys: CoreKey.user_key
|
||||
}
|
||||
|
||||
val initial: game_type
|
||||
@@ -25,6 +26,7 @@ struct
|
||||
, enemies: EnemyMap.t
|
||||
, graph: PlatSet.elem vector vector
|
||||
, fallingEnemies: FallingEnemyMap.t
|
||||
, userKeys: CoreKey.user_key
|
||||
}
|
||||
|
||||
fun enemyMapFromList (hd :: tl, map) =
|
||||
@@ -53,6 +55,16 @@ struct
|
||||
, platID = ~1
|
||||
}
|
||||
|
||||
(* todo: replace initialKeys with keys parsed from file *)
|
||||
val initialKeys =
|
||||
{ left = CoreKey.KEY_S
|
||||
, right = CoreKey.KEY_L
|
||||
, up = CoreKey.KEY_E
|
||||
, down = CoreKey.KEY_D
|
||||
, jump = CoreKey.KEY_K
|
||||
, attack = CoreKey.KEY_J
|
||||
}
|
||||
|
||||
val wall1 = {id = 1, x = 0, y = 0, width = 100, height = 1080}
|
||||
val wall2 = {id = 2, x = 1820, y = 0, width = 100, height = 1080}
|
||||
val wall3 = {id = 3, x = 0, y = 980, width = 1920, height = 108}
|
||||
@@ -140,6 +152,7 @@ struct
|
||||
, enemies = enemies
|
||||
, graph = graph
|
||||
, fallingEnemies = FallingEnemyMap.empty
|
||||
, userKeys = initialKeys
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,6 +11,7 @@ struct
|
||||
, enemies
|
||||
, graph
|
||||
, fallingEnemies
|
||||
, userKeys
|
||||
} = game
|
||||
|
||||
val player = Player.runPhysicsAndInput (game, input)
|
||||
@@ -39,6 +40,7 @@ struct
|
||||
, enemies = enemies
|
||||
, graph = graph
|
||||
, fallingEnemies = fallingEnemies
|
||||
, userKeys = userKeys
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -142,7 +142,6 @@ struct
|
||||
, defeteadEnemies
|
||||
, projectiles
|
||||
, attackHeld
|
||||
, chargeHeld
|
||||
, charge
|
||||
, player
|
||||
, acc
|
||||
@@ -206,8 +205,7 @@ struct
|
||||
, ...
|
||||
} = player
|
||||
|
||||
val {leftHeld, rightHeld, upHeld, downHeld, attackHeld, chargeHeld} =
|
||||
input
|
||||
val {leftHeld, rightHeld, upHeld, downHeld, attackHeld} = input
|
||||
|
||||
val xAxis = getXAxis (leftHeld, rightHeld)
|
||||
val facing = getFacing (facing, xAxis)
|
||||
@@ -221,7 +219,6 @@ struct
|
||||
, enemies
|
||||
, projectiles
|
||||
, attackHeld
|
||||
, chargeHeld
|
||||
, charge
|
||||
, player
|
||||
, acc
|
||||
|
||||
1
oms.mlb
1
oms.mlb
@@ -34,6 +34,7 @@ fcore/enemy/enemy-map.sml
|
||||
fcore/enemy/falling-enemy-pair.sml
|
||||
fcore/enemy/falling-enemy-map.sml
|
||||
|
||||
fcore/core-key.sml
|
||||
fcore/player/player-type.sml
|
||||
fcore/game-type.sml
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ struct
|
||||
, upHeld = ref false
|
||||
, downHeld = ref false
|
||||
, attackHeld = ref false
|
||||
, chargeHeld = ref false
|
||||
, width = ref (1920.0 : Real32.real)
|
||||
, height = ref (1080.0 : Real32.real)
|
||||
}
|
||||
@@ -18,7 +17,6 @@ struct
|
||||
, upHeld = !(#upHeld state)
|
||||
, downHeld = !(#downHeld state)
|
||||
, attackHeld = !(#attackHeld state)
|
||||
, chargeHeld = !(#chargeHeld state)
|
||||
}
|
||||
|
||||
fun getWidth () =
|
||||
@@ -53,10 +51,6 @@ struct
|
||||
if action = PRESS then (#attackHeld state) := true
|
||||
else if action = RELEASE then (#attackHeld state) := false
|
||||
else ()
|
||||
else if key = KEY_L then
|
||||
if action = PRESS then (#chargeHeld state) := true
|
||||
else if action = RELEASE then (#chargeHeld state) := false
|
||||
else ()
|
||||
else
|
||||
()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user