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
|
, enemies: EnemyMap.t
|
||||||
, graph: PlatSet.elem vector vector
|
, graph: PlatSet.elem vector vector
|
||||||
, fallingEnemies: FallingEnemyMap.t
|
, fallingEnemies: FallingEnemyMap.t
|
||||||
|
, userKeys: CoreKey.user_key
|
||||||
}
|
}
|
||||||
|
|
||||||
val initial: game_type
|
val initial: game_type
|
||||||
@@ -25,6 +26,7 @@ struct
|
|||||||
, enemies: EnemyMap.t
|
, enemies: EnemyMap.t
|
||||||
, graph: PlatSet.elem vector vector
|
, graph: PlatSet.elem vector vector
|
||||||
, fallingEnemies: FallingEnemyMap.t
|
, fallingEnemies: FallingEnemyMap.t
|
||||||
|
, userKeys: CoreKey.user_key
|
||||||
}
|
}
|
||||||
|
|
||||||
fun enemyMapFromList (hd :: tl, map) =
|
fun enemyMapFromList (hd :: tl, map) =
|
||||||
@@ -53,6 +55,16 @@ struct
|
|||||||
, platID = ~1
|
, 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 wall1 = {id = 1, x = 0, y = 0, width = 100, height = 1080}
|
||||||
val wall2 = {id = 2, x = 1820, 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}
|
val wall3 = {id = 3, x = 0, y = 980, width = 1920, height = 108}
|
||||||
@@ -140,6 +152,7 @@ struct
|
|||||||
, enemies = enemies
|
, enemies = enemies
|
||||||
, graph = graph
|
, graph = graph
|
||||||
, fallingEnemies = FallingEnemyMap.empty
|
, fallingEnemies = FallingEnemyMap.empty
|
||||||
|
, userKeys = initialKeys
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ struct
|
|||||||
, enemies
|
, enemies
|
||||||
, graph
|
, graph
|
||||||
, fallingEnemies
|
, fallingEnemies
|
||||||
|
, userKeys
|
||||||
} = game
|
} = game
|
||||||
|
|
||||||
val player = Player.runPhysicsAndInput (game, input)
|
val player = Player.runPhysicsAndInput (game, input)
|
||||||
@@ -39,6 +40,7 @@ struct
|
|||||||
, enemies = enemies
|
, enemies = enemies
|
||||||
, graph = graph
|
, graph = graph
|
||||||
, fallingEnemies = fallingEnemies
|
, fallingEnemies = fallingEnemies
|
||||||
|
, userKeys = userKeys
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -142,7 +142,6 @@ struct
|
|||||||
, defeteadEnemies
|
, defeteadEnemies
|
||||||
, projectiles
|
, projectiles
|
||||||
, attackHeld
|
, attackHeld
|
||||||
, chargeHeld
|
|
||||||
, charge
|
, charge
|
||||||
, player
|
, player
|
||||||
, acc
|
, acc
|
||||||
@@ -206,8 +205,7 @@ struct
|
|||||||
, ...
|
, ...
|
||||||
} = player
|
} = player
|
||||||
|
|
||||||
val {leftHeld, rightHeld, upHeld, downHeld, attackHeld, chargeHeld} =
|
val {leftHeld, rightHeld, upHeld, downHeld, attackHeld} = input
|
||||||
input
|
|
||||||
|
|
||||||
val xAxis = getXAxis (leftHeld, rightHeld)
|
val xAxis = getXAxis (leftHeld, rightHeld)
|
||||||
val facing = getFacing (facing, xAxis)
|
val facing = getFacing (facing, xAxis)
|
||||||
@@ -221,7 +219,6 @@ struct
|
|||||||
, enemies
|
, enemies
|
||||||
, projectiles
|
, projectiles
|
||||||
, attackHeld
|
, attackHeld
|
||||||
, chargeHeld
|
|
||||||
, charge
|
, charge
|
||||||
, player
|
, player
|
||||||
, acc
|
, 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-pair.sml
|
||||||
fcore/enemy/falling-enemy-map.sml
|
fcore/enemy/falling-enemy-map.sml
|
||||||
|
|
||||||
|
fcore/core-key.sml
|
||||||
fcore/player/player-type.sml
|
fcore/player/player-type.sml
|
||||||
fcore/game-type.sml
|
fcore/game-type.sml
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ struct
|
|||||||
, upHeld = ref false
|
, upHeld = ref false
|
||||||
, downHeld = ref false
|
, downHeld = ref false
|
||||||
, attackHeld = ref false
|
, attackHeld = ref false
|
||||||
, chargeHeld = ref false
|
|
||||||
, width = ref (1920.0 : Real32.real)
|
, width = ref (1920.0 : Real32.real)
|
||||||
, height = ref (1080.0 : Real32.real)
|
, height = ref (1080.0 : Real32.real)
|
||||||
}
|
}
|
||||||
@@ -18,7 +17,6 @@ struct
|
|||||||
, upHeld = !(#upHeld state)
|
, upHeld = !(#upHeld state)
|
||||||
, downHeld = !(#downHeld state)
|
, downHeld = !(#downHeld state)
|
||||||
, attackHeld = !(#attackHeld state)
|
, attackHeld = !(#attackHeld state)
|
||||||
, chargeHeld = !(#chargeHeld state)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getWidth () =
|
fun getWidth () =
|
||||||
@@ -53,10 +51,6 @@ struct
|
|||||||
if action = PRESS then (#attackHeld state) := true
|
if action = PRESS then (#attackHeld state) := true
|
||||||
else if action = RELEASE then (#attackHeld state) := false
|
else if action = RELEASE then (#attackHeld state) := false
|
||||||
else ()
|
else ()
|
||||||
else if key = KEY_L then
|
|
||||||
if action = PRESS then (#chargeHeld state) := true
|
|
||||||
else if action = RELEASE then (#chargeHeld state) := false
|
|
||||||
else ()
|
|
||||||
else
|
else
|
||||||
()
|
()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user