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