Three things, sorry. SDL composite texture bugfix, sprite offset position, some Grid render efficiencies
This commit is contained in:
parent
456e5e676e
commit
120b0aa2a4
5 changed files with 273 additions and 27 deletions
91
tests/unit/entity_sprite_offset_test.py
Normal file
91
tests/unit/entity_sprite_offset_test.py
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
"""Test Entity sprite_offset property (#233 sub-feature 1)"""
|
||||
import mcrfpy
|
||||
import sys
|
||||
|
||||
passed = 0
|
||||
failed = 0
|
||||
|
||||
def test(name, condition):
|
||||
global passed, failed
|
||||
if condition:
|
||||
passed += 1
|
||||
else:
|
||||
failed += 1
|
||||
print(f"FAIL: {name}")
|
||||
|
||||
# Setup: create a grid and texture for entity tests
|
||||
scene = mcrfpy.Scene("test")
|
||||
mcrfpy.current_scene = scene
|
||||
tex = mcrfpy.Texture("assets/kenney_tinydungeon.png", 16, 16)
|
||||
grid = mcrfpy.Grid(grid_size=(10, 10), texture=tex, pos=(0, 0), size=(160, 160))
|
||||
scene.children.append(grid)
|
||||
|
||||
# Test 1: Default sprite_offset is (0, 0)
|
||||
e = mcrfpy.Entity(grid_pos=(3, 3), texture=tex, sprite_index=0, grid=grid)
|
||||
test("default sprite_offset is (0,0)",
|
||||
e.sprite_offset.x == 0.0 and e.sprite_offset.y == 0.0)
|
||||
|
||||
# Test 2: Set sprite_offset via tuple
|
||||
e.sprite_offset = (-8, -16)
|
||||
test("set sprite_offset via tuple",
|
||||
e.sprite_offset.x == -8.0 and e.sprite_offset.y == -16.0)
|
||||
|
||||
# Test 3: Read individual components
|
||||
test("sprite_offset_x component", e.sprite_offset_x == -8.0)
|
||||
test("sprite_offset_y component", e.sprite_offset_y == -16.0)
|
||||
|
||||
# Test 4: Set individual components
|
||||
e.sprite_offset_x = 4.5
|
||||
e.sprite_offset_y = -3.0
|
||||
test("set sprite_offset_x", e.sprite_offset_x == 4.5)
|
||||
test("set sprite_offset_y", e.sprite_offset_y == -3.0)
|
||||
test("individual set reflects in vector",
|
||||
e.sprite_offset.x == 4.5 and e.sprite_offset.y == -3.0)
|
||||
|
||||
# Test 5: Constructor kwarg
|
||||
e2 = mcrfpy.Entity(grid_pos=(1, 1), texture=tex, sprite_index=0,
|
||||
grid=grid, sprite_offset=(-8, -16))
|
||||
test("constructor kwarg sprite_offset",
|
||||
e2.sprite_offset.x == -8.0 and e2.sprite_offset.y == -16.0)
|
||||
|
||||
# Test 6: Constructor default when not specified
|
||||
e3 = mcrfpy.Entity(grid_pos=(2, 2), texture=tex, sprite_index=0, grid=grid)
|
||||
test("constructor default (0,0)",
|
||||
e3.sprite_offset.x == 0.0 and e3.sprite_offset.y == 0.0)
|
||||
|
||||
# Test 7: Animation support - verify property is animatable
|
||||
try:
|
||||
e.animate("sprite_offset_x", -8.0, 0.5, "linear")
|
||||
test("animate sprite_offset_x accepted", True)
|
||||
except Exception as ex:
|
||||
test(f"animate sprite_offset_x accepted: {ex}", False)
|
||||
|
||||
try:
|
||||
e.animate("sprite_offset_y", -16.0, 0.5, "linear")
|
||||
test("animate sprite_offset_y accepted", True)
|
||||
except Exception as ex:
|
||||
test(f"animate sprite_offset_y accepted: {ex}", False)
|
||||
|
||||
# Test 8: Animation actually changes value (step the game loop)
|
||||
e.sprite_offset_x = 0.0
|
||||
e.animate("sprite_offset_x", 10.0, 0.1, "linear")
|
||||
# Step enough to complete the animation
|
||||
for _ in range(5):
|
||||
mcrfpy.step(0.05)
|
||||
test("animation changes sprite_offset_x", abs(e.sprite_offset_x - 10.0) < 0.1)
|
||||
|
||||
# Test 9: Type errors
|
||||
try:
|
||||
e.sprite_offset_x = "bad"
|
||||
test("type error on string", False)
|
||||
except TypeError:
|
||||
test("type error on string", True)
|
||||
|
||||
# Summary
|
||||
print(f"\n{passed} passed, {failed} failed out of {passed + failed} tests")
|
||||
if failed:
|
||||
print("FAIL")
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("PASS")
|
||||
sys.exit(0)
|
||||
Loading…
Add table
Add a link
Reference in a new issue