test: hazards, ladders and one-way platforms
This commit is contained in:
1 parent
207691433c
commit
dd74783ff0
3 files changed
+160
No files matched your search
@@ -0,0 +1,43 @@
|
||||
from game import constants
|
||||
from tests.support import makeWorld
|
||||
from game.sim.inputCommand import InputCommand
|
||||
|
||||
|
||||
spikeLevel = [
|
||||
" ",
|
||||
" p ",
|
||||
"^^^^^",
|
||||
"XXXXX",
|
||||
]
|
||||
|
||||
safeLevel = [
|
||||
" ",
|
||||
" p ",
|
||||
" ",
|
||||
"XXXXX",
|
||||
]
|
||||
|
||||
|
||||
def test_spikesDamagePlayer():
|
||||
world = makeWorld(spikeLevel)
|
||||
for _ in range(12):
|
||||
world.step(InputCommand())
|
||||
assert world.player.hp <= world.player.maxHp - 2
|
||||
assert world.player.iframes > 0
|
||||
|
||||
|
||||
def test_noHazardKeepsFullHealth():
|
||||
world = makeWorld(safeLevel)
|
||||
for _ in range(12):
|
||||
world.step(InputCommand())
|
||||
assert world.player.hp == world.player.maxHp
|
||||
|
||||
|
||||
def test_iframesPreventDoubleHit():
|
||||
world = makeWorld(spikeLevel)
|
||||
for _ in range(3):
|
||||
world.step(InputCommand())
|
||||
hpAfterFirst = world.player.hp
|
||||
world.step(InputCommand())
|
||||
assert world.player.hp == hpAfterFirst
|
||||
assert world.player.hp < world.player.maxHp
|
||||
@@ -0,0 +1,50 @@
|
||||
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
|
||||
@@ -0,0 +1,67 @@
|
||||
import pytest
|
||||
|
||||
from game import constants
|
||||
from tests.support import makeWorld
|
||||
from game.sim.inputCommand import InputCommand
|
||||
|
||||
|
||||
def test_landsOnOneWayFromAbove():
|
||||
world = makeWorld([
|
||||
" p ",
|
||||
" ",
|
||||
"======",
|
||||
" ",
|
||||
"XXXXXX",
|
||||
])
|
||||
for _ in range(30):
|
||||
world.step(InputCommand())
|
||||
player = world.player
|
||||
assert player.onGround
|
||||
assert player.bottom == pytest.approx(2 * constants.tileSize)
|
||||
|
||||
|
||||
def test_passesThroughOneWayFromBelow():
|
||||
world = makeWorld([
|
||||
" ",
|
||||
"======",
|
||||
" ",
|
||||
" p ",
|
||||
"XXXXXX",
|
||||
])
|
||||
minY = world.player.y
|
||||
world.step(InputCommand(jump=True, jumpHeld=True))
|
||||
for _ in range(16):
|
||||
world.step(InputCommand(jumpHeld=True))
|
||||
minY = min(minY, world.player.y)
|
||||
assert minY < constants.tileSize
|
||||
|
||||
|
||||
def test_dropThroughOneWay():
|
||||
world = makeWorld([
|
||||
" p ",
|
||||
" ",
|
||||
"======",
|
||||
" ",
|
||||
"XXXXXX",
|
||||
])
|
||||
for _ in range(30):
|
||||
world.step(InputCommand())
|
||||
assert world.player.bottom == pytest.approx(2 * constants.tileSize)
|
||||
for _ in range(30):
|
||||
world.step(InputCommand(down=True, jump=True))
|
||||
assert world.player.bottom == pytest.approx(4 * constants.tileSize)
|
||||
|
||||
|
||||
def test_downWithoutJumpKeepsPlayerOnOneWay():
|
||||
world = makeWorld([
|
||||
" p ",
|
||||
" ",
|
||||
"======",
|
||||
" ",
|
||||
"XXXXXX",
|
||||
])
|
||||
for _ in range(30):
|
||||
world.step(InputCommand())
|
||||
for _ in range(20):
|
||||
world.step(InputCommand(down=True))
|
||||
assert world.player.bottom == pytest.approx(2 * constants.tileSize)
|
||||
Reference in new issue
Block a user