49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
from engine.tile import Tile, TileLayerDef, TileLayerInstance
|
|
|
|
|
|
class FakeRegistry:
|
|
def __init__(self, defs: dict[tuple[str, str], TileLayerDef]):
|
|
self._defs = defs
|
|
|
|
def get_tile_layer_def(self, layer, def_id):
|
|
if def_id is None:
|
|
return None
|
|
return self._defs.get((layer, def_id))
|
|
|
|
|
|
def test_speed_multiplier_defaults_to_1_with_no_layers_set():
|
|
tile = Tile()
|
|
assert tile.speed_multiplier(FakeRegistry({})) == 1.0
|
|
|
|
|
|
def test_speed_multiplier_uses_flooring_defs_value():
|
|
registry = FakeRegistry({("flooring", "mud"): TileLayerDef(id="mud", layer="flooring", speed_multiplier=0.6)})
|
|
tile = Tile(flooring=TileLayerInstance("mud"))
|
|
assert tile.speed_multiplier(registry) == 0.6
|
|
|
|
|
|
def test_speed_multiplier_takes_the_most_restrictive_of_room_and_flooring():
|
|
registry = FakeRegistry({
|
|
("flooring", "mud"): TileLayerDef(id="mud", layer="flooring", speed_multiplier=0.6),
|
|
("room", "webbing"): TileLayerDef(id="webbing", layer="room", speed_multiplier=0.3),
|
|
})
|
|
tile = Tile(flooring=TileLayerInstance("mud"), room=TileLayerInstance("webbing"))
|
|
assert tile.speed_multiplier(registry) == 0.3
|
|
|
|
|
|
def test_speed_multiplier_unaffected_by_an_unrelated_def_with_no_slow():
|
|
registry = FakeRegistry({("flooring", "grass"): TileLayerDef(id="grass", layer="flooring")})
|
|
tile = Tile(flooring=TileLayerInstance("grass"))
|
|
assert tile.speed_multiplier(registry) == 1.0
|
|
|
|
|
|
def test_has_any_layer_false_for_a_bare_tile():
|
|
assert Tile().has_any_layer() is False
|
|
|
|
|
|
def test_has_any_layer_true_if_any_single_layer_is_set():
|
|
assert Tile(flooring=TileLayerInstance("dirt")).has_any_layer() is True
|
|
assert Tile(room=TileLayerInstance("solid_rock")).has_any_layer() is True
|
|
assert Tile(roof=TileLayerInstance("cave_ceiling")).has_any_layer() is True
|
|
assert Tile(subfloor=TileLayerInstance("dirt")).has_any_layer() is True
|