add code for going through right-walk cycle in draw/vector code (for player)
This commit is contained in:
120
fcore/level/player/player-vec.sml
Normal file
120
fcore/level/player/player-vec.sml
Normal file
@@ -0,0 +1,120 @@
|
||||
structure PlayerVec =
|
||||
struct
|
||||
open EntityType
|
||||
open PlayerType
|
||||
|
||||
val walkRightFrames =
|
||||
#[ PlayerWalkRight1.lerp
|
||||
, PlayerWalkRight2.lerp
|
||||
, PlayerWalkRight3.lerp
|
||||
, PlayerWalkRight4.lerp
|
||||
, PlayerWalkRight5.lerp
|
||||
, PlayerWalkRight6.lerp
|
||||
, PlayerWalkRight7.lerp
|
||||
, PlayerWalkRight8.lerp
|
||||
, PlayerWalkRight9.lerp
|
||||
, PlayerWalkRight8.lerp
|
||||
, PlayerWalkRight7.lerp
|
||||
, PlayerWalkRight6.lerp
|
||||
, PlayerWalkRight5.lerp
|
||||
, PlayerWalkRight4.lerp
|
||||
, PlayerWalkRight3.lerp
|
||||
, PlayerWalkRight2.lerp
|
||||
]
|
||||
|
||||
fun getIdle (player, rx, ry, dw, dh, ww, wh) =
|
||||
case #facing player of
|
||||
FACING_RIGHT =>
|
||||
PlayerStandingRight.lerp (rx, ry, dw, dh, ww, wh, 1.0, 1.0, 1.0)
|
||||
| FACING_LEFT =>
|
||||
PlayerStandingLeft.lerp (rx, ry, dw, dh, ww, wh, 1.0, 1.0, 1.0)
|
||||
|
||||
fun getWhenOnGround (player, rx, ry, dw, dh, ww, wh) =
|
||||
case #xAxis player of
|
||||
MOVE_RIGHT =>
|
||||
let
|
||||
val animTimer = #animTimer player
|
||||
val frame = (animTimer div 2) mod Vector.length walkRightFrames
|
||||
val func = Vector.sub (walkRightFrames, Int.max (frame, 0))
|
||||
in
|
||||
func (rx, ry, dw, dh, ww, wh, 1.0, 1.0, 1.0)
|
||||
end
|
||||
| MOVE_LEFT => getIdle (player, rx, ry, dw, dh, ww, wh)
|
||||
| STAY_STILL => getIdle (player, rx, ry, dw, dh, ww, wh)
|
||||
|
||||
fun getWhenNotAttacked (player, rx, ry, dw, dh, ww, wh) =
|
||||
case #yAxis player of
|
||||
ON_GROUND => getWhenOnGround (player, rx, ry, dw, dh, ww, wh)
|
||||
| _ => PlayerStandingRight.lerp (rx, ry, dw, dh, ww, wh, 1.0, 1.0, 1.0)
|
||||
|
||||
fun getWhenAttacked (player, amt, rx, ry, dw, dh, ww, wh) =
|
||||
case #facing player of
|
||||
FACING_RIGHT =>
|
||||
if amt mod 5 = 0 then
|
||||
PlayerStandingRight.lerp (rx, ry, dw, dh, ww, wh, 1.0, 1.0, 1.0)
|
||||
else
|
||||
PlayerStandingRight.lerp (rx, ry, dw, dh, ww, wh, 1.0, 0.75, 0.75)
|
||||
| FACING_LEFT =>
|
||||
if amt mod 5 = 0 then
|
||||
PlayerStandingLeft.lerp (rx, ry, dw, dh, ww, wh, 1.0, 1.0, 1.0)
|
||||
else
|
||||
PlayerStandingLeft.lerp (rx, ry, dw, dh, ww, wh, 1.0, 0.75, 0.75)
|
||||
|
||||
fun helpGet
|
||||
(player: player, rx, ry, drawWidth, drawHeight, windowWidth, windowHeight) =
|
||||
case #attacked player of
|
||||
NOT_ATTACKED =>
|
||||
getWhenNotAttacked
|
||||
(player, rx, ry, drawWidth, drawHeight, windowWidth, windowHeight)
|
||||
| ATTACKED amt =>
|
||||
getWhenAttacked
|
||||
( player
|
||||
, amt
|
||||
, rx
|
||||
, ry
|
||||
, drawWidth
|
||||
, drawHeight
|
||||
, windowWidth
|
||||
, windowHeight
|
||||
)
|
||||
|
||||
fun get (player: player, width, height) =
|
||||
let
|
||||
val {x, y, attacked, facing, ...} = player
|
||||
val wratio = width / Constants.worldWidthReal
|
||||
val hratio = height / Constants.worldHeightReal
|
||||
in
|
||||
if wratio < hratio then
|
||||
let
|
||||
val scale = Constants.worldHeightReal * wratio
|
||||
val yOffset =
|
||||
if height > scale then (height - scale) / 2.0
|
||||
else if height < scale then (scale - height) / 2.0
|
||||
else 0.0
|
||||
|
||||
val x = Real32.fromInt x * wratio
|
||||
val y = Real32.fromInt y * wratio + yOffset
|
||||
|
||||
val realWidth = Constants.playerWidthReal * wratio
|
||||
val realHeight = Constants.playerHeightReal * wratio
|
||||
in
|
||||
helpGet (player, x, y, realWidth, realHeight, width, height)
|
||||
end
|
||||
else
|
||||
let
|
||||
val scale = Constants.worldWidthReal * hratio
|
||||
val xOffset =
|
||||
if width > scale then (width - scale) / 2.0
|
||||
else if width < scale then (scale - width) / 2.0
|
||||
else 0.0
|
||||
|
||||
val x = Real32.fromInt x * hratio + xOffset
|
||||
val y = Real32.fromInt y * hratio
|
||||
|
||||
val realWidth = Constants.playerWidthReal * hratio
|
||||
val realHeight = Constants.playerHeightReal * hratio
|
||||
in
|
||||
helpGet (player, x, y, realWidth, realHeight, width, height)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -381,6 +381,10 @@ struct
|
||||
let
|
||||
val player = #player game
|
||||
|
||||
val oldAnimTimer = #animTimer player
|
||||
val oldXAxis = #xAxis player
|
||||
val oldYAxis = #yAxis player
|
||||
|
||||
val patches = getProjectilePatches player
|
||||
val patches = getRecoilPatches (player, patches)
|
||||
val player = PlayerPatch.withPatches (player, patches)
|
||||
@@ -422,8 +426,20 @@ struct
|
||||
val {walls, wallTree, platforms, platformTree, ...} = game
|
||||
val patches = PlayerPhysics.getEnvironmentPatches
|
||||
(player, walls, wallTree, platforms, platformTree)
|
||||
|
||||
val player = PlayerPatch.withPatches (player, patches)
|
||||
|
||||
val newXAxis = #xAxis player
|
||||
val newYAxis = #yAxis player
|
||||
in
|
||||
PlayerPatch.withPatches (player, patches)
|
||||
if
|
||||
oldYAxis = ON_GROUND andalso newYAxis = ON_GROUND
|
||||
andalso oldXAxis = MOVE_RIGHT andalso newXAxis = MOVE_RIGHT
|
||||
then
|
||||
(* update move-right animation *)
|
||||
PlayerPatch.withPatch (player, W_ANIM_TIMER (oldAnimTimer + 1))
|
||||
else
|
||||
PlayerPatch.withPatch (player, W_ANIM_TIMER 0)
|
||||
end
|
||||
|
||||
(* player reaction to collisions with enemies.
|
||||
@@ -493,68 +509,6 @@ struct
|
||||
end
|
||||
|
||||
(*** DRAWING FUNCTIONS ***)
|
||||
|
||||
(* block is placeholder asset *)
|
||||
fun helpGetDrawVec
|
||||
(x, y, realWidth, realHeight, width, height, attacked, facing) =
|
||||
let
|
||||
val (r, g, b) =
|
||||
case attacked of
|
||||
NOT_ATTACKED => (1.0, 1.0, 1.0)
|
||||
| ATTACKED amt =>
|
||||
if amt mod 5 = 0 then (1.0, 1.0, 1.0) else (1.0, 0.75, 0.75)
|
||||
in
|
||||
case facing of
|
||||
FACING_RIGHT =>
|
||||
PlayerStandingRight.lerp
|
||||
(x, y, realWidth, realHeight, width, height, r, g, b)
|
||||
| FACING_LEFT =>
|
||||
PlayerStandingLeft.lerp
|
||||
(x, y, realWidth, realHeight, width, height, r, g, b)
|
||||
end
|
||||
|
||||
fun getDrawVec (player: player, width, height) =
|
||||
let
|
||||
val {x, y, attacked, facing, ...} = player
|
||||
val wratio = width / Constants.worldWidthReal
|
||||
val hratio = height / Constants.worldHeightReal
|
||||
in
|
||||
if wratio < hratio then
|
||||
let
|
||||
val scale = Constants.worldHeightReal * wratio
|
||||
val yOffset =
|
||||
if height > scale then (height - scale) / 2.0
|
||||
else if height < scale then (scale - height) / 2.0
|
||||
else 0.0
|
||||
|
||||
val x = Real32.fromInt x * wratio
|
||||
val y = Real32.fromInt y * wratio + yOffset
|
||||
|
||||
val realWidth = Constants.playerWidthReal * wratio
|
||||
val realHeight = Constants.playerHeightReal * wratio
|
||||
in
|
||||
helpGetDrawVec
|
||||
(x, y, realWidth, realHeight, width, height, attacked, facing)
|
||||
end
|
||||
else
|
||||
let
|
||||
val scale = Constants.worldWidthReal * hratio
|
||||
val xOffset =
|
||||
if width > scale then (width - scale) / 2.0
|
||||
else if width < scale then (scale - width) / 2.0
|
||||
else 0.0
|
||||
|
||||
val x = Real32.fromInt x * hratio + xOffset
|
||||
val y = Real32.fromInt y * hratio
|
||||
|
||||
val realWidth = Constants.playerWidthReal * hratio
|
||||
val realHeight = Constants.playerHeightReal * hratio
|
||||
in
|
||||
helpGetDrawVec
|
||||
(x, y, realWidth, realHeight, width, height, attacked, facing)
|
||||
end
|
||||
end
|
||||
|
||||
fun getFieldVec (player: player, width, height) =
|
||||
case #mainAttack player of
|
||||
MAIN_ATTACKING {length, ...} =>
|
||||
|
||||
@@ -36,7 +36,7 @@ struct
|
||||
val height = Real32.fromInt height * ratio
|
||||
|
||||
val block = Block.lerp
|
||||
(x, y, width, height, winWidth, winHeight, 0.0, 0.0, 0.0)
|
||||
(x, y, width, height, winWidth, winHeight, 1.0, 1.0, 1.0)
|
||||
val acc = block :: acc
|
||||
in
|
||||
helpGetDrawVecWider
|
||||
@@ -59,7 +59,7 @@ struct
|
||||
val height = Real32.fromInt height * ratio
|
||||
|
||||
val block = Block.lerp
|
||||
(x, y, width, height, winWidth, winHeight, 0.0, 0.0, 0.0)
|
||||
(x, y, width, height, winWidth, winHeight, 1.0, 1.0, 1.0)
|
||||
val acc = block :: acc
|
||||
in
|
||||
helpGetDrawVecTaller
|
||||
|
||||
34
oms.mlb
34
oms.mlb
@@ -22,21 +22,6 @@ in
|
||||
fcore/level/chain-edge.sml
|
||||
end
|
||||
|
||||
ann
|
||||
"allowVectorExps true"
|
||||
in
|
||||
fcore/level/player/sprites/player-standing-right.sml
|
||||
fcore/level/player/sprites/player-standing-left.sml
|
||||
fcore/level/player/sprites/player-walk-right-1.sml
|
||||
fcore/level/player/sprites/player-walk-right-2.sml
|
||||
fcore/level/player/sprites/player-walk-right-3.sml
|
||||
fcore/level/player/sprites/player-walk-right-4.sml
|
||||
fcore/level/player/sprites/player-walk-right-5.sml
|
||||
fcore/level/player/sprites/player-walk-right-6.sml
|
||||
fcore/level/player/sprites/player-walk-right-7.sml
|
||||
fcore/level/player/sprites/player-walk-right-8.sml
|
||||
fcore/level/player/sprites/player-walk-right-9.sml
|
||||
end
|
||||
|
||||
fcore/make-text-vec.sml
|
||||
|
||||
@@ -69,8 +54,27 @@ fcore/level/trace-jump.sml
|
||||
fcore/level/enemy/enemy-behaviour.sml
|
||||
fcore/level/enemy/enemy.sml
|
||||
fcore/level/enemy/falling-enemies.sml
|
||||
|
||||
ann
|
||||
"allowVectorExps true"
|
||||
in
|
||||
fcore/level/player/sprites/player-standing-right.sml
|
||||
fcore/level/player/sprites/player-standing-left.sml
|
||||
fcore/level/player/sprites/player-walk-right-1.sml
|
||||
fcore/level/player/sprites/player-walk-right-2.sml
|
||||
fcore/level/player/sprites/player-walk-right-3.sml
|
||||
fcore/level/player/sprites/player-walk-right-4.sml
|
||||
fcore/level/player/sprites/player-walk-right-5.sml
|
||||
fcore/level/player/sprites/player-walk-right-6.sml
|
||||
fcore/level/player/sprites/player-walk-right-7.sml
|
||||
fcore/level/player/sprites/player-walk-right-8.sml
|
||||
fcore/level/player/sprites/player-walk-right-9.sml
|
||||
fcore/level/player/player-vec.sml
|
||||
end
|
||||
|
||||
fcore/level/player/player.sml
|
||||
fcore/level/player/player-attack.sml
|
||||
|
||||
fcore/level/projectile.sml
|
||||
fcore/level/level-update.sml
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@ struct
|
||||
val width = InputState.getWidth ()
|
||||
val height = InputState.getHeight ()
|
||||
|
||||
val playerVec = Player.getDrawVec (#player level, width, height)
|
||||
val playerVec = PlayerVec.get (#player level, width, height)
|
||||
val enemyVec = Enemy.getDrawVec (#enemies level, width, height)
|
||||
val playerVec = Vector.concat [playerVec, enemyVec]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user