90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""
|
||
|
|
Shader Toggle Test - Regression test for position corruption bug
|
||
|
|
|
||
|
|
Tests that toggling shader_enabled on and off does not corrupt frame position.
|
||
|
|
This was a bug similar to #223 where box.setPosition(0,0) during texture
|
||
|
|
rendering was never restored when switching back to standard rendering.
|
||
|
|
"""
|
||
|
|
import mcrfpy
|
||
|
|
import sys
|
||
|
|
|
||
|
|
scene = mcrfpy.Scene("toggle_test")
|
||
|
|
mcrfpy.current_scene = scene
|
||
|
|
ui = scene.children
|
||
|
|
|
||
|
|
# Background
|
||
|
|
bg = mcrfpy.Frame(pos=(0, 0), size=(800, 600), fill_color=(20, 20, 30, 255))
|
||
|
|
ui.append(bg)
|
||
|
|
|
||
|
|
# Create test frame at a specific position
|
||
|
|
test_frame = mcrfpy.Frame(
|
||
|
|
pos=(200, 200),
|
||
|
|
size=(150, 100),
|
||
|
|
fill_color=(80, 120, 180, 255),
|
||
|
|
outline_color=(255, 255, 255, 255),
|
||
|
|
outline=3.0
|
||
|
|
)
|
||
|
|
label = mcrfpy.Caption(text="Test Frame", pos=(10, 10), font_size=14)
|
||
|
|
label.fill_color = (255, 255, 255, 255)
|
||
|
|
test_frame.children.append(label)
|
||
|
|
ui.append(test_frame)
|
||
|
|
|
||
|
|
# Status display
|
||
|
|
status = mcrfpy.Caption(text="Status: Initial", pos=(20, 20), font_size=16)
|
||
|
|
status.fill_color = (255, 255, 100, 255)
|
||
|
|
ui.append(status)
|
||
|
|
|
||
|
|
pos_display = mcrfpy.Caption(text="", pos=(20, 50), font_size=14)
|
||
|
|
pos_display.fill_color = (200, 200, 200, 255)
|
||
|
|
ui.append(pos_display)
|
||
|
|
|
||
|
|
instructions = mcrfpy.Caption(
|
||
|
|
text="Press 1: Enable shader | 2: Disable shader | Q: Quit",
|
||
|
|
pos=(20, 550), font_size=14
|
||
|
|
)
|
||
|
|
instructions.fill_color = (150, 150, 150, 255)
|
||
|
|
ui.append(instructions)
|
||
|
|
|
||
|
|
def update_display():
|
||
|
|
pos_display.text = f"Position: ({test_frame.x}, {test_frame.y}) | Shader: {test_frame.shader_enabled}"
|
||
|
|
|
||
|
|
update_display()
|
||
|
|
|
||
|
|
test_count = 0
|
||
|
|
|
||
|
|
def on_key(key, state):
|
||
|
|
global test_count
|
||
|
|
if state != "start":
|
||
|
|
return
|
||
|
|
|
||
|
|
if key == "Num1" or key == "1":
|
||
|
|
test_frame.shader_enabled = True
|
||
|
|
status.text = "Status: Shader ENABLED"
|
||
|
|
update_display()
|
||
|
|
test_count += 1
|
||
|
|
elif key == "Num2" or key == "2":
|
||
|
|
test_frame.shader_enabled = False
|
||
|
|
status.text = "Status: Shader DISABLED"
|
||
|
|
update_display()
|
||
|
|
test_count += 1
|
||
|
|
|
||
|
|
# Check if position is still correct
|
||
|
|
if test_frame.x != 200 or test_frame.y != 200:
|
||
|
|
status.text = f"BUG! Position corrupted to ({test_frame.x}, {test_frame.y})"
|
||
|
|
status.fill_color = (255, 100, 100, 255)
|
||
|
|
else:
|
||
|
|
status.text = "Status: Shader DISABLED - Position OK!"
|
||
|
|
status.fill_color = (100, 255, 100, 255)
|
||
|
|
elif key in ("Q", "Escape"):
|
||
|
|
if test_frame.x == 200 and test_frame.y == 200:
|
||
|
|
print(f"PASS: Position remained correct after {test_count} toggles")
|
||
|
|
else:
|
||
|
|
print(f"FAIL: Position corrupted to ({test_frame.x}, {test_frame.y})")
|
||
|
|
sys.exit(0)
|
||
|
|
|
||
|
|
scene.on_key = on_key
|
||
|
|
|
||
|
|
print("Shader Toggle Test")
|
||
|
|
print("Press 1 to enable shader, 2 to disable, Q to quit")
|
||
|
|
print("Frame should stay at (200, 200) regardless of shader state")
|