add main attack patches to player.sml, registering attack input (although we don't react on the attack input yet)
This commit is contained in:
@@ -19,7 +19,7 @@ sig
|
|||||||
|
|
||||||
datatype facing = FACING_LEFT | FACING_RIGHT
|
datatype facing = FACING_LEFT | FACING_RIGHT
|
||||||
|
|
||||||
datatype main_attack = MAIN_UNUSED | MAIN_ATTACKING of int
|
datatype main_attack = MAIN_NOT_ATTACKING | MAIN_ATTACKING of int
|
||||||
|
|
||||||
type player =
|
type player =
|
||||||
{ yAxis: player_y_axis
|
{ yAxis: player_y_axis
|
||||||
@@ -27,6 +27,7 @@ sig
|
|||||||
, recoil: player_recoil
|
, recoil: player_recoil
|
||||||
, attacked: player_attacked
|
, attacked: player_attacked
|
||||||
, mainAttack: main_attack
|
, mainAttack: main_attack
|
||||||
|
, mainAttackPressed: bool
|
||||||
, facing: facing
|
, facing: facing
|
||||||
, health: int
|
, health: int
|
||||||
, x: int
|
, x: int
|
||||||
@@ -71,7 +72,7 @@ struct
|
|||||||
|
|
||||||
datatype facing = FACING_LEFT | FACING_RIGHT
|
datatype facing = FACING_LEFT | FACING_RIGHT
|
||||||
|
|
||||||
datatype main_attack = MAIN_UNUSED | MAIN_ATTACKING of int
|
datatype main_attack = MAIN_NOT_ATTACKING | MAIN_ATTACKING of int
|
||||||
|
|
||||||
type player =
|
type player =
|
||||||
{ yAxis: player_y_axis
|
{ yAxis: player_y_axis
|
||||||
@@ -79,6 +80,7 @@ struct
|
|||||||
, recoil: player_recoil
|
, recoil: player_recoil
|
||||||
, attacked: player_attacked
|
, attacked: player_attacked
|
||||||
, mainAttack: main_attack
|
, mainAttack: main_attack
|
||||||
|
, mainAttackPressed: bool
|
||||||
, facing: facing
|
, facing: facing
|
||||||
, health: int
|
, health: int
|
||||||
, x: int
|
, x: int
|
||||||
@@ -105,7 +107,8 @@ struct
|
|||||||
, xAxis = STAY_STILL
|
, xAxis = STAY_STILL
|
||||||
, recoil = NO_RECOIL
|
, recoil = NO_RECOIL
|
||||||
, attacked = NOT_ATTACKED
|
, attacked = NOT_ATTACKED
|
||||||
, mainAttack = MAIN_UNUSED
|
, mainAttack = MAIN_NOT_ATTACKING
|
||||||
|
, mainAttackPressed = false
|
||||||
, facing = FACING_RIGHT
|
, facing = FACING_RIGHT
|
||||||
, health = 3
|
, health = 3
|
||||||
, x = 500
|
, x = 500
|
||||||
|
|||||||
@@ -25,12 +25,14 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
) =
|
) =
|
||||||
{ yAxis = yAxis
|
{ yAxis = yAxis
|
||||||
, xAxis = xAxis
|
, xAxis = xAxis
|
||||||
, recoil = recoil
|
, recoil = recoil
|
||||||
, attacked = attacked
|
, attacked = attacked
|
||||||
, mainAttack = MAIN_UNUSED
|
, mainAttack = mainAttack
|
||||||
|
, mainAttackPressed = mainAttackPressed
|
||||||
, facing = facing
|
, facing = facing
|
||||||
, health = health
|
, health = health
|
||||||
, x = x
|
, x = x
|
||||||
@@ -46,6 +48,7 @@ struct
|
|||||||
, recoil
|
, recoil
|
||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
|
, mainAttackPressed
|
||||||
, facing
|
, facing
|
||||||
, health
|
, health
|
||||||
, x
|
, x
|
||||||
@@ -66,6 +69,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_Y_AXIS yAxis =>
|
| W_Y_AXIS yAxis =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -79,6 +83,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_RECOIL recoil =>
|
| W_RECOIL recoil =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -92,6 +97,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_ATTACKED attacked =>
|
| W_ATTACKED attacked =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -105,6 +111,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_MAIN_ATTACK mainAttack =>
|
| W_MAIN_ATTACK mainAttack =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -118,6 +125,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_FACING facing =>
|
| W_FACING facing =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -131,6 +139,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_HEALTH health =>
|
| W_HEALTH health =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -144,6 +153,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_X x =>
|
| W_X x =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -157,6 +167,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_Y y =>
|
| W_Y y =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -170,6 +181,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
| W_JUMP_PRESSED jumpPressed =>
|
| W_JUMP_PRESSED jumpPressed =>
|
||||||
mkPlayer
|
mkPlayer
|
||||||
@@ -183,6 +195,7 @@ struct
|
|||||||
, attacked
|
, attacked
|
||||||
, mainAttack
|
, mainAttack
|
||||||
, facing
|
, facing
|
||||||
|
, mainAttackPressed
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -203,7 +216,8 @@ struct
|
|||||||
val jumpLimit = 150
|
val jumpLimit = 150
|
||||||
val floatLimit = 3
|
val floatLimit = 3
|
||||||
val recoilLimit = 15
|
val recoilLimit = 15
|
||||||
val attackLimit = 55
|
val attackedLimit = 55
|
||||||
|
val mainAttackLimit = 15
|
||||||
|
|
||||||
(* helper functions checking input *)
|
(* helper functions checking input *)
|
||||||
fun getXAxis (lh, rh) =
|
fun getXAxis (lh, rh) =
|
||||||
@@ -382,7 +396,7 @@ struct
|
|||||||
checkEnemies (player, enemies, enemyCollisions, acc)
|
checkEnemies (player, enemies, enemyCollisions, acc)
|
||||||
end
|
end
|
||||||
| ATTACKED amt =>
|
| ATTACKED amt =>
|
||||||
if amt = attackLimit then
|
if amt = attackedLimit then
|
||||||
(* if we hit limit, exit ATTACKED phase
|
(* if we hit limit, exit ATTACKED phase
|
||||||
* and react to enemy collisions again
|
* and react to enemy collisions again
|
||||||
* *)
|
* *)
|
||||||
@@ -448,13 +462,9 @@ struct
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
fun getInputPatches (player: player, input) =
|
fun getJumpPatches (player, upHeld, downHeld, acc) =
|
||||||
let
|
let
|
||||||
val {x, y, yAxis, jumpPressed, facing, ...} = player
|
val {yAxis, jumpPressed, ...} = player
|
||||||
val {leftHeld, rightHeld, upHeld, downHeld, attackHeld} = input
|
|
||||||
|
|
||||||
val xAxis = getXAxis (leftHeld, rightHeld)
|
|
||||||
val facing = getFacing (facing, xAxis)
|
|
||||||
in
|
in
|
||||||
case (upHeld, downHeld) of
|
case (upHeld, downHeld) of
|
||||||
(false, false) =>
|
(false, false) =>
|
||||||
@@ -462,40 +472,50 @@ struct
|
|||||||
val yAxis = defaultYAxis yAxis
|
val yAxis = defaultYAxis yAxis
|
||||||
val jumpPressed = false
|
val jumpPressed = false
|
||||||
in
|
in
|
||||||
[ W_X_AXIS xAxis
|
W_JUMP_PRESSED jumpPressed :: W_Y_AXIS yAxis :: acc
|
||||||
, W_Y_AXIS yAxis
|
|
||||||
, W_JUMP_PRESSED jumpPressed
|
|
||||||
, W_FACING facing
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
| (true, true) =>
|
| (true, true) =>
|
||||||
let val yAxis = defaultYAxis yAxis
|
let val yAxis = defaultYAxis yAxis
|
||||||
in [W_X_AXIS xAxis, W_Y_AXIS yAxis, W_FACING facing]
|
in W_Y_AXIS yAxis :: acc
|
||||||
end
|
end
|
||||||
| (true, false) =>
|
| (true, false) =>
|
||||||
let
|
let
|
||||||
val yAxis = onJumpPressed (yAxis, jumpPressed)
|
val yAxis = onJumpPressed (yAxis, jumpPressed)
|
||||||
val jumpPressed = true
|
val jumpPressed = true
|
||||||
in
|
in
|
||||||
[ W_X_AXIS xAxis
|
W_Y_AXIS yAxis :: W_JUMP_PRESSED jumpPressed :: acc
|
||||||
, W_Y_AXIS yAxis
|
|
||||||
, W_JUMP_PRESSED jumpPressed
|
|
||||||
, W_FACING facing
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
| (false, true) =>
|
| (false, true) =>
|
||||||
let
|
let
|
||||||
val jumpPressed = false
|
val jumpPressed = false
|
||||||
val yAxis = DROP_BELOW_PLATFORM
|
val yAxis = DROP_BELOW_PLATFORM
|
||||||
in
|
in
|
||||||
[ W_X_AXIS xAxis
|
W_Y_AXIS yAxis :: W_JUMP_PRESSED jumpPressed :: acc
|
||||||
, W_Y_AXIS yAxis
|
|
||||||
, W_JUMP_PRESSED jumpPressed
|
|
||||||
, W_FACING facing
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fun getMainAttackPatches (prevAttack, attackHeld) =
|
||||||
|
case prevAttack of
|
||||||
|
MAIN_NOT_ATTACKING => if attackHeld then MAIN_ATTACKING 0 else prevAttack
|
||||||
|
| MAIN_ATTACKING amt =>
|
||||||
|
if amt = mainAttackLimit then MAIN_NOT_ATTACKING
|
||||||
|
else let val amt = amt + 1 in MAIN_ATTACKING amt end
|
||||||
|
|
||||||
|
fun getInputPatches (player: player, input) =
|
||||||
|
let
|
||||||
|
val {x, y, yAxis, jumpPressed, facing, mainAttack, ...} = player
|
||||||
|
val {leftHeld, rightHeld, upHeld, downHeld, attackHeld} = input
|
||||||
|
|
||||||
|
val xAxis = getXAxis (leftHeld, rightHeld)
|
||||||
|
val facing = getFacing (facing, xAxis)
|
||||||
|
val mainAttack = getMainAttackPatches (mainAttack, attackHeld)
|
||||||
|
|
||||||
|
val acc = [W_X_AXIS xAxis, W_FACING facing, W_MAIN_ATTACK mainAttack]
|
||||||
|
val acc = getJumpPatches (player, upHeld, downHeld, acc)
|
||||||
|
in
|
||||||
|
acc
|
||||||
|
end
|
||||||
|
|
||||||
fun getRecoilPatches player =
|
fun getRecoilPatches player =
|
||||||
case #recoil player of
|
case #recoil player of
|
||||||
NO_RECOIL => []
|
NO_RECOIL => []
|
||||||
|
|||||||
Reference in New Issue
Block a user