Test suite modernization

This commit is contained in:
John McCardle 2026-02-09 08:15:18 -05:00
commit 52fdfd0347
141 changed files with 9947 additions and 4665 deletions

View file

@ -32,12 +32,12 @@ move_timer_ms = 150 # Time between moves
g_grid = None
g_patrol = None
g_fov_layer = None
patrol_demo = mcrfpy.Scene("patrol_demo")
def setup_scene():
"""Create the demo scene"""
global g_grid, g_patrol, g_fov_layer
patrol_demo = mcrfpy.Scene("patrol_demo")
patrol_demo.activate()
ui = patrol_demo.children
@ -89,7 +89,7 @@ def setup_scene():
# Draw walls on the wall layer
for y in range(5, 15):
for x in range(5, 15):
wall_layer.set(x, y, mcrfpy.Color(100, 70, 50, 255)) # Brown walls
wall_layer.set((x, y), mcrfpy.Color(100, 70, 50, 255)) # Brown walls
# Create FOV layer (above walls, below entities)
fov_layer = grid.add_layer('color', z_index=-1)
@ -146,9 +146,9 @@ def patrol_step(timer, runtime):
# Move one step (prefer horizontal, then vertical)
if dx != 0:
g_patrol.x = px + dx
g_patrol.grid_x = px + dx
elif dy != 0:
g_patrol.y = py + dy
g_patrol.grid_y = py + dy
# Update visibility after move
g_patrol.update_visibility()

View file

@ -0,0 +1,18 @@
# navigation_screenshot.py - Take screenshot of navigation demo
import mcrfpy
from mcrfpy import automation
import os
# Change to the correct directory for the demo
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# Run the navigation demo
exec(open('navigation_demo.py').read())
# Take a screenshot after a brief delay
def take_shot(rt):
automation.screenshot('../screenshots/navigation_demo.png')
print('Screenshot saved!')
mcrfpy.exit()
timer = mcrfpy.Timer('screenshot', take_shot, 500)

View file

@ -0,0 +1,96 @@
# viewport3d_screenshot.py - Quick screenshot of Viewport3D demo
import mcrfpy
from mcrfpy import automation
import sys
print("Script starting...", flush=True)
# Create demo scene
scene = mcrfpy.Scene('viewport3d_demo')
print("Scene created")
# Dark background frame
bg = mcrfpy.Frame(pos=(0, 0), size=(1024, 768), fill_color=mcrfpy.Color(20, 20, 30))
scene.children.append(bg)
# Title
title = mcrfpy.Caption(text='Viewport3D Demo - PS1-Style 3D Rendering', pos=(20, 10))
title.fill_color = mcrfpy.Color(255, 255, 255)
scene.children.append(title)
# Create the 3D viewport - the main feature!
print("Creating Viewport3D...")
viewport = mcrfpy.Viewport3D(
pos=(50, 60),
size=(600, 450),
render_resolution=(320, 240),
fov=60.0,
camera_pos=(5.0, 3.0, 5.0),
camera_target=(0.0, 0.0, 0.0),
bg_color=mcrfpy.Color(25, 25, 50)
)
print(f"Viewport3D created: {viewport}")
scene.children.append(viewport)
print("Viewport3D added to scene")
# Info panel on the right
info_panel = mcrfpy.Frame(pos=(670, 60), size=(330, 450),
fill_color=mcrfpy.Color(30, 30, 40),
outline_color=mcrfpy.Color(80, 80, 100),
outline=2.0)
scene.children.append(info_panel)
# Panel title
panel_title = mcrfpy.Caption(text='Viewport Properties', pos=(690, 70))
panel_title.fill_color = mcrfpy.Color(200, 200, 255)
scene.children.append(panel_title)
# Property labels
props = [
('Position:', f'({viewport.x}, {viewport.y})'),
('Size:', f'{viewport.w}x{viewport.h}'),
('Render Res:', f'{viewport.render_resolution[0]}x{viewport.render_resolution[1]}'),
('FOV:', f'{viewport.fov} degrees'),
('Camera Pos:', f'({viewport.camera_pos[0]:.1f}, {viewport.camera_pos[1]:.1f}, {viewport.camera_pos[2]:.1f})'),
('Camera Target:', f'({viewport.camera_target[0]:.1f}, {viewport.camera_target[1]:.1f}, {viewport.camera_target[2]:.1f})'),
('', ''),
('PS1 Effects:', ''),
(' Vertex Snap:', 'ON' if viewport.enable_vertex_snap else 'OFF'),
(' Affine Map:', 'ON' if viewport.enable_affine else 'OFF'),
(' Dithering:', 'ON' if viewport.enable_dither else 'OFF'),
(' Fog:', 'ON' if viewport.enable_fog else 'OFF'),
(' Fog Range:', f'{viewport.fog_near} - {viewport.fog_far}'),
]
y_offset = 100
for label, value in props:
if label:
cap = mcrfpy.Caption(text=f'{label} {value}', pos=(690, y_offset))
cap.fill_color = mcrfpy.Color(180, 180, 200)
scene.children.append(cap)
y_offset += 22
# Instructions at bottom
instructions = mcrfpy.Caption(
text='[1-4] Toggle PS1 effects | [WASD] Move camera | [Q/E] Camera height | [ESC] Quit',
pos=(20, 530)
)
instructions.fill_color = mcrfpy.Color(150, 150, 150)
scene.children.append(instructions)
# Status line
status = mcrfpy.Caption(text='Status: Viewport3D ready (placeholder mode - GL shaders pending)', pos=(20, 555))
status.fill_color = mcrfpy.Color(100, 200, 100)
scene.children.append(status)
scene.activate()
def take_screenshot(timer, runtime):
print(f'Timer callback fired at runtime: {runtime}')
automation.screenshot('viewport3d_demo.png')
print('Screenshot saved to viewport3d_demo.png')
sys.exit(0)
print('Setting up screenshot timer...')
mcrfpy.Timer('screenshot', take_screenshot, 500, once=True)
print('Timer set, entering game loop...')