when enemy jumps or drops without needing to move horizontally to reach platform, tell enemy to stay still so we don't risk falling off platform
This commit is contained in:
@@ -176,10 +176,16 @@ struct
|
|||||||
isBetween (platX, ecx, platFinishX)
|
isBetween (platX, ecx, platFinishX)
|
||||||
then
|
then
|
||||||
(* can jump from same position enemy is at *)
|
(* can jump from same position enemy is at *)
|
||||||
|
let
|
||||||
|
(* since we want to jump vertically and not risk falling off by
|
||||||
|
* jumping + moving either left or right, make enemy stay still *)
|
||||||
|
val acc = EnemyPatch.W_X_AXIS STAY_STILL :: acc
|
||||||
|
in
|
||||||
case eyAxis of
|
case eyAxis of
|
||||||
ON_GROUND => EnemyPatch.W_Y_AXIS (JUMPING 0) :: acc
|
ON_GROUND => EnemyPatch.W_Y_AXIS (JUMPING 0) :: acc
|
||||||
| FALLING => EnemyPatch.W_Y_AXIS (JUMPING 0) :: acc
|
| FALLING => EnemyPatch.W_Y_AXIS (JUMPING 0) :: acc
|
||||||
| _ => acc
|
| _ => acc
|
||||||
|
end
|
||||||
else (* have to travel either left or right before jumping *) if
|
else (* have to travel either left or right before jumping *) if
|
||||||
ecx < platX
|
ecx < platX
|
||||||
then
|
then
|
||||||
@@ -219,10 +225,14 @@ struct
|
|||||||
isBetween (platX, ecx, platFinishX)
|
isBetween (platX, ecx, platFinishX)
|
||||||
then
|
then
|
||||||
(* can jump from same position enemy is at *)
|
(* can jump from same position enemy is at *)
|
||||||
|
let
|
||||||
|
val acc = EnemyPatch.W_X_AXIS STAY_STILL :: acc
|
||||||
|
in
|
||||||
case eyAxis of
|
case eyAxis of
|
||||||
ON_GROUND => EnemyPatch.W_Y_AXIS DROP_BELOW_PLATFORM :: acc
|
ON_GROUND => EnemyPatch.W_Y_AXIS DROP_BELOW_PLATFORM :: acc
|
||||||
| FALLING => EnemyPatch.W_Y_AXIS DROP_BELOW_PLATFORM :: acc
|
| FALLING => EnemyPatch.W_Y_AXIS DROP_BELOW_PLATFORM :: acc
|
||||||
| _ => acc
|
| _ => acc
|
||||||
|
end
|
||||||
else (* have to travel either left or right before jumping *) if
|
else (* have to travel either left or right before jumping *) if
|
||||||
ecx < platX
|
ecx < platX
|
||||||
then
|
then
|
||||||
@@ -420,6 +430,10 @@ struct
|
|||||||
(* if only one side in x direction overlaps with platform,
|
(* if only one side in x direction overlaps with platform,
|
||||||
* then move enemy left/right to make them fully overlap with platform *)
|
* then move enemy left/right to make them fully overlap with platform *)
|
||||||
fun getHorizontalLandingPatches (enemy, nextPlatform, acc) =
|
fun getHorizontalLandingPatches (enemy, nextPlatform, acc) =
|
||||||
|
case #xAxis enemy of
|
||||||
|
STAY_STILL =>
|
||||||
|
acc
|
||||||
|
| _ =>
|
||||||
let
|
let
|
||||||
val {x = px, width = pw, ...} = nextPlatform
|
val {x = px, width = pw, ...} = nextPlatform
|
||||||
val pfx = px + pw
|
val pfx = px + pw
|
||||||
|
|||||||
@@ -320,10 +320,6 @@ struct
|
|||||||
let
|
let
|
||||||
val player = #player game
|
val player = #player game
|
||||||
|
|
||||||
val _ = print
|
|
||||||
("(playerX, playerY) = (" ^ Int.toString (#x player) ^ ", "
|
|
||||||
^ Int.toString (#y player) ^ ")\n")
|
|
||||||
|
|
||||||
val patches = getProjectilePatches player
|
val patches = getProjectilePatches player
|
||||||
val player = PlayerPatch.withPatches (player, patches)
|
val player = PlayerPatch.withPatches (player, patches)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user