Mi2dRPGamEng/tests/test_depth_shading.py

58 lines
1.9 KiB
Python

from engine.map import Map
from engine.placeholder_textures import DEPTH_SHADOW_TEXTURE, generate_depth_shadow_texture
from engine.render.renderer import visible_z_and_depth
from engine.tile import Tile, TileLayerInstance
def make_column_map():
"""A 1x1 map, 4 z-levels tall: floored at z=0 and z=3 only, bare (no layers) at z=1, 2 -
the "open air gap above a lower surface" case generation leaves at steep cliffs.
"""
m = Map("shaft", 1, 1, 4)
m.set_tile(0, 0, 0, Tile(flooring=TileLayerInstance("stone")))
m.set_tile(0, 0, 3, Tile(flooring=TileLayerInstance("dirt")))
return m
def test_reference_level_with_content_is_visible_at_zero_depth():
m = make_column_map()
z, depth = visible_z_and_depth(m, 0, 0, reference_z=3)
assert (z, depth) == (3, 0)
def test_gap_below_reference_looks_down_to_the_first_real_tile():
m = make_column_map()
z, depth = visible_z_and_depth(m, 0, 0, reference_z=2)
assert (z, depth) == (0, 2)
def test_gap_one_level_down_reports_depth_one():
m = make_column_map()
z, depth = visible_z_and_depth(m, 0, 0, reference_z=1)
assert (z, depth) == (0, 1)
def test_out_of_bounds_reference_returns_none():
m = make_column_map()
z, depth = visible_z_and_depth(m, 0, 0, reference_z=99)
assert (z, depth) == (None, 0)
def test_true_void_all_the_way_down_returns_none():
m = Map("empty", 1, 1, 2) # nothing set anywhere
z, depth = visible_z_and_depth(m, 0, 0, reference_z=1)
assert (z, depth) == (None, 0)
def test_generate_depth_shadow_texture_writes_a_file(tmp_path):
generate_depth_shadow_texture(tmp_path)
assert (tmp_path / DEPTH_SHADOW_TEXTURE).exists()
def test_generate_depth_shadow_texture_does_not_overwrite(tmp_path):
generate_depth_shadow_texture(tmp_path)
path = tmp_path / DEPTH_SHADOW_TEXTURE
path.write_bytes(b"custom")
generate_depth_shadow_texture(tmp_path)
assert path.read_bytes() == b"custom"