51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
import pytest
|
|
|
|
from game import constants
|
|
from tests.support import makeWorld
|
|
from game.sim.inputCommand import InputCommand
|
|
|
|
|
|
ladderLevel = [
|
|
" H ",
|
|
" H ",
|
|
" H ",
|
|
"XXXXX",
|
|
]
|
|
|
|
|
|
def seatOnLadder(world):
|
|
world.player.x = 2 * constants.tileSize
|
|
world.player.y = 2 * constants.tileSize
|
|
world.player.vy = 0.0
|
|
|
|
|
|
def test_climbLadderReducesHeight():
|
|
world = makeWorld(ladderLevel)
|
|
seatOnLadder(world)
|
|
startY = world.player.y
|
|
for _ in range(8):
|
|
world.step(InputCommand(up=True))
|
|
assert world.player.onLadder
|
|
assert world.player.y < startY - 6.0
|
|
|
|
|
|
def test_ladderHoverIgnoresGravity():
|
|
world = makeWorld(ladderLevel)
|
|
seatOnLadder(world)
|
|
for _ in range(6):
|
|
world.step(InputCommand(up=True))
|
|
restingY = world.player.y
|
|
for _ in range(6):
|
|
world.step(InputCommand())
|
|
assert world.player.y == pytest.approx(restingY, abs=0.5)
|
|
|
|
|
|
def test_leavingLadderTileDropsClimbState():
|
|
world = makeWorld(ladderLevel)
|
|
seatOnLadder(world)
|
|
world.step(InputCommand(up=True))
|
|
assert world.player.onLadder
|
|
world.player.x = 0.0
|
|
world.step(InputCommand())
|
|
assert not world.player.onLadder
|