update tests: new scene API

This commit is contained in:
John McCardle 2026-01-03 10:59:52 -05:00
commit 838da4571d
142 changed files with 616 additions and 601 deletions

View file

@ -21,11 +21,11 @@ import sys
import random import random
# Create the benchmark scene # Create the benchmark scene
mcrfpy.createScene("benchmark") benchmark = mcrfpy.Scene("benchmark")
mcrfpy.setScene("benchmark") benchmark.activate()
# Get scene UI # Get scene UI
ui = mcrfpy.sceneUI("benchmark") ui = benchmark.children
# Create a 100x100 grid # Create a 100x100 grid
grid = mcrfpy.Grid( grid = mcrfpy.Grid(
@ -94,7 +94,7 @@ def handle_key(key, state):
print("\nBenchmark ended by user") print("\nBenchmark ended by user")
sys.exit(0) sys.exit(0)
mcrfpy.keypressScene(handle_key) benchmark.on_key = handle_key
# Update entity positions # Update entity positions
def update_entities(ms): def update_entities(ms):

View file

@ -158,14 +158,14 @@ def run_next_scenario():
def setup_empty_scene(): def setup_empty_scene():
"""Scenario 1: Empty scene - pure engine overhead.""" """Scenario 1: Empty scene - pure engine overhead."""
mcrfpy.createScene("bench_empty") bench_empty = mcrfpy.Scene("bench_empty")
mcrfpy.setScene("bench_empty") bench_empty.activate()
def setup_static_100(): def setup_static_100():
"""Scenario 2: 100 static frames - best case for caching.""" """Scenario 2: 100 static frames - best case for caching."""
mcrfpy.createScene("bench_static") bench_static = mcrfpy.Scene("bench_static")
ui = mcrfpy.sceneUI("bench_static") ui = bench_static.children
# Create 100 frames in a 10x10 grid # Create 100 frames in a 10x10 grid
for i in range(100): for i in range(100):
@ -183,13 +183,13 @@ def setup_static_100():
ui.append(frame) ui.append(frame)
mcrfpy.setScene("bench_static") bench_static.activate()
def setup_animated_100(): def setup_animated_100():
"""Scenario 3: 100 frames all animating - worst case for caching.""" """Scenario 3: 100 frames all animating - worst case for caching."""
mcrfpy.createScene("bench_animated") bench_animated = mcrfpy.Scene("bench_animated")
ui = mcrfpy.sceneUI("bench_animated") ui = bench_animated.children
frames = [] frames = []
for i in range(100): for i in range(100):
@ -200,7 +200,7 @@ def setup_animated_100():
frames.append(frame) frames.append(frame)
ui.append(frame) ui.append(frame)
mcrfpy.setScene("bench_animated") bench_animated.activate()
# Start animations on all frames (color animation = content change) # Start animations on all frames (color animation = content change)
for i, frame in enumerate(frames): for i, frame in enumerate(frames):
@ -212,8 +212,8 @@ def setup_animated_100():
def setup_mixed_100(): def setup_mixed_100():
"""Scenario 4: 100 frames, only 10 animating - realistic case.""" """Scenario 4: 100 frames, only 10 animating - realistic case."""
mcrfpy.createScene("bench_mixed") bench_mixed = mcrfpy.Scene("bench_mixed")
ui = mcrfpy.sceneUI("bench_mixed") ui = bench_mixed.children
frames = [] frames = []
for i in range(100): for i in range(100):
@ -224,7 +224,7 @@ def setup_mixed_100():
frames.append(frame) frames.append(frame)
ui.append(frame) ui.append(frame)
mcrfpy.setScene("bench_mixed") bench_mixed.activate()
# Animate only 10 frames (every 10th) # Animate only 10 frames (every 10th)
for i in range(0, 100, 10): for i in range(0, 100, 10):
@ -235,8 +235,8 @@ def setup_mixed_100():
def setup_deep_hierarchy(): def setup_deep_hierarchy():
"""Scenario 5: 5 levels of nesting - test dirty flag propagation cost.""" """Scenario 5: 5 levels of nesting - test dirty flag propagation cost."""
mcrfpy.createScene("bench_deep") bench_deep = mcrfpy.Scene("bench_deep")
ui = mcrfpy.sceneUI("bench_deep") ui = bench_deep.children
# Create 10 trees, each with 5 levels of nesting # Create 10 trees, each with 5 levels of nesting
deepest_frames = [] deepest_frames = []
@ -263,7 +263,7 @@ def setup_deep_hierarchy():
if level == 4: # Deepest level if level == 4: # Deepest level
deepest_frames.append(frame) deepest_frames.append(frame)
mcrfpy.setScene("bench_deep") bench_deep.activate()
# Animate the deepest frames - tests propagation up the hierarchy # Animate the deepest frames - tests propagation up the hierarchy
for frame in deepest_frames: for frame in deepest_frames:
@ -273,8 +273,8 @@ def setup_deep_hierarchy():
def setup_grid_stress(): def setup_grid_stress():
"""Scenario 6: Large grid with entities - known performance bottleneck.""" """Scenario 6: Large grid with entities - known performance bottleneck."""
mcrfpy.createScene("bench_grid") bench_grid = mcrfpy.Scene("bench_grid")
ui = mcrfpy.sceneUI("bench_grid") ui = bench_grid.children
# Create a 50x50 grid (2500 cells) # Create a 50x50 grid (2500 cells)
grid = mcrfpy.Grid(grid_size=(50, 50), pos=(50, 50), size=(700, 700)) grid = mcrfpy.Grid(grid_size=(50, 50), pos=(50, 50), size=(700, 700))
@ -303,7 +303,7 @@ def setup_grid_stress():
except Exception as e: except Exception as e:
print(f" Note: Could not create entities: {e}") print(f" Note: Could not create entities: {e}")
mcrfpy.setScene("bench_grid") bench_grid.activate()
# ============================================================================ # ============================================================================

View file

@ -24,13 +24,14 @@ import random
# Configuration # Configuration
# Use smaller grid for denser entity distribution (more realistic visibility tests) # Use smaller grid for denser entity distribution (more realistic visibility tests)
GRID_SIZE = (100, 100) # 10,000 cells - entities will actually see each other #GRID_SIZE = (100, 100) # 10,000 cells - entities will actually see each other
GRID_SIZE = (1250, 1250)
# Full suite - may timeout on large counts due to O(n²) visibility # Full suite - may timeout on large counts due to O(n²) visibility
# ENTITY_COUNTS = [100, 500, 1000, 2500, 5000, 10000] # ENTITY_COUNTS = [100, 500, 1000, 2500, 5000, 10000]
# Extended suite to validate scalability (on 100x100 grid) # Extended suite to validate scalability (on 100x100 grid)
ENTITY_COUNTS = [100, 500, 1000, 2000, 5000] ENTITY_COUNTS = [100, 500, 1000, 5000]
QUERY_RADIUS = 15 # Smaller radius for smaller grid QUERY_RADIUS = 15 # Smaller radius for smaller grid
MOVEMENT_PERCENT = 0.10 # 10% of entities move each frame MOVEMENT_PERCENT = 0.10 # 10% of entities move each frame
N2N_SAMPLE_SIZE = 50 # Sample size for N×N visibility test N2N_SAMPLE_SIZE = 50 # Sample size for N×N visibility test
@ -44,11 +45,12 @@ def setup_grid_with_entities(n_entities):
global texture global texture
scene_name = f"bench_{n_entities}" scene_name = f"bench_{n_entities}"
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children
# Create grid - minimal rendering size since we're testing entity operations # Create grid - minimal rendering size since we're testing entity operations
grid = mcrfpy.Grid(grid_size=GRID_SIZE, pos=(0, 0), size=(100, 100)) #grid = mcrfpy.Grid(grid_size=GRID_SIZE, pos=(0, 0), size=(100, 100))
grid = mcrfpy.Grid(grid_size=GRID_SIZE, pos=(0, 0), size=(1024, 768))
ui.append(grid) ui.append(grid)
# Load texture once # Load texture once
@ -66,7 +68,7 @@ def setup_grid_with_entities(n_entities):
entity = mcrfpy.Entity((x, y), texture, 0, grid) entity = mcrfpy.Entity((x, y), texture, 0, grid)
grid.entities.append(entity) grid.entities.append(entity)
mcrfpy.setScene(scene_name) mcrfpy.current_scene = scene_name
return grid, scene_name return grid, scene_name
@ -75,8 +77,8 @@ def benchmark_creation(n_entities):
global texture global texture
scene_name = "bench_create_test" scene_name = "bench_create_test"
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children
grid = mcrfpy.Grid(grid_size=GRID_SIZE, pos=(0, 0), size=(100, 100)) grid = mcrfpy.Grid(grid_size=GRID_SIZE, pos=(0, 0), size=(100, 100))
ui.append(grid) ui.append(grid)

View file

@ -99,8 +99,8 @@ def run_next_test():
def setup_base_layer_static(): def setup_base_layer_static():
"""ColorLayer with per-cell set() calls - static after initial fill.""" """ColorLayer with per-cell set() calls - static after initial fill."""
mcrfpy.createScene("test_base_static") test_base_static = mcrfpy.Scene("test_base_static")
ui = mcrfpy.sceneUI("test_base_static") ui = test_base_static.children
grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE), grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE),
pos=(10, 10), size=(600, 600)) pos=(10, 10), size=(600, 600))
@ -112,13 +112,13 @@ def setup_base_layer_static():
for x in range(GRID_SIZE): for x in range(GRID_SIZE):
layer.set(x, y, mcrfpy.Color((x * 2) % 256, (y * 2) % 256, 128, 255)) layer.set(x, y, mcrfpy.Color((x * 2) % 256, (y * 2) % 256, 128, 255))
mcrfpy.setScene("test_base_static") test_base_static.activate()
def setup_base_layer_modified(): def setup_base_layer_modified():
"""ColorLayer with single cell modified each frame - tests dirty flag.""" """ColorLayer with single cell modified each frame - tests dirty flag."""
mcrfpy.createScene("test_base_mod") test_base_mod = mcrfpy.Scene("test_base_mod")
ui = mcrfpy.sceneUI("test_base_mod") ui = test_base_mod.children
grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE), grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE),
pos=(10, 10), size=(600, 600)) pos=(10, 10), size=(600, 600))
@ -136,14 +136,14 @@ def setup_base_layer_modified():
layer.set(x, y, mcrfpy.Color(255, 0, 0, 255)) layer.set(x, y, mcrfpy.Color(255, 0, 0, 255))
mod_counter[0] += 1 mod_counter[0] += 1
mcrfpy.setScene("test_base_mod") test_base_mod.activate()
mcrfpy.setTimer("modify", modify_cell, 1) mcrfpy.setTimer("modify", modify_cell, 1)
def setup_color_layer_static(): def setup_color_layer_static():
"""New ColorLayer with dirty flag caching - static after fill.""" """New ColorLayer with dirty flag caching - static after fill."""
mcrfpy.createScene("test_color_static") test_color_static = mcrfpy.Scene("test_color_static")
ui = mcrfpy.sceneUI("test_color_static") ui = test_color_static.children
grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE), grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE),
pos=(10, 10), size=(600, 600)) pos=(10, 10), size=(600, 600))
@ -153,13 +153,13 @@ def setup_color_layer_static():
layer = grid.add_layer("color", z_index=-1) layer = grid.add_layer("color", z_index=-1)
layer.fill(mcrfpy.Color(100, 150, 200, 128)) layer.fill(mcrfpy.Color(100, 150, 200, 128))
mcrfpy.setScene("test_color_static") test_color_static.activate()
def setup_color_layer_modified(): def setup_color_layer_modified():
"""ColorLayer with single cell modified each frame - tests dirty flag.""" """ColorLayer with single cell modified each frame - tests dirty flag."""
mcrfpy.createScene("test_color_mod") test_color_mod = mcrfpy.Scene("test_color_mod")
ui = mcrfpy.sceneUI("test_color_mod") ui = test_color_mod.children
grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE), grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE),
pos=(10, 10), size=(600, 600)) pos=(10, 10), size=(600, 600))
@ -176,14 +176,14 @@ def setup_color_layer_modified():
layer.set(x, y, mcrfpy.Color(255, 0, 0, 255)) layer.set(x, y, mcrfpy.Color(255, 0, 0, 255))
mod_counter[0] += 1 mod_counter[0] += 1
mcrfpy.setScene("test_color_mod") test_color_mod.activate()
mcrfpy.setTimer("modify", modify_cell, 1) mcrfpy.setTimer("modify", modify_cell, 1)
def setup_tile_layer_static(): def setup_tile_layer_static():
"""TileLayer with caching - static after fill.""" """TileLayer with caching - static after fill."""
mcrfpy.createScene("test_tile_static") test_tile_static = mcrfpy.Scene("test_tile_static")
ui = mcrfpy.sceneUI("test_tile_static") ui = test_tile_static.children
try: try:
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
@ -198,13 +198,13 @@ def setup_tile_layer_static():
layer = grid.add_layer("tile", z_index=-1, texture=texture) layer = grid.add_layer("tile", z_index=-1, texture=texture)
layer.fill(5) layer.fill(5)
mcrfpy.setScene("test_tile_static") test_tile_static.activate()
def setup_tile_layer_modified(): def setup_tile_layer_modified():
"""TileLayer with single cell modified each frame.""" """TileLayer with single cell modified each frame."""
mcrfpy.createScene("test_tile_mod") test_tile_mod = mcrfpy.Scene("test_tile_mod")
ui = mcrfpy.sceneUI("test_tile_mod") ui = test_tile_mod.children
try: try:
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
@ -229,14 +229,14 @@ def setup_tile_layer_modified():
layer.set(x, y, (mod_counter[0] % 20)) layer.set(x, y, (mod_counter[0] % 20))
mod_counter[0] += 1 mod_counter[0] += 1
mcrfpy.setScene("test_tile_mod") test_tile_mod.activate()
mcrfpy.setTimer("modify", modify_cell, 1) mcrfpy.setTimer("modify", modify_cell, 1)
def setup_multi_layer_static(): def setup_multi_layer_static():
"""Multiple layers (5 color, 5 tile) - all static.""" """Multiple layers (5 color, 5 tile) - all static."""
mcrfpy.createScene("test_multi_static") test_multi_static = mcrfpy.Scene("test_multi_static")
ui = mcrfpy.sceneUI("test_multi_static") ui = test_multi_static.children
try: try:
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
@ -259,13 +259,13 @@ def setup_multi_layer_static():
layer.fill(i * 4) layer.fill(i * 4)
print(f" Created {len(grid.layers)} layers") print(f" Created {len(grid.layers)} layers")
mcrfpy.setScene("test_multi_static") test_multi_static.activate()
def setup_base_vs_layer_comparison(): def setup_base_vs_layer_comparison():
"""Direct comparison: same visual using base API vs layer API.""" """Direct comparison: same visual using base API vs layer API."""
mcrfpy.createScene("test_comparison") test_comparison = mcrfpy.Scene("test_comparison")
ui = mcrfpy.sceneUI("test_comparison") ui = test_comparison.children
# Grid using ONLY the new layer system (no base layer colors) # Grid using ONLY the new layer system (no base layer colors)
grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE), grid = mcrfpy.Grid(grid_size=(GRID_SIZE, GRID_SIZE),
@ -280,7 +280,7 @@ def setup_base_vs_layer_comparison():
for x in range(GRID_SIZE): for x in range(GRID_SIZE):
layer.set(x, y, mcrfpy.Color((x * 2) % 256, (y * 2) % 256, 128, 255)) layer.set(x, y, mcrfpy.Color((x * 2) % 256, (y * 2) % 256, 128, 255))
mcrfpy.setScene("test_comparison") test_comparison.activate()
# ============================================================================ # ============================================================================

View file

@ -55,7 +55,7 @@ class StressTestRunner:
# Setup scene # Setup scene
scene_name = f"stress_{self.current_test}" scene_name = f"stress_{self.current_test}"
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
# Start benchmark # Start benchmark
mcrfpy.start_benchmark() mcrfpy.start_benchmark()
@ -67,7 +67,7 @@ class StressTestRunner:
except Exception as e: except Exception as e:
print(f" SETUP ERROR: {e}") print(f" SETUP ERROR: {e}")
mcrfpy.setScene(scene_name) mcrfpy.current_scene = scene_name
self.frames_counted = 0 self.frames_counted = 0
def end_current_test(self): def end_current_test(self):
@ -133,10 +133,10 @@ class StressTestRunner:
print("="*50) print("="*50)
print(f"Tests: {len(self.tests)}, Duration: {TEST_DURATION_MS}ms each") print(f"Tests: {len(self.tests)}, Duration: {TEST_DURATION_MS}ms each")
mcrfpy.createScene("init") init = mcrfpy.Scene("init")
ui = mcrfpy.sceneUI("init") ui = init.children
ui.append(mcrfpy.Frame(pos=(0,0), size=(10,10))) # Required for timer to fire ui.append(mcrfpy.Frame(pos=(0,0), size=(10,10))) # Required for timer to fire
mcrfpy.setScene("init") init.activate()
mcrfpy.setTimer("tick", self.tick, TIMER_INTERVAL_MS) mcrfpy.setTimer("tick", self.tick, TIMER_INTERVAL_MS)
@ -146,7 +146,7 @@ class StressTestRunner:
def test_many_frames(scene_name): def test_many_frames(scene_name):
"""1000 Frame elements""" """1000 Frame elements"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
for i in range(1000): for i in range(1000):
frame = mcrfpy.Frame( frame = mcrfpy.Frame(
pos=((i % 32) * 32, (i // 32) * 24), pos=((i % 32) * 32, (i // 32) * 24),
@ -158,7 +158,7 @@ def test_many_frames(scene_name):
def test_many_sprites(scene_name): def test_many_sprites(scene_name):
"""500 Sprite elements""" """500 Sprite elements"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
for i in range(500): for i in range(500):
sprite = mcrfpy.Sprite( sprite = mcrfpy.Sprite(
@ -173,7 +173,7 @@ def test_many_sprites(scene_name):
def test_many_captions(scene_name): def test_many_captions(scene_name):
"""500 Caption elements""" """500 Caption elements"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
for i in range(500): for i in range(500):
caption = mcrfpy.Caption( caption = mcrfpy.Caption(
text=f"Text #{i}", text=f"Text #{i}",
@ -184,7 +184,7 @@ def test_many_captions(scene_name):
def test_deep_nesting(scene_name): def test_deep_nesting(scene_name):
"""15-level nested frames""" """15-level nested frames"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
current = ui current = ui
for level in range(15): for level in range(15):
frame = mcrfpy.Frame( frame = mcrfpy.Frame(
@ -202,7 +202,7 @@ def test_deep_nesting(scene_name):
def test_large_grid(scene_name): def test_large_grid(scene_name):
"""100x100 grid with 500 entities""" """100x100 grid with 500 entities"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
grid = mcrfpy.Grid(pos=(50, 50), size=(900, 650), grid_size=(100, 100), texture=texture) grid = mcrfpy.Grid(pos=(50, 50), size=(900, 650), grid_size=(100, 100), texture=texture)
ui.append(grid) ui.append(grid)
@ -223,7 +223,7 @@ def test_large_grid(scene_name):
def test_animation_stress(scene_name): def test_animation_stress(scene_name):
"""100 frames with 200 animations""" """100 frames with 200 animations"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
for i in range(100): for i in range(100):
frame = mcrfpy.Frame( frame = mcrfpy.Frame(
pos=((i % 10) * 100 + 10, (i // 10) * 70 + 10), pos=((i % 10) * 100 + 10, (i // 10) * 70 + 10),
@ -241,7 +241,7 @@ def test_animation_stress(scene_name):
def test_static_scene(scene_name): def test_static_scene(scene_name):
"""Static game scene (ideal for caching)""" """Static game scene (ideal for caching)"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
# Background # Background
@ -270,7 +270,7 @@ def test_static_scene(scene_name):
def test_static_scene_cached(scene_name): def test_static_scene_cached(scene_name):
"""Static game scene with cache_subtree enabled (#144)""" """Static game scene with cache_subtree enabled (#144)"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
# Background with caching enabled # Background with caching enabled
@ -299,7 +299,7 @@ def test_static_scene_cached(scene_name):
def test_deep_nesting_cached(scene_name): def test_deep_nesting_cached(scene_name):
"""15-level nested frames with cache_subtree on outer frame (#144)""" """15-level nested frames with cache_subtree on outer frame (#144)"""
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
# Outer frame with caching - entire subtree cached # Outer frame with caching - entire subtree cached
outer = mcrfpy.Frame( outer = mcrfpy.Frame(

View file

@ -12,8 +12,8 @@ def run_test(runtime):
print("=" * 60) print("=" * 60)
# Create a 1000x1000 grid # Create a 1000x1000 grid
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
print("\nCreating 1000x1000 grid...") print("\nCreating 1000x1000 grid...")
@ -94,6 +94,6 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
mcrfpy.createScene("init") init = mcrfpy.Scene("init")
mcrfpy.setScene("init") init.activate()
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -19,8 +19,8 @@ def benchmark_grid_size(grid_x, grid_y):
# Create scene and grid # Create scene and grid
scene_name = f"bench_{grid_x}x{grid_y}" scene_name = f"bench_{grid_x}x{grid_y}"
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
ui = mcrfpy.sceneUI(scene_name) ui = _scene.children # TODO: Replace _scene with correct Scene object
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
@ -130,8 +130,8 @@ def main():
sys.exit(0) sys.exit(0)
# Run immediately (no timer needed for this test) # Run immediately (no timer needed for this test)
mcrfpy.createScene("init") init = mcrfpy.Scene("init")
mcrfpy.setScene("init") init.activate()
# Use a timer to let the engine initialize # Use a timer to let the engine initialize
def run_benchmark(runtime): def run_benchmark(runtime):

View file

@ -65,8 +65,8 @@ class DemoRunner:
def create_menu(self): def create_menu(self):
"""Create the main menu screen.""" """Create the main menu screen."""
mcrfpy.createScene("menu") menu = mcrfpy.Scene("menu")
ui = mcrfpy.sceneUI("menu") ui = menu.children
# Title # Title
title = mcrfpy.Caption(text="McRogueFace Demo", pos=(400, 30)) title = mcrfpy.Caption(text="McRogueFace Demo", pos=(400, 30))
@ -122,7 +122,7 @@ class DemoRunner:
sys.exit(0) sys.exit(0)
return return
screen = self.screens[self.current_index] screen = self.screens[self.current_index]
mcrfpy.setScene(screen.scene_name) mcrfpy.current_scene = screen
self.render_wait = 1 self.render_wait = 1
elif self.render_wait < 2: elif self.render_wait < 2:
# Wait additional frame # Wait additional frame
@ -157,23 +157,23 @@ class DemoRunner:
# ESC returns to menu # ESC returns to menu
elif key == "Escape": elif key == "Escape":
mcrfpy.setScene("menu") menu.activate()
# Q quits # Q quits
elif key == "Q": elif key == "Q":
sys.exit(0) sys.exit(0)
# Register keyboard handler on menu scene # Register keyboard handler on menu scene
mcrfpy.setScene("menu") menu.activate()
mcrfpy.keypressScene(handle_key) menu.on_key = handle_key
# Also register keyboard handler on all demo scenes # Also register keyboard handler on all demo scenes
for screen in self.screens: for screen in self.screens:
mcrfpy.setScene(screen.scene_name) mcrfpy.current_scene = screen
mcrfpy.keypressScene(handle_key) menu.on_key = handle_key
# Start on menu # Start on menu
mcrfpy.setScene("menu") menu.activate()
def main(): def main():
"""Main entry point.""" """Main entry point."""

View file

@ -37,10 +37,10 @@ def setup_scene():
"""Create the demo scene""" """Create the demo scene"""
global g_grid, g_patrol, g_fov_layer global g_grid, g_patrol, g_fov_layer
mcrfpy.createScene("patrol_demo") patrol_demo = mcrfpy.Scene("patrol_demo")
mcrfpy.setScene("patrol_demo") patrol_demo.activate()
ui = mcrfpy.sceneUI("patrol_demo") ui = patrol_demo.children
# Title # Title
title = mcrfpy.Caption(text="Perspective Patrol Demo", pos=(10, 10)) title = mcrfpy.Caption(text="Perspective Patrol Demo", pos=(10, 10))
@ -123,7 +123,7 @@ def setup_scene():
ui.append(status) ui.append(status)
# Set up keyboard handler # Set up keyboard handler
mcrfpy.keypressScene(on_keypress) patrol_demo.on_key = on_keypress
# Start patrol timer # Start patrol timer
mcrfpy.setTimer("patrol", patrol_step, move_timer_ms) mcrfpy.setTimer("patrol", patrol_step, move_timer_ms)
@ -173,7 +173,7 @@ def on_keypress(key, state):
else: else:
update_status("Status: Patrolling") update_status("Status: Patrolling")
elif key == "Q": elif key == "Q":
mcrfpy.setScene(None) mcrfpy.current_scene = None
def reset_vision(): def reset_vision():
"""Reset entity's discovered state to demonstrate unknown vs discovered""" """Reset entity's discovered state to demonstrate unknown vs discovered"""
@ -194,7 +194,7 @@ def reset_vision():
def update_status(text): def update_status(text):
"""Update status caption""" """Update status caption"""
ui = mcrfpy.sceneUI("patrol_demo") ui = patrol_demo.children
for element in ui: for element in ui:
if hasattr(element, 'name') and element.name == "status": if hasattr(element, 'name') and element.name == "status":
element.text = text element.text = text

View file

@ -9,7 +9,7 @@ class DemoScreen:
def __init__(self, scene_name): def __init__(self, scene_name):
self.scene_name = scene_name self.scene_name = scene_name
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
self.ui = mcrfpy.sceneUI(scene_name) self.ui = mcrfpy.sceneUI(scene_name)
def setup(self): def setup(self):

View file

@ -600,8 +600,8 @@ def create_demo_scene():
"""Create and populate the focus system demo scene.""" """Create and populate the focus system demo scene."""
# Create scene # Create scene
mcrfpy.createScene("focus_demo") focus_demo = mcrfpy.Scene("focus_demo")
ui = mcrfpy.sceneUI("focus_demo") ui = focus_demo.children
# Background # Background
bg = mcrfpy.Frame( bg = mcrfpy.Frame(
@ -752,10 +752,10 @@ def create_demo_scene():
status_text.text = "No widget focused" status_text.text = "No widget focused"
# Activate scene first (keypressScene sets handler for CURRENT scene) # Activate scene first (keypressScene sets handler for CURRENT scene)
mcrfpy.setScene("focus_demo") focus_demo.activate()
# Register key handler for the now-current scene # Register key handler for the now-current scene
mcrfpy.keypressScene(on_key) focus_demo.on_key = on_key
# Set initial focus # Set initial focus
focus_mgr.focus(0) focus_mgr.focus(0)

View file

@ -66,8 +66,8 @@ class GeometryDemoRunner:
def create_menu(self): def create_menu(self):
"""Create the main menu screen.""" """Create the main menu screen."""
mcrfpy.createScene("geo_menu") geo_menu = mcrfpy.Scene("geo_menu")
ui = mcrfpy.sceneUI("geo_menu") ui = geo_menu.children
# Screen dimensions # Screen dimensions
SCREEN_WIDTH = 1024 SCREEN_WIDTH = 1024
@ -142,7 +142,7 @@ class GeometryDemoRunner:
sys.exit(0) sys.exit(0)
return return
screen = self.screens[self.current_index] screen = self.screens[self.current_index]
mcrfpy.setScene(screen.scene_name) mcrfpy.current_scene = screen
self.render_wait = 1 self.render_wait = 1
elif self.render_wait < 3: elif self.render_wait < 3:
# Wait for animated demos to show initial state # Wait for animated demos to show initial state
@ -188,21 +188,21 @@ class GeometryDemoRunner:
elif key == "Escape": elif key == "Escape":
for screen in self.screens: for screen in self.screens:
screen.cleanup() screen.cleanup()
mcrfpy.setScene("geo_menu") geo_menu.activate()
# Q quits # Q quits
elif key == "Q": elif key == "Q":
sys.exit(0) sys.exit(0)
# Register keyboard handler on all scenes # Register keyboard handler on all scenes
mcrfpy.setScene("geo_menu") geo_menu.activate()
mcrfpy.keypressScene(handle_key) geo_menu.on_key = handle_key
for screen in self.screens: for screen in self.screens:
mcrfpy.setScene(screen.scene_name) mcrfpy.current_scene = screen
mcrfpy.keypressScene(handle_key) geo_menu.on_key = handle_key
mcrfpy.setScene("geo_menu") geo_menu.activate()
def main(): def main():

View file

@ -35,7 +35,7 @@ class GeometryDemoScreen:
def __init__(self, scene_name): def __init__(self, scene_name):
self.scene_name = scene_name self.scene_name = scene_name
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
self.ui = mcrfpy.sceneUI(scene_name) self.ui = mcrfpy.sceneUI(scene_name)
self.timers = [] # Track timer names for cleanup self.timers = [] # Track timer names for cleanup
self._timer_configs = [] # Store timer configs for restart self._timer_configs = [] # Store timer configs for restart

View file

@ -28,7 +28,7 @@ def create_map():
"""Create a map with obstacles to show pathfinding differences""" """Create a map with obstacles to show pathfinding differences"""
global grid, color_layer global grid, color_layer
mcrfpy.createScene("pathfinding_comparison") pathfinding_comparison = mcrfpy.Scene("pathfinding_comparison")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=30, grid_y=20) grid = mcrfpy.Grid(grid_x=30, grid_y=20)
@ -198,7 +198,7 @@ print("Dijkstra explores in all directions (good for multiple targets)")
create_map() create_map()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("pathfinding_comparison") ui = pathfinding_comparison.children
ui.append(grid) ui.append(grid)
# Scale and position # Scale and position
@ -230,8 +230,8 @@ legend2.fill_color = mcrfpy.Color(150, 150, 150)
ui.append(legend2) ui.append(legend2)
# Set scene and input # Set scene and input
mcrfpy.setScene("pathfinding_comparison") pathfinding_comparison.activate()
mcrfpy.keypressScene(handle_keypress) pathfinding_comparison.on_key = handle_keypress
# Show initial A* path # Show initial A* path
show_astar() show_astar()

View file

@ -7,7 +7,7 @@ import sys
print("Debug visibility...") print("Debug visibility...")
# Create scene and grid # Create scene and grid
mcrfpy.createScene("debug") debug = mcrfpy.Scene("debug")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# Initialize grid # Initialize grid

View file

@ -30,7 +30,7 @@ def create_map():
"""Create the map with entities""" """Create the map with entities"""
global grid, color_layer, entities, all_combinations global grid, color_layer, entities, all_combinations
mcrfpy.createScene("dijkstra_all") dijkstra_all = mcrfpy.Scene("dijkstra_all")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=14, grid_y=10) grid = mcrfpy.Grid(grid_x=14, grid_y=10)
@ -178,7 +178,7 @@ print()
create_map() create_map()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("dijkstra_all") ui = dijkstra_all.children
ui.append(grid) ui.append(grid)
# Scale and position # Scale and position
@ -221,8 +221,8 @@ expected.fill_color = mcrfpy.Color(255, 150, 150)
ui.append(expected) ui.append(expected)
# Set scene first, then set up input handler # Set scene first, then set up input handler
mcrfpy.setScene("dijkstra_all") dijkstra_all.activate()
mcrfpy.keypressScene(handle_keypress) dijkstra_all.on_key = handle_keypress
# Show first combination # Show first combination
show_combination(0) show_combination(0)

View file

@ -28,7 +28,7 @@ def create_map():
"""Create the map with entities""" """Create the map with entities"""
global grid, color_layer, entities global grid, color_layer, entities
mcrfpy.createScene("dijkstra_cycle") dijkstra_cycle = mcrfpy.Scene("dijkstra_cycle")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=14, grid_y=10) grid = mcrfpy.Grid(grid_x=14, grid_y=10)
@ -189,7 +189,7 @@ print()
create_map() create_map()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("dijkstra_cycle") ui = dijkstra_cycle.children
ui.append(grid) ui.append(grid)
# Scale and position # Scale and position
@ -222,8 +222,8 @@ legend.fill_color = mcrfpy.Color(150, 150, 150)
ui.append(legend) ui.append(legend)
# Show first valid path # Show first valid path
mcrfpy.setScene("dijkstra_cycle") dijkstra_cycle.activate()
mcrfpy.keypressScene(handle_keypress) dijkstra_cycle.on_key = handle_keypress
# Display initial path # Display initial path
if path_combinations: if path_combinations:

View file

@ -27,7 +27,7 @@ def create_simple_map():
"""Create a simple test map""" """Create a simple test map"""
global grid, color_layer, entities global grid, color_layer, entities
mcrfpy.createScene("dijkstra_debug") dijkstra_debug = mcrfpy.Scene("dijkstra_debug")
# Small grid for easy debugging # Small grid for easy debugging
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
@ -140,7 +140,7 @@ grid = create_simple_map()
test_path_highlighting() test_path_highlighting()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("dijkstra_debug") ui = dijkstra_debug.children
ui.append(grid) ui.append(grid)
# Position and scale # Position and scale
@ -158,8 +158,8 @@ info.fill_color = mcrfpy.Color(200, 200, 200)
ui.append(info) ui.append(info)
# Set up scene # Set up scene
mcrfpy.keypressScene(handle_keypress) dijkstra_debug.on_key = handle_keypress
mcrfpy.setScene("dijkstra_debug") dijkstra_debug.activate()
print("\nScene ready. The path should be highlighted in cyan.") print("\nScene ready. The path should be highlighted in cyan.")
print("If you don't see the path, there may be a rendering issue.") print("If you don't see the path, there may be a rendering issue.")

View file

@ -38,7 +38,7 @@ def create_map():
"""Create the interactive map with the layout specified by the user""" """Create the interactive map with the layout specified by the user"""
global grid, color_layer, entities global grid, color_layer, entities
mcrfpy.createScene("dijkstra_interactive") dijkstra_interactive = mcrfpy.Scene("dijkstra_interactive")
# Create grid - 14x10 as specified # Create grid - 14x10 as specified
grid = mcrfpy.Grid(grid_x=14, grid_y=10) grid = mcrfpy.Grid(grid_x=14, grid_y=10)
@ -194,7 +194,7 @@ print(" Q/ESC - Quit")
grid = create_map() grid = create_map()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("dijkstra_interactive") ui = dijkstra_interactive.children
ui.append(grid) ui.append(grid)
# Scale and position grid for better visibility # Scale and position grid for better visibility
@ -235,10 +235,10 @@ for i, entity in enumerate(entities):
ui.append(marker) ui.append(marker)
# Set up input handling # Set up input handling
mcrfpy.keypressScene(handle_keypress) dijkstra_interactive.on_key = handle_keypress
# Show the scene # Show the scene
mcrfpy.setScene("dijkstra_interactive") dijkstra_interactive.activate()
print("\nVisualization ready!") print("\nVisualization ready!")
print("Entities are at:") print("Entities are at:")

View file

@ -46,7 +46,7 @@ def create_map():
"""Create the interactive map with the layout specified by the user""" """Create the interactive map with the layout specified by the user"""
global grid, color_layer, entities, original_positions global grid, color_layer, entities, original_positions
mcrfpy.createScene("dijkstra_enhanced") dijkstra_enhanced = mcrfpy.Scene("dijkstra_enhanced")
# Create grid - 14x10 as specified # Create grid - 14x10 as specified
grid = mcrfpy.Grid(grid_x=14, grid_y=10) grid = mcrfpy.Grid(grid_x=14, grid_y=10)
@ -286,7 +286,7 @@ print(" Q/ESC - Quit")
grid = create_map() grid = create_map()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("dijkstra_enhanced") ui = dijkstra_enhanced.children
ui.append(grid) ui.append(grid)
# Scale and position grid for better visibility # Scale and position grid for better visibility
@ -332,13 +332,13 @@ for i, entity in enumerate(entities):
ui.append(marker) ui.append(marker)
# Set up input handling # Set up input handling
mcrfpy.keypressScene(handle_keypress) dijkstra_enhanced.on_key = handle_keypress
# Set up animation timer (60 FPS) # Set up animation timer (60 FPS)
mcrfpy.setTimer("animation", update_animation, 16) mcrfpy.setTimer("animation", update_animation, 16)
# Show the scene # Show the scene
mcrfpy.setScene("dijkstra_enhanced") dijkstra_enhanced.activate()
print("\nVisualization ready!") print("\nVisualization ready!")
print("Entities are at:") print("Entities are at:")

View file

@ -12,7 +12,7 @@ import sys
def create_test_map(): def create_test_map():
"""Create a test map with obstacles""" """Create a test map with obstacles"""
mcrfpy.createScene("dijkstra_test") dijkstra_test = mcrfpy.Scene("dijkstra_test")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=20, grid_y=12) grid = mcrfpy.Grid(grid_x=20, grid_y=12)
@ -120,7 +120,7 @@ print("Creating Dijkstra pathfinding test...")
grid, entities = create_test_map() grid, entities = create_test_map()
# Set up UI # Set up UI
ui = mcrfpy.sceneUI("dijkstra_test") ui = dijkstra_test.children
ui.append(grid) ui.append(grid)
# Position and scale grid # Position and scale grid
@ -138,7 +138,7 @@ legend.fill_color = mcrfpy.Color(180, 180, 180)
ui.append(legend) ui.append(legend)
# Set scene # Set scene
mcrfpy.setScene("dijkstra_test") dijkstra_test.activate()
# Run test after scene loads # Run test after scene loads
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -15,7 +15,7 @@ import mcrfpy
import sys import sys
# Create scene and grid # Create scene and grid
mcrfpy.createScene("visibility_demo") visibility_demo = mcrfpy.Scene("visibility_demo")
grid = mcrfpy.Grid(grid_x=30, grid_y=20) grid = mcrfpy.Grid(grid_x=30, grid_y=20)
grid.fill_color = mcrfpy.Color(20, 20, 30) # Dark background grid.fill_color = mcrfpy.Color(20, 20, 30) # Dark background
@ -77,7 +77,7 @@ current_perspective = -1
perspective_names = ["Omniscient", "Player", "Enemy"] perspective_names = ["Omniscient", "Player", "Enemy"]
# UI Setup # UI Setup
ui = mcrfpy.sceneUI("visibility_demo") ui = visibility_demo.children
ui.append(grid) ui.append(grid)
grid.position = (50, 100) grid.position = (50, 100)
grid.size = (900, 600) # 30*30, 20*30 grid.size = (900, 600) # 30*30, 20*30
@ -187,10 +187,10 @@ def handle_keys(key, state):
update_info() update_info()
# Set scene first # Set scene first
mcrfpy.setScene("visibility_demo") visibility_demo.activate()
# Register key handler (operates on current scene) # Register key handler (operates on current scene)
mcrfpy.keypressScene(handle_keys) visibility_demo.on_key = handle_keys
print("Interactive Visibility Demo") print("Interactive Visibility Demo")
print("===========================") print("===========================")

View file

@ -6,7 +6,7 @@ import sys
# Create scene and grid # Create scene and grid
print("Creating scene...") print("Creating scene...")
mcrfpy.createScene("vis_test") vis_test = mcrfpy.Scene("vis_test")
print("Creating grid...") print("Creating grid...")
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
@ -33,7 +33,7 @@ entity.update_visibility()
# Set up UI # Set up UI
print("Setting up UI...") print("Setting up UI...")
ui = mcrfpy.sceneUI("vis_test") ui = vis_test.children
ui.append(grid) ui.append(grid)
grid.position = (50, 50) grid.position = (50, 50)
grid.size = (300, 300) grid.size = (300, 300)
@ -44,6 +44,6 @@ grid.perspective = -1 # Omniscient
print(f"Perspective set to: {grid.perspective}") print(f"Perspective set to: {grid.perspective}")
print("Setting scene...") print("Setting scene...")
mcrfpy.setScene("vis_test") vis_test.activate()
print("Ready!") print("Ready!")

View file

@ -7,7 +7,7 @@ import sys
print("Simple visibility test...") print("Simple visibility test...")
# Create scene and grid # Create scene and grid
mcrfpy.createScene("simple") simple = mcrfpy.Scene("simple")
print("Scene created") print("Scene created")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)

View file

@ -14,8 +14,8 @@ def timer_that_raises(runtime):
raise ValueError("Intentional test exception") raise ValueError("Intentional test exception")
# Create a test scene # Create a test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule the timer - it will fire after 50ms # Schedule the timer - it will fire after 50ms
mcrfpy.setTimer("raise_exception", timer_that_raises, 50) mcrfpy.setTimer("raise_exception", timer_that_raises, 50)

View file

@ -181,8 +181,8 @@ if __name__ == "__main__":
print("Issue #123: Grid Sub-grid Chunk System Test") print("Issue #123: Grid Sub-grid Chunk System Test")
print("=" * 60) print("=" * 60)
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Run tests after scene is active # Run tests after scene is active
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -20,8 +20,8 @@ def run_test(runtime):
print("=" * 60) print("=" * 60)
# Create a test grid # Create a test grid
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
grid = mcrfpy.Grid(pos=(0,0), size=(400,300), grid_size=(50, 50), texture=texture) grid = mcrfpy.Grid(pos=(0,0), size=(400,300), grid_size=(50, 50), texture=texture)
@ -109,6 +109,6 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Initialize and run # Initialize and run
mcrfpy.createScene("init") init = mcrfpy.Scene("init")
mcrfpy.setScene("init") init.activate()
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -17,8 +17,8 @@ def run_test(runtime):
print("=" * 60) print("=" * 60)
# Create test scene # Create test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
# Create grid with explicit empty layers (#150 migration) # Create grid with explicit empty layers (#150 migration)
@ -188,6 +188,6 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Initialize and run # Initialize and run
mcrfpy.createScene("init") init = mcrfpy.Scene("init")
mcrfpy.setScene("init") init.activate()
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -20,14 +20,14 @@ def run_test(runtime):
print("=" * 60) print("=" * 60)
# Create test scene # Create test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_ice.png", 16, 16)
# Create grid with larger size for performance testing # Create grid with larger size for performance testing
grid = mcrfpy.Grid(pos=(50, 50), size=(500, 400), grid_size=(50, 40), texture=texture) grid = mcrfpy.Grid(pos=(50, 50), size=(500, 400), grid_size=(50, 40), texture=texture)
ui.append(grid) ui.append(grid)
mcrfpy.setScene("test") test.activate()
print("\n--- Test 1: Layer creation (starts dirty) ---") print("\n--- Test 1: Layer creation (starts dirty) ---")
color_layer = grid.add_layer("color", z_index=-1) color_layer = grid.add_layer("color", z_index=-1)
@ -106,7 +106,7 @@ def run_test(runtime):
# First render will be slow (cache miss) # First render will be slow (cache miss)
start = time.time() start = time.time()
mcrfpy.setScene("test") # Force render test.activate() # Force render
first_render = time.time() - start first_render = time.time() - start
print(f" First render (cache build): {first_render*1000:.2f}ms") print(f" First render (cache build): {first_render*1000:.2f}ms")
@ -152,6 +152,6 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Initialize and run # Initialize and run
mcrfpy.createScene("init") init = mcrfpy.Scene("init")
mcrfpy.setScene("init") init.activate()
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -15,7 +15,7 @@ print(f"Current working directory: {os.getcwd()}")
print(f"Script location: {__file__}") print(f"Script location: {__file__}")
# Create a simple scene to verify everything is working # Create a simple scene to verify everything is working
mcrfpy.createScene("issue37_test") issue37_test = mcrfpy.Scene("issue37_test")
print("PASS: Issue #37 - Script loading working correctly") print("PASS: Issue #37 - Script loading working correctly")
sys.exit(0) sys.exit(0)

View file

@ -27,7 +27,7 @@ def test_script_loading():
test_script = """ test_script = """
import mcrfpy import mcrfpy
print("TEST SCRIPT LOADED SUCCESSFULLY") print("TEST SCRIPT LOADED SUCCESSFULLY")
mcrfpy.createScene("test_scene") test_scene = mcrfpy.Scene("test_scene")
""" """
# Save the original game.py # Save the original game.py

View file

@ -81,8 +81,8 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Set up the test scene # Set up the test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test to run after game loop starts # Schedule test to run after game loop starts
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -163,8 +163,8 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Set up the test scene # Set up the test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test to run after game loop starts # Schedule test to run after game loop starts
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -217,8 +217,8 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Set up the test scene # Set up the test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test to run after game loop starts # Schedule test to run after game loop starts
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -21,7 +21,7 @@ def run_test(runtime):
grid.h = 300 grid.h = 300
# Add to scene # Add to scene
scene_ui = mcrfpy.sceneUI("test") scene_ui = test.children
scene_ui.append(grid) scene_ui.append(grid)
# Test accessing grid points # Test accessing grid points
@ -60,8 +60,8 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Create and set scene # Create and set scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test # Schedule test
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -45,7 +45,7 @@ def test_rendertexture_resize():
"""Test RenderTexture behavior with various grid sizes""" """Test RenderTexture behavior with various grid sizes"""
print("=== Testing UIGrid RenderTexture Resize (Issue #9) ===\n") print("=== Testing UIGrid RenderTexture Resize (Issue #9) ===\n")
scene_ui = mcrfpy.sceneUI("test") scene_ui = test.children
# Test 1: Small grid (should work fine) # Test 1: Small grid (should work fine)
print("--- Test 1: Small Grid (400x300) ---") print("--- Test 1: Small Grid (400x300) ---")
@ -222,8 +222,8 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Set up the test scene # Set up the test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test to run after game loop starts # Schedule test to run after game loop starts
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -20,7 +20,7 @@ def run_test(runtime):
grid.h = 200 grid.h = 200
# Add grid to scene # Add grid to scene
scene_ui = mcrfpy.sceneUI("test") scene_ui = test.children
scene_ui.append(grid) scene_ui.append(grid)
# Take initial screenshot # Take initial screenshot
@ -82,8 +82,8 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Set up the test scene # Set up the test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test to run after game loop starts # Schedule test to run after game loop starts
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -78,6 +78,6 @@ def run_test(runtime):
sys.exit(0) sys.exit(0)
# Set up scene and run # Set up scene and run
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -46,9 +46,9 @@ def run_automation_tests():
print("=== Setting Up Test Scene ===") print("=== Setting Up Test Scene ===")
# Create scene with visible content # Create scene with visible content
mcrfpy.createScene("timer_test_scene") timer_test_scene = mcrfpy.Scene("timer_test_scene")
mcrfpy.setScene("timer_test_scene") timer_test_scene.activate()
ui = mcrfpy.sceneUI("timer_test_scene") ui = timer_test_scene.children
# Add a bright red frame that should be visible # Add a bright red frame that should be visible
frame = mcrfpy.Frame(pos=(100, 100), size=(400, 300), frame = mcrfpy.Frame(pos=(100, 100), size=(400, 300),

View file

@ -9,7 +9,7 @@ def test_createScene():
for scene_name in test_scenes: for scene_name in test_scenes:
try: try:
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
print(f"✓ Created scene: {scene_name}") print(f"✓ Created scene: {scene_name}")
except Exception as e: except Exception as e:
print(f"✗ Failed to create scene {scene_name}: {e}") print(f"✗ Failed to create scene {scene_name}: {e}")
@ -17,8 +17,8 @@ def test_createScene():
# Try to set scene to verify it was created # Try to set scene to verify it was created
try: try:
mcrfpy.setScene("test_scene1") test_scene1.activate() # Note: ensure scene was created
current = mcrfpy.currentScene() current = (mcrfpy.current_scene.name if mcrfpy.current_scene else None)
if current == "test_scene1": if current == "test_scene1":
print("✓ Scene switching works correctly") print("✓ Scene switching works correctly")
else: else:

View file

@ -7,7 +7,7 @@ print("Starting setScene/currentScene test...")
# Create test scenes first # Create test scenes first
scenes = ["scene_A", "scene_B", "scene_C"] scenes = ["scene_A", "scene_B", "scene_C"]
for scene in scenes: for scene in scenes:
mcrfpy.createScene(scene) _scene = mcrfpy.Scene(scene)
print(f"Created scene: {scene}") print(f"Created scene: {scene}")
results = [] results = []
@ -15,8 +15,8 @@ results = []
# Test switching between scenes # Test switching between scenes
for scene in scenes: for scene in scenes:
try: try:
mcrfpy.setScene(scene) mcrfpy.current_scene = scene
current = mcrfpy.currentScene() current = (mcrfpy.current_scene.name if mcrfpy.current_scene else None)
if current == scene: if current == scene:
results.append(f"✓ setScene/currentScene works for '{scene}'") results.append(f"✓ setScene/currentScene works for '{scene}'")
else: else:
@ -25,9 +25,9 @@ for scene in scenes:
results.append(f"✗ Error with scene '{scene}': {e}") results.append(f"✗ Error with scene '{scene}': {e}")
# Test invalid scene - it should not change the current scene # Test invalid scene - it should not change the current scene
current_before = mcrfpy.currentScene() current_before = (mcrfpy.current_scene.name if mcrfpy.current_scene else None)
mcrfpy.setScene("nonexistent_scene") nonexistent_scene.activate() # Note: ensure scene was created
current_after = mcrfpy.currentScene() current_after = (mcrfpy.current_scene.name if mcrfpy.current_scene else None)
if current_before == current_after: if current_before == current_after:
results.append(f"✓ setScene correctly ignores nonexistent scene (stayed on '{current_after}')") results.append(f"✓ setScene correctly ignores nonexistent scene (stayed on '{current_after}')")
else: else:

View file

@ -6,8 +6,8 @@ import os
import sys import sys
# Create a simple scene # Create a simple scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Take a screenshot immediately # Take a screenshot immediately
try: try:

View file

@ -128,8 +128,8 @@ mcrfpy.log_benchmark("Test log message")
print("Logged test message") print("Logged test message")
# Set up scene and run for a few frames # Set up scene and run for a few frames
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test completion after ~100ms (to capture some frames) # Schedule test completion after ~100ms (to capture some frames)
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)

View file

@ -12,8 +12,8 @@ def test_uicollection_find():
print("Testing UICollection.find()...") print("Testing UICollection.find()...")
# Create a scene with named elements # Create a scene with named elements
mcrfpy.createScene("test_find") test_find = mcrfpy.Scene("test_find")
ui = mcrfpy.sceneUI("test_find") ui = test_find.children
# Create frames with names # Create frames with names
frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
@ -94,8 +94,8 @@ def test_entitycollection_find():
print("\nTesting EntityCollection.find()...") print("\nTesting EntityCollection.find()...")
# Create a grid with entities # Create a grid with entities
mcrfpy.createScene("test_entity_find") test_entity_find = mcrfpy.Scene("test_entity_find")
ui = mcrfpy.sceneUI("test_entity_find") ui = test_entity_find.children
grid = mcrfpy.Grid(grid_size=(10, 10), pos=(0, 0), size=(400, 400)) grid = mcrfpy.Grid(grid_size=(10, 10), pos=(0, 0), size=(400, 400))
ui.append(grid) ui.append(grid)
@ -149,8 +149,8 @@ def test_recursive_find():
"""Test recursive find in nested Frame children.""" """Test recursive find in nested Frame children."""
print("\nTesting recursive find in nested frames...") print("\nTesting recursive find in nested frames...")
mcrfpy.createScene("test_recursive") test_recursive = mcrfpy.Scene("test_recursive")
ui = mcrfpy.sceneUI("test_recursive") ui = test_recursive.children
# Create nested structure # Create nested structure
parent = mcrfpy.Frame(pos=(0, 0), size=(400, 400)) parent = mcrfpy.Frame(pos=(0, 0), size=(400, 400))

View file

@ -12,8 +12,8 @@ def test_uicollection_remove():
"""Test UICollection.remove() takes a value, not an index.""" """Test UICollection.remove() takes a value, not an index."""
print("Testing UICollection.remove()...") print("Testing UICollection.remove()...")
mcrfpy.createScene("test_remove") test_remove = mcrfpy.Scene("test_remove")
ui = mcrfpy.sceneUI("test_remove") ui = test_remove.children
frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
frame2 = mcrfpy.Frame(pos=(100, 0), size=(100, 100)) frame2 = mcrfpy.Frame(pos=(100, 0), size=(100, 100))
@ -58,8 +58,8 @@ def test_uicollection_pop():
"""Test UICollection.pop() removes and returns element at index.""" """Test UICollection.pop() removes and returns element at index."""
print("\nTesting UICollection.pop()...") print("\nTesting UICollection.pop()...")
mcrfpy.createScene("test_pop") test_pop = mcrfpy.Scene("test_pop")
ui = mcrfpy.sceneUI("test_pop") ui = test_pop.children
frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
frame1.name = "first" frame1.name = "first"
@ -108,8 +108,8 @@ def test_uicollection_insert():
"""Test UICollection.insert() inserts at given index.""" """Test UICollection.insert() inserts at given index."""
print("\nTesting UICollection.insert()...") print("\nTesting UICollection.insert()...")
mcrfpy.createScene("test_insert") test_insert = mcrfpy.Scene("test_insert")
ui = mcrfpy.sceneUI("test_insert") ui = test_insert.children
frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
frame1.name = "first" frame1.name = "first"
@ -160,8 +160,8 @@ def test_entitycollection_pop_insert():
"""Test EntityCollection.pop() and insert().""" """Test EntityCollection.pop() and insert()."""
print("\nTesting EntityCollection.pop() and insert()...") print("\nTesting EntityCollection.pop() and insert()...")
mcrfpy.createScene("test_entity_pop") test_entity_pop = mcrfpy.Scene("test_entity_pop")
ui = mcrfpy.sceneUI("test_entity_pop") ui = test_entity_pop.children
grid = mcrfpy.Grid(grid_size=(10, 10), pos=(0, 0), size=(400, 400)) grid = mcrfpy.Grid(grid_size=(10, 10), pos=(0, 0), size=(400, 400))
ui.append(grid) ui.append(grid)
@ -204,8 +204,8 @@ def test_index_and_count():
"""Test index() and count() methods.""" """Test index() and count() methods."""
print("\nTesting index() and count()...") print("\nTesting index() and count()...")
mcrfpy.createScene("test_index_count") test_index_count = mcrfpy.Scene("test_index_count")
ui = mcrfpy.sceneUI("test_index_count") ui = test_index_count.children
frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
frame2 = mcrfpy.Frame(pos=(100, 0), size=(100, 100)) frame2 = mcrfpy.Frame(pos=(100, 0), size=(100, 100))

View file

@ -7,7 +7,7 @@ import sys
print("Debugging empty paths...") print("Debugging empty paths...")
# Create scene and grid # Create scene and grid
mcrfpy.createScene("debug") debug = mcrfpy.Scene("debug")
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
# Initialize grid - all walkable # Initialize grid - all walkable
@ -72,9 +72,9 @@ def timer_cb(dt):
sys.exit(0) sys.exit(0)
# Quick UI setup # Quick UI setup
ui = mcrfpy.sceneUI("debug") ui = debug.children
ui.append(grid) ui.append(grid)
mcrfpy.setScene("debug") debug.activate()
mcrfpy.setTimer("exit", timer_cb, 100) mcrfpy.setTimer("exit", timer_cb, 100)
print("\nStarting timer...") print("\nStarting timer...")

View file

@ -11,13 +11,13 @@ print(f"Automation available: {'automation' in dir(mcrfpy)}")
# Try to understand the scene state # Try to understand the scene state
print("\nCreating and checking scene...") print("\nCreating and checking scene...")
mcrfpy.createScene("debug_scene") debug_scene = mcrfpy.Scene("debug_scene")
mcrfpy.setScene("debug_scene") debug_scene.activate()
current = mcrfpy.currentScene() current = (mcrfpy.current_scene.name if mcrfpy.current_scene else None)
print(f"Current scene: {current}") print(f"Current scene: {current}")
# Get UI collection # Get UI collection
ui = mcrfpy.sceneUI("debug_scene") ui = debug_scene.children
print(f"UI collection type: {type(ui)}") print(f"UI collection type: {type(ui)}")
print(f"Initial UI elements: {len(ui)}") print(f"Initial UI elements: {len(ui)}")

View file

@ -32,8 +32,8 @@ def create_caption(x, y, text, font_size=16, text_color=WHITE, outline_color=BLA
def create_caption_example(): def create_caption_example():
"""Create a scene showing Caption UI element examples""" """Create a scene showing Caption UI element examples"""
mcrfpy.createScene("caption_example") caption_example = mcrfpy.Scene("caption_example")
ui = mcrfpy.sceneUI("caption_example") ui = caption_example.children
# Background frame # Background frame
bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR) bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
@ -61,8 +61,8 @@ def create_caption_example():
def create_sprite_example(): def create_sprite_example():
"""Create a scene showing Sprite UI element examples""" """Create a scene showing Sprite UI element examples"""
mcrfpy.createScene("sprite_example") sprite_example = mcrfpy.Scene("sprite_example")
ui = mcrfpy.sceneUI("sprite_example") ui = sprite_example.children
# Background frame # Background frame
bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR) bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
@ -122,8 +122,8 @@ def create_sprite_example():
def create_frame_example(): def create_frame_example():
"""Create a scene showing Frame UI element examples""" """Create a scene showing Frame UI element examples"""
mcrfpy.createScene("frame_example") frame_example = mcrfpy.Scene("frame_example")
ui = mcrfpy.sceneUI("frame_example") ui = frame_example.children
# Background # Background
bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=SHADOW_COLOR) bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=SHADOW_COLOR)
@ -184,8 +184,8 @@ def create_frame_example():
def create_grid_example(): def create_grid_example():
"""Create a scene showing Grid UI element examples""" """Create a scene showing Grid UI element examples"""
mcrfpy.createScene("grid_example") grid_example = mcrfpy.Scene("grid_example")
ui = mcrfpy.sceneUI("grid_example") ui = grid_example.children
# Background # Background
bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR) bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
@ -234,8 +234,8 @@ def create_grid_example():
def create_entity_example(): def create_entity_example():
"""Create a scene showing Entity examples in a Grid""" """Create a scene showing Entity examples in a Grid"""
mcrfpy.createScene("entity_example") entity_example = mcrfpy.Scene("entity_example")
ui = mcrfpy.sceneUI("entity_example") ui = entity_example.children
# Background # Background
bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR) bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
@ -310,8 +310,8 @@ def create_entity_example():
def create_combined_example(): def create_combined_example():
"""Create a scene showing all UI elements combined""" """Create a scene showing all UI elements combined"""
mcrfpy.createScene("combined_example") combined_example = mcrfpy.Scene("combined_example")
ui = mcrfpy.sceneUI("combined_example") ui = combined_example.children
# Background # Background
bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=SHADOW_COLOR) bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=SHADOW_COLOR)
@ -417,7 +417,7 @@ def take_screenshots(runtime):
scene_name, filename = screenshots[current_screenshot] scene_name, filename = screenshots[current_screenshot]
# Switch to the scene # Switch to the scene
mcrfpy.setScene(scene_name) mcrfpy.current_scene = scene_name
# Take screenshot after a short delay to ensure rendering # Take screenshot after a short delay to ensure rendering
def capture(): def capture():
@ -435,7 +435,7 @@ def take_screenshots(runtime):
mcrfpy.setTimer("capture", lambda r: capture(), 100) mcrfpy.setTimer("capture", lambda r: capture(), 100)
# Start with the first scene # Start with the first scene
mcrfpy.setScene("caption_example") caption_example.activate()
# Start the screenshot process # Start the screenshot process
print(f"\nStarting screenshot capture of {len(screenshots)} scenes...") print(f"\nStarting screenshot capture of {len(screenshots)} scenes...")

View file

@ -16,7 +16,7 @@ def capture_grid(runtime):
sys.exit(0) sys.exit(0)
# Create scene # Create scene
mcrfpy.createScene("grid") grid = mcrfpy.Scene("grid")
# Load texture # Load texture
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
@ -92,7 +92,7 @@ for i, label in enumerate(labels):
l.font = mcrfpy.default_font l.font = mcrfpy.default_font
l.font_size = 10 l.font_size = 10
l.fill_color = mcrfpy.Color(255, 255, 255) l.fill_color = mcrfpy.Color(255, 255, 255)
mcrfpy.sceneUI("grid").append(l) grid.children.append(l)
# Add info caption # Add info caption
info = mcrfpy.Caption(pos=(100, 680), text="Grid supports tiles and entities. Entities can move independently of the tile grid.") info = mcrfpy.Caption(pos=(100, 680), text="Grid supports tiles and entities. Entities can move independently of the tile grid.")
@ -101,7 +101,7 @@ info.font_size = 14
info.fill_color = mcrfpy.Color(200, 200, 200) info.fill_color = mcrfpy.Color(200, 200, 200)
# Add all elements to scene # Add all elements to scene
ui = mcrfpy.sceneUI("grid") ui = grid.children
ui.append(title) ui.append(title)
ui.append(grid) ui.append(grid)
ui.append(palette_label) ui.append(palette_label)
@ -109,7 +109,7 @@ ui.append(palette)
ui.append(info) ui.append(info)
# Switch to scene # Switch to scene
mcrfpy.setScene("grid") grid.activate()
# Set timer to capture after rendering starts # Set timer to capture after rendering starts
mcrfpy.setTimer("capture", capture_grid, 100) mcrfpy.setTimer("capture", capture_grid, 100)

View file

@ -16,7 +16,7 @@ def capture_sprites(runtime):
sys.exit(0) sys.exit(0)
# Create scene # Create scene
mcrfpy.createScene("sprites") sprites = mcrfpy.Scene("sprites")
# Load texture # Load texture
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
@ -129,10 +129,10 @@ for i, scale in enumerate([1.0, 2.0, 3.0, 4.0]):
s.texture = texture s.texture = texture
s.sprite_index = 84 # Player s.sprite_index = 84 # Player
s.scale = (scale, scale) s.scale = (scale, scale)
mcrfpy.sceneUI("sprites").append(s) sprites.children.append(s)
# Add all elements to scene # Add all elements to scene
ui = mcrfpy.sceneUI("sprites") ui = sprites.children
ui.append(frame) ui.append(frame)
ui.append(title) ui.append(title)
ui.append(player_label) ui.append(player_label)
@ -154,7 +154,7 @@ ui.append(armor)
ui.append(scale_label) ui.append(scale_label)
# Switch to scene # Switch to scene
mcrfpy.setScene("sprites") sprites.activate()
# Set timer to capture after rendering starts # Set timer to capture after rendering starts
mcrfpy.setTimer("capture", capture_sprites, 100) mcrfpy.setTimer("capture", capture_sprites, 100)

View file

@ -11,15 +11,15 @@ def test_keypress_validation(timer_name):
print("Testing keypressScene() validation...") print("Testing keypressScene() validation...")
# Create test scene # Create test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Test 1: Valid callable (function) # Test 1: Valid callable (function)
def key_handler(key, action): def key_handler(key, action):
print(f"Key pressed: {key}, action: {action}") print(f"Key pressed: {key}, action: {action}")
try: try:
mcrfpy.keypressScene(key_handler) test.on_key = key_handler
print("✓ Accepted valid function as key handler") print("✓ Accepted valid function as key handler")
except Exception as e: except Exception as e:
print(f"✗ Rejected valid function: {e}") print(f"✗ Rejected valid function: {e}")
@ -27,7 +27,7 @@ def test_keypress_validation(timer_name):
# Test 2: Valid callable (lambda) # Test 2: Valid callable (lambda)
try: try:
mcrfpy.keypressScene(lambda k, a: None) test.on_key = lambda k, a: None
print("✓ Accepted valid lambda as key handler") print("✓ Accepted valid lambda as key handler")
except Exception as e: except Exception as e:
print(f"✗ Rejected valid lambda: {e}") print(f"✗ Rejected valid lambda: {e}")
@ -35,7 +35,7 @@ def test_keypress_validation(timer_name):
# Test 3: Invalid - string # Test 3: Invalid - string
try: try:
mcrfpy.keypressScene("not callable") test.on_key = "not callable"
print("✗ Should have rejected string as key handler") print("✗ Should have rejected string as key handler")
except TypeError as e: except TypeError as e:
print(f"✓ Correctly rejected string: {e}") print(f"✓ Correctly rejected string: {e}")
@ -45,7 +45,7 @@ def test_keypress_validation(timer_name):
# Test 4: Invalid - number # Test 4: Invalid - number
try: try:
mcrfpy.keypressScene(42) test.on_key = 42
print("✗ Should have rejected number as key handler") print("✗ Should have rejected number as key handler")
except TypeError as e: except TypeError as e:
print(f"✓ Correctly rejected number: {e}") print(f"✓ Correctly rejected number: {e}")
@ -55,7 +55,7 @@ def test_keypress_validation(timer_name):
# Test 5: Invalid - None # Test 5: Invalid - None
try: try:
mcrfpy.keypressScene(None) test.on_key = None
print("✗ Should have rejected None as key handler") print("✗ Should have rejected None as key handler")
except TypeError as e: except TypeError as e:
print(f"✓ Correctly rejected None: {e}") print(f"✓ Correctly rejected None: {e}")
@ -65,7 +65,7 @@ def test_keypress_validation(timer_name):
# Test 6: Invalid - dict # Test 6: Invalid - dict
try: try:
mcrfpy.keypressScene({"not": "callable"}) test.on_key = {"not": "callable"}
print("✗ Should have rejected dict as key handler") print("✗ Should have rejected dict as key handler")
except TypeError as e: except TypeError as e:
print(f"✓ Correctly rejected dict: {e}") print(f"✓ Correctly rejected dict: {e}")
@ -79,7 +79,7 @@ def test_keypress_validation(timer_name):
print(f"Class handler: {key}, {action}") print(f"Class handler: {key}, {action}")
try: try:
mcrfpy.keypressScene(KeyHandler()) test.on_key = KeyHandler()
print("✓ Accepted valid callable class instance") print("✓ Accepted valid callable class instance")
except Exception as e: except Exception as e:
print(f"✗ Rejected valid callable class: {e}") print(f"✗ Rejected valid callable class: {e}")

View file

@ -10,9 +10,9 @@ def test_transparency_workaround():
print("=== Screenshot Transparency Fix Test ===\n") print("=== Screenshot Transparency Fix Test ===\n")
# Create a scene # Create a scene
mcrfpy.createScene("opaque_test") opaque_test = mcrfpy.Scene("opaque_test")
mcrfpy.setScene("opaque_test") opaque_test.activate()
ui = mcrfpy.sceneUI("opaque_test") ui = opaque_test.children
# WORKAROUND: Create a full-window opaque frame as the first element # WORKAROUND: Create a full-window opaque frame as the first element
# This acts as an opaque background since the scene clears with transparent # This acts as an opaque background since the scene clears with transparent

View file

@ -28,7 +28,7 @@ def take_screenshot(runtime):
sys.exit(0) sys.exit(0)
# Create minimal scene # Create minimal scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
# Add a visible element # Add a visible element
caption = mcrfpy.Caption(pos=(100, 100), text="Screenshot Test") caption = mcrfpy.Caption(pos=(100, 100), text="Screenshot Test")
@ -36,8 +36,8 @@ caption.font = mcrfpy.default_font
caption.fill_color = mcrfpy.Color(255, 255, 255) caption.fill_color = mcrfpy.Color(255, 255, 255)
caption.font_size = 24 caption.font_size = 24
mcrfpy.sceneUI("test").append(caption) test.children.append(caption)
mcrfpy.setScene("test") test.activate()
# Use timer to ensure rendering has started # Use timer to ensure rendering has started
print("Setting timer...") print("Setting timer...")

View file

@ -25,9 +25,9 @@ def take_screenshot_and_exit():
# Set up a simple scene # Set up a simple scene
print("Creating test scene...") print("Creating test scene...")
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
ui = mcrfpy.sceneUI("test") ui = test.children
# Add visible content - a white frame on default background # Add visible content - a white frame on default background
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200), frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200),

View file

@ -17,12 +17,12 @@ def my_callback(anim, target):
def setup_and_run(): def setup_and_run():
"""Set up scene and run animation with callback""" """Set up scene and run animation with callback"""
# Create scene # Create scene
mcrfpy.createScene("callback_demo") callback_demo = mcrfpy.Scene("callback_demo")
mcrfpy.setScene("callback_demo") callback_demo.activate()
# Create a frame to animate # Create a frame to animate
frame = mcrfpy.Frame((100, 100), (200, 200), fill_color=(255, 0, 0)) frame = mcrfpy.Frame((100, 100), (200, 200), fill_color=(255, 0, 0))
ui = mcrfpy.sceneUI("callback_demo") ui = callback_demo.children
ui.append(frame) ui.append(frame)
# Create animation with callback # Create animation with callback
@ -42,7 +42,7 @@ def check_result(runtime):
# Test 2: Animation without callback # Test 2: Animation without callback
print("\nTesting animation without callback...") print("\nTesting animation without callback...")
ui = mcrfpy.sceneUI("callback_demo") ui = callback_demo.children
frame = ui[0] frame = ui[0]
anim2 = mcrfpy.Animation("y", 300.0, 0.5, "linear") anim2 = mcrfpy.Animation("y", 300.0, 0.5, "linear")

View file

@ -67,7 +67,7 @@ class PathAnimator:
self._animate_next_step() self._animate_next_step()
# Create test scene # Create test scene
mcrfpy.createScene("chain_test") chain_test = mcrfpy.Scene("chain_test")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=20, grid_y=15) grid = mcrfpy.Grid(grid_x=20, grid_y=15)
@ -97,7 +97,7 @@ enemy = mcrfpy.Entity((17, 12), grid=grid)
enemy.sprite_index = 69 # E enemy.sprite_index = 69 # E
# UI setup # UI setup
ui = mcrfpy.sceneUI("chain_test") ui = chain_test.children
ui.append(grid) ui.append(grid)
grid.position = (100, 100) grid.position = (100, 100)
grid.size = (600, 450) grid.size = (600, 450)
@ -201,8 +201,8 @@ def handle_input(key, state):
info.text = "Positions reset" info.text = "Positions reset"
# Setup # Setup
mcrfpy.setScene("chain_test") chain_test.activate()
mcrfpy.keypressScene(handle_input) chain_test.on_key = handle_input
# Camera update timer # Camera update timer
mcrfpy.setTimer("cam_update", update_camera, 100) mcrfpy.setTimer("cam_update", update_camera, 100)

View file

@ -59,7 +59,7 @@ class AnimationTracker:
mcrfpy.delTimer(f"check_{self.name}") mcrfpy.delTimer(f"check_{self.name}")
# Create test scene # Create test scene
mcrfpy.createScene("anim_debug") anim_debug = mcrfpy.Scene("anim_debug")
# Simple grid # Simple grid
grid = mcrfpy.Grid(grid_x=15, grid_y=10) grid = mcrfpy.Grid(grid_x=15, grid_y=10)
@ -75,7 +75,7 @@ entity = mcrfpy.Entity((5, 5), grid=grid)
entity.sprite_index = 64 entity.sprite_index = 64
# UI # UI
ui = mcrfpy.sceneUI("anim_debug") ui = anim_debug.children
ui.append(grid) ui.append(grid)
grid.position = (100, 150) grid.position = (100, 150)
grid.size = (450, 300) grid.size = (450, 300)
@ -215,8 +215,8 @@ def handle_input(key, state):
print("Reset entity and cleared log") print("Reset entity and cleared log")
# Setup # Setup
mcrfpy.setScene("anim_debug") anim_debug.activate()
mcrfpy.keypressScene(handle_input) anim_debug.on_key = handle_input
mcrfpy.setTimer("update", update_display, 100) mcrfpy.setTimer("update", update_display, 100)
print("Animation Debug Tool") print("Animation Debug Tool")

View file

@ -6,11 +6,11 @@ Test Animation creation without timer
import mcrfpy import mcrfpy
print("1. Creating scene...") print("1. Creating scene...")
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
print("2. Getting UI...") print("2. Getting UI...")
ui = mcrfpy.sceneUI("test") ui = test.children
print("3. Creating frame...") print("3. Creating frame...")
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))

View file

@ -30,7 +30,7 @@ def test_result(name, passed, details=""):
def test_1_replace_mode_default(): def test_1_replace_mode_default():
"""Test that REPLACE mode is the default and works correctly""" """Test that REPLACE mode is the default and works correctly"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -55,7 +55,7 @@ def test_1_replace_mode_default():
def test_2_replace_mode_explicit(): def test_2_replace_mode_explicit():
"""Test explicit REPLACE mode""" """Test explicit REPLACE mode"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -73,7 +73,7 @@ def test_2_replace_mode_explicit():
def test_3_queue_mode(): def test_3_queue_mode():
"""Test QUEUE mode - animation should be queued""" """Test QUEUE mode - animation should be queued"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -95,7 +95,7 @@ def test_3_queue_mode():
def test_4_error_mode(): def test_4_error_mode():
"""Test ERROR mode - should raise RuntimeError""" """Test ERROR mode - should raise RuntimeError"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -120,7 +120,7 @@ def test_4_error_mode():
def test_5_invalid_conflict_mode(): def test_5_invalid_conflict_mode():
"""Test that invalid conflict_mode raises ValueError""" """Test that invalid conflict_mode raises ValueError"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -140,7 +140,7 @@ def test_5_invalid_conflict_mode():
def test_6_different_properties_no_conflict(): def test_6_different_properties_no_conflict():
"""Test that different properties can animate simultaneously""" """Test that different properties can animate simultaneously"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -164,7 +164,7 @@ def test_6_different_properties_no_conflict():
def test_7_different_targets_no_conflict(): def test_7_different_targets_no_conflict():
"""Test that same property on different targets doesn't conflict""" """Test that same property on different targets doesn't conflict"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame1 = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame1 = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
frame2 = mcrfpy.Frame(pos=(200, 200), size=(100, 100)) frame2 = mcrfpy.Frame(pos=(200, 200), size=(100, 100))
ui.append(frame1) ui.append(frame1)
@ -187,7 +187,7 @@ def test_7_different_targets_no_conflict():
def test_8_replace_completes_old(): def test_8_replace_completes_old():
"""Test that REPLACE mode completes the old animation's value""" """Test that REPLACE mode completes the old animation's value"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) frame = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -242,8 +242,8 @@ def run_all_tests(runtime):
# Setup and run # Setup and run
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Start tests after a brief delay to allow scene to initialize # Start tests after a brief delay to allow scene to initialize
mcrfpy.setTimer("start", run_all_tests, 100) mcrfpy.setTimer("start", run_all_tests, 100)

View file

@ -29,7 +29,7 @@ def test_result(name, passed, details=""):
def test_1_basic_animation(): def test_1_basic_animation():
"""Test that basic animations still work""" """Test that basic animations still work"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -48,7 +48,7 @@ def test_1_basic_animation():
def test_2_remove_animated_object(): def test_2_remove_animated_object():
"""Test removing object with active animation""" """Test removing object with active animation"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -72,7 +72,7 @@ def test_2_remove_animated_object():
def test_3_complete_animation(): def test_3_complete_animation():
"""Test completing animation immediately""" """Test completing animation immediately"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -97,7 +97,7 @@ def test_4_multiple_animations_timer():
def create_animations(runtime): def create_animations(runtime):
nonlocal success nonlocal success
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
frame = mcrfpy.Frame(pos=(200, 200), size=(100, 100)) frame = mcrfpy.Frame(pos=(200, 200), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -113,7 +113,7 @@ def test_4_multiple_animations_timer():
mcrfpy.setTimer("exit", lambda t: None, 100) mcrfpy.setTimer("exit", lambda t: None, 100)
# Clear scene # Clear scene
ui = mcrfpy.sceneUI("test") ui = test.children
while len(ui) > 0: while len(ui) > 0:
ui.remove(len(ui) - 1) ui.remove(len(ui) - 1)
@ -124,10 +124,10 @@ def test_5_scene_cleanup():
"""Test that changing scenes cleans up animations""" """Test that changing scenes cleans up animations"""
try: try:
# Create a second scene # Create a second scene
mcrfpy.createScene("test2") test2 = mcrfpy.Scene("test2")
# Add animated objects to first scene # Add animated objects to first scene
ui = mcrfpy.sceneUI("test") ui = test.children
for i in range(5): for i in range(5):
frame = mcrfpy.Frame(pos=(50 * i, 100), size=(40, 40)) frame = mcrfpy.Frame(pos=(50 * i, 100), size=(40, 40))
ui.append(frame) ui.append(frame)
@ -135,10 +135,10 @@ def test_5_scene_cleanup():
anim.start(frame) anim.start(frame)
# Switch scenes (animations should become invalid) # Switch scenes (animations should become invalid)
mcrfpy.setScene("test2") test2.activate()
# Switch back # Switch back
mcrfpy.setScene("test") test.activate()
test_result("Scene change cleanup", True) test_result("Scene change cleanup", True)
except Exception as e: except Exception as e:
@ -147,7 +147,7 @@ def test_5_scene_cleanup():
def test_6_animation_after_clear(): def test_6_animation_after_clear():
"""Test animations after clearing UI""" """Test animations after clearing UI"""
try: try:
ui = mcrfpy.sceneUI("test") ui = test.children
# Create and animate # Create and animate
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
@ -202,11 +202,11 @@ def print_results(runtime):
mcrfpy.setTimer("exit", lambda t: sys.exit(0 if tests_failed == 0 else 1), 500) mcrfpy.setTimer("exit", lambda t: sys.exit(0 if tests_failed == 0 else 1), 500)
# Setup and run # Setup and run
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Add a background # Add a background
ui = mcrfpy.sceneUI("test") ui = test.children
bg = mcrfpy.Frame(pos=(0, 0), size=(1024, 768)) bg = mcrfpy.Frame(pos=(0, 0), size=(1024, 768))
bg.fill_color = mcrfpy.Color(20, 20, 30) bg.fill_color = mcrfpy.Color(20, 20, 30)
ui.append(bg) ui.append(bg)

View file

@ -10,7 +10,7 @@ def clear_and_recreate(runtime):
"""Clear UI and recreate - mimics demo switching""" """Clear UI and recreate - mimics demo switching"""
print(f"\nTimer called at {runtime}") print(f"\nTimer called at {runtime}")
ui = mcrfpy.sceneUI("test") ui = test.children
# Remove all but first 2 items (like clear_demo_objects) # Remove all but first 2 items (like clear_demo_objects)
print(f"Scene has {len(ui)} elements before clearing") print(f"Scene has {len(ui)} elements before clearing")
@ -37,9 +37,9 @@ def clear_and_recreate(runtime):
# Create initial scene # Create initial scene
print("Creating scene...") print("Creating scene...")
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
ui = mcrfpy.sceneUI("test") ui = test.children
# Add title and subtitle (to preserve during clearing) # Add title and subtitle (to preserve during clearing)
title = mcrfpy.Caption(pos=(400, 20), text="Test Title") title = mcrfpy.Caption(pos=(400, 20), text="Test Title")

View file

@ -14,7 +14,7 @@ print("A* Pathfinding Test")
print("==================") print("==================")
# Create scene and grid # Create scene and grid
mcrfpy.createScene("astar_test") astar_test = mcrfpy.Scene("astar_test")
grid = mcrfpy.Grid(grid_x=20, grid_y=20) grid = mcrfpy.Grid(grid_x=20, grid_y=20)
# Initialize grid - all walkable # Initialize grid - all walkable
@ -119,12 +119,12 @@ def visual_test(runtime):
sys.exit(0) sys.exit(0)
# Set up minimal UI for visual test # Set up minimal UI for visual test
ui = mcrfpy.sceneUI("astar_test") ui = astar_test.children
ui.append(grid) ui.append(grid)
grid.position = (50, 50) grid.position = (50, 50)
grid.size = (400, 400) grid.size = (400, 400)
mcrfpy.setScene("astar_test") astar_test.activate()
mcrfpy.setTimer("visual", visual_test, 100) mcrfpy.setTimer("visual", visual_test, 100)
print("\nStarting visual test...") print("\nStarting visual test...")

View file

@ -6,6 +6,6 @@ import sys
print("Testing audio cleanup...") print("Testing audio cleanup...")
# Create a scene and immediately exit # Create a scene and immediately exit
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
print("Exiting now...") print("Exiting now...")
sys.exit(0) sys.exit(0)

View file

@ -8,8 +8,8 @@ def test_bounds_property():
"""Test bounds property returns correct local bounds""" """Test bounds property returns correct local bounds"""
print("Testing bounds property...") print("Testing bounds property...")
mcrfpy.createScene("test_bounds") test_bounds = mcrfpy.Scene("test_bounds")
ui = mcrfpy.sceneUI("test_bounds") ui = test_bounds.children
frame = mcrfpy.Frame(pos=(50, 75), size=(200, 150)) frame = mcrfpy.Frame(pos=(50, 75), size=(200, 150))
ui.append(frame) ui.append(frame)
@ -27,8 +27,8 @@ def test_global_bounds_no_parent():
"""Test global_bounds equals bounds when no parent""" """Test global_bounds equals bounds when no parent"""
print("Testing global_bounds without parent...") print("Testing global_bounds without parent...")
mcrfpy.createScene("test_gb1") test_gb1 = mcrfpy.Scene("test_gb1")
ui = mcrfpy.sceneUI("test_gb1") ui = test_gb1.children
frame = mcrfpy.Frame(pos=(100, 100), size=(50, 50)) frame = mcrfpy.Frame(pos=(100, 100), size=(50, 50))
ui.append(frame) ui.append(frame)
@ -45,8 +45,8 @@ def test_global_bounds_with_parent():
"""Test global_bounds correctly adds parent offset""" """Test global_bounds correctly adds parent offset"""
print("Testing global_bounds with parent...") print("Testing global_bounds with parent...")
mcrfpy.createScene("test_gb2") test_gb2 = mcrfpy.Scene("test_gb2")
ui = mcrfpy.sceneUI("test_gb2") ui = test_gb2.children
parent = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) parent = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
ui.append(parent) ui.append(parent)
@ -67,8 +67,8 @@ def test_global_bounds_nested():
"""Test global_bounds with deeply nested hierarchy""" """Test global_bounds with deeply nested hierarchy"""
print("Testing global_bounds with nested hierarchy...") print("Testing global_bounds with nested hierarchy...")
mcrfpy.createScene("test_gb3") test_gb3 = mcrfpy.Scene("test_gb3")
ui = mcrfpy.sceneUI("test_gb3") ui = test_gb3.children
# Create 3-level hierarchy # Create 3-level hierarchy
root = mcrfpy.Frame(pos=(10, 10), size=(300, 300)) root = mcrfpy.Frame(pos=(10, 10), size=(300, 300))
@ -92,8 +92,8 @@ def test_all_drawable_types_have_bounds():
"""Test that all drawable types have bounds properties""" """Test that all drawable types have bounds properties"""
print("Testing bounds on all drawable types...") print("Testing bounds on all drawable types...")
mcrfpy.createScene("test_types") test_types = mcrfpy.Scene("test_types")
ui = mcrfpy.sceneUI("test_types") ui = test_types.children
types_to_test = [ types_to_test = [
("Frame", mcrfpy.Frame(pos=(0, 0), size=(100, 100))), ("Frame", mcrfpy.Frame(pos=(0, 0), size=(100, 100))),

View file

@ -37,7 +37,7 @@ print()
print("Test 3: Function creating mcrfpy objects") print("Test 3: Function creating mcrfpy objects")
def create_scene(): def create_scene():
try: try:
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
print(" ✓ Created scene") print(" ✓ Created scene")
# Now try range # Now try range
@ -69,7 +69,7 @@ print()
print("Test 4: Exact failing pattern") print("Test 4: Exact failing pattern")
def failing_pattern(): def failing_pattern():
try: try:
mcrfpy.createScene("failing_test") failing_test = mcrfpy.Scene("failing_test")
grid = mcrfpy.Grid(grid_x=14, grid_y=10) grid = mcrfpy.Grid(grid_x=14, grid_y=10)
# This is where it fails in the demos # This is where it fails in the demos

View file

@ -7,7 +7,7 @@ print("Testing Color fix...")
# Test 1: Create grid # Test 1: Create grid
try: try:
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
print("✓ Grid created") print("✓ Grid created")
except Exception as e: except Exception as e:

View file

@ -178,5 +178,5 @@ def test_color_helpers(runtime):
sys.exit(0 if all_pass else 1) sys.exit(0 if all_pass else 1)
# Run test # Run test
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setTimer("test", test_color_helpers, 100) mcrfpy.setTimer("test", test_color_helpers, 100)

View file

@ -9,7 +9,7 @@ print("=" * 50)
# Test 1: Basic Color assignment # Test 1: Basic Color assignment
print("Test 1: Color assignment in grid") print("Test 1: Color assignment in grid")
try: try:
mcrfpy.createScene("test1") test1 = mcrfpy.Scene("test1")
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
# Assign color to a cell # Assign color to a cell
@ -27,7 +27,7 @@ except Exception as e:
# Test 2: Multiple color assignments # Test 2: Multiple color assignments
print("\nTest 2: Multiple color assignments") print("\nTest 2: Multiple color assignments")
try: try:
mcrfpy.createScene("test2") test2 = mcrfpy.Scene("test2")
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
# Multiple properties including color # Multiple properties including color
@ -54,7 +54,7 @@ print("\nTest 3: Exact pattern from dijkstra_demo_final.py")
try: try:
# Recreate the exact function # Recreate the exact function
def create_demo(): def create_demo():
mcrfpy.createScene("dijkstra_demo") dijkstra_demo = mcrfpy.Scene("dijkstra_demo")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)

View file

@ -9,7 +9,7 @@ print("=" * 50)
# Test 1: Setting color with tuple (old way) # Test 1: Setting color with tuple (old way)
print("Test 1: Setting color with tuple") print("Test 1: Setting color with tuple")
try: try:
mcrfpy.createScene("test1") test1 = mcrfpy.Scene("test1")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# This should work (PyArg_ParseTuple expects tuple) # This should work (PyArg_ParseTuple expects tuple)
@ -26,7 +26,7 @@ print()
# Test 2: Setting color with Color object (the bug) # Test 2: Setting color with Color object (the bug)
print("Test 2: Setting color with Color object") print("Test 2: Setting color with Color object")
try: try:
mcrfpy.createScene("test2") test2 = mcrfpy.Scene("test2")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# This will fail in PyArg_ParseTuple but not report it # This will fail in PyArg_ParseTuple but not report it
@ -45,7 +45,7 @@ print()
# Test 3: Multiple color assignments # Test 3: Multiple color assignments
print("Test 3: Multiple Color assignments (reproducing original bug)") print("Test 3: Multiple Color assignments (reproducing original bug)")
try: try:
mcrfpy.createScene("test3") test3 = mcrfpy.Scene("test3")
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
# Do multiple color assignments # Do multiple color assignments

View file

@ -16,7 +16,7 @@ import sys
def create_test_grid(): def create_test_grid():
"""Create a test grid with obstacles""" """Create a test grid with obstacles"""
mcrfpy.createScene("dijkstra_test") dijkstra_test = mcrfpy.Scene("dijkstra_test")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=20, grid_y=20) grid = mcrfpy.Grid(grid_x=20, grid_y=20)
@ -212,7 +212,7 @@ print("=====================================")
# Set up scene # Set up scene
grid = create_test_grid() grid = create_test_grid()
ui = mcrfpy.sceneUI("dijkstra_test") ui = dijkstra_test.children
ui.append(grid) ui.append(grid)
# Add title # Add title
@ -224,4 +224,4 @@ ui.append(title)
mcrfpy.setTimer("test", run_test, 100) mcrfpy.setTimer("test", run_test, 100)
# Show scene # Show scene
mcrfpy.setScene("dijkstra_test") dijkstra_test.activate()

View file

@ -6,8 +6,8 @@ Test if AnimationManager crashes with no animations
import mcrfpy import mcrfpy
print("Creating empty scene...") print("Creating empty scene...")
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
print("Scene created, no animations added") print("Scene created, no animations added")
print("Starting game loop in 100ms...") print("Starting game loop in 100ms...")

View file

@ -11,7 +11,7 @@ import mcrfpy
import sys import sys
# Create scene # Create scene
mcrfpy.createScene("test_anim") test_anim = mcrfpy.Scene("test_anim")
# Create simple grid # Create simple grid
grid = mcrfpy.Grid(grid_x=15, grid_y=15) grid = mcrfpy.Grid(grid_x=15, grid_y=15)
@ -42,7 +42,7 @@ entity = mcrfpy.Entity((5, 5), grid=grid)
entity.sprite_index = 64 # @ entity.sprite_index = 64 # @
# UI setup # UI setup
ui = mcrfpy.sceneUI("test_anim") ui = test_anim.children
ui.append(grid) ui.append(grid)
grid.position = (100, 100) grid.position = (100, 100)
grid.size = (450, 450) # 15 * 30 pixels per cell grid.size = (450, 450) # 15 * 30 pixels per cell
@ -182,8 +182,8 @@ def handle_input(key, state):
print(f"Reset entity to ({entity.x}, {entity.y})") print(f"Reset entity to ({entity.x}, {entity.y})")
# Set scene # Set scene
mcrfpy.setScene("test_anim") test_anim.activate()
mcrfpy.keypressScene(handle_input) test_anim.on_key = handle_input
# Start position update timer # Start position update timer
mcrfpy.setTimer("update_pos", update_position_display, 200) mcrfpy.setTimer("update_pos", update_position_display, 200)

View file

@ -12,11 +12,11 @@ def test_remove_by_entity():
# Create a test scene and grid # Create a test scene and grid
scene_name = "test_entity_remove" scene_name = "test_entity_remove"
mcrfpy.createScene(scene_name) _scene = mcrfpy.Scene(scene_name)
# Create a grid (entities need a grid) # Create a grid (entities need a grid)
grid = mcrfpy.Grid() # Default 2x2 grid is fine for testing grid = mcrfpy.Grid() # Default 2x2 grid is fine for testing
mcrfpy.sceneUI(scene_name).append(grid) _scene.children.append(grid) # TODO: Replace _scene with correct Scene object
# Get the entity collection # Get the entity collection
entities = grid.entities entities = grid.entities

View file

@ -2,8 +2,8 @@
import mcrfpy import mcrfpy
# Create scene and grid # Create scene and grid
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
# Create texture and grid # Create texture and grid
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16) texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)

View file

@ -27,7 +27,7 @@ print("UIEntity::setProperty for 'x' and 'y' properties.")
print() print()
# Create scene to demonstrate # Create scene to demonstrate
mcrfpy.createScene("fix_demo") fix_demo = mcrfpy.Scene("fix_demo")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=15, grid_y=10) grid = mcrfpy.Grid(grid_x=15, grid_y=10)
@ -49,7 +49,7 @@ entity = mcrfpy.Entity((2, 2), grid=grid)
entity.sprite_index = 64 # @ entity.sprite_index = 64 # @
# UI # UI
ui = mcrfpy.sceneUI("fix_demo") ui = fix_demo.children
ui.append(grid) ui.append(grid)
grid.position = (100, 150) grid.position = (100, 150)
grid.size = (450, 300) grid.size = (450, 300)
@ -111,8 +111,8 @@ def handle_input(key, state):
status.text = "Reset entity to (2,2)" status.text = "Reset entity to (2,2)"
# Setup # Setup
mcrfpy.setScene("fix_demo") fix_demo.activate()
mcrfpy.keypressScene(handle_input) fix_demo.on_key = handle_input
mcrfpy.setTimer("update", update_display, 100) mcrfpy.setTimer("update", update_display, 100)
print("Ready to demonstrate the issue.") print("Ready to demonstrate the issue.")

View file

@ -7,7 +7,7 @@ print("Testing Entity.path_to() method...")
print("=" * 50) print("=" * 50)
# Create scene and grid # Create scene and grid
mcrfpy.createScene("path_test") path_test = mcrfpy.Scene("path_test")
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
# Set up a simple map with some walls # Set up a simple map with some walls

View file

@ -19,7 +19,7 @@ except Exception as e:
# Test 2: Entity in grid with walls blocking path # Test 2: Entity in grid with walls blocking path
print("\nTest 2: Completely blocked path") print("\nTest 2: Completely blocked path")
mcrfpy.createScene("blocked_test") blocked_test = mcrfpy.Scene("blocked_test")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# Make all tiles walkable first # Make all tiles walkable first

View file

@ -12,7 +12,7 @@ FLOOR_COLOR = mcrfpy.Color(200, 200, 220)
def test_exact_pattern(): def test_exact_pattern():
"""Exact code from dijkstra_demo_final.py""" """Exact code from dijkstra_demo_final.py"""
mcrfpy.createScene("dijkstra_demo") dijkstra_demo = mcrfpy.Scene("dijkstra_demo")
# Create grid # Create grid
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
@ -48,7 +48,7 @@ print("Test 2: Breaking it down step by step...")
# Step 1: Scene and grid # Step 1: Scene and grid
try: try:
mcrfpy.createScene("test2") test2 = mcrfpy.Scene("test2")
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
print(" ✓ Step 1: Scene and grid created") print(" ✓ Step 1: Scene and grid created")
except Exception as e: except Exception as e:

View file

@ -22,7 +22,7 @@ def take_second_screenshot(runtime):
def animate_frames(runtime): def animate_frames(runtime):
"""Animate frames to demonstrate clipping""" """Animate frames to demonstrate clipping"""
mcrfpy.delTimer("animate") mcrfpy.delTimer("animate")
scene = mcrfpy.sceneUI("test") scene = test.children
# Move child frames # Move child frames
parent1 = scene[0] parent1 = scene[0]
parent2 = scene[1] parent2 = scene[1]
@ -36,7 +36,7 @@ def test_clipping(runtime):
print("Testing UIFrame clipping functionality...") print("Testing UIFrame clipping functionality...")
scene = mcrfpy.sceneUI("test") scene = test.children
# Create parent frame with clipping disabled (default) # Create parent frame with clipping disabled (default)
parent1 = Frame(pos=(50, 50), size=(200, 150), parent1 = Frame(pos=(50, 50), size=(200, 150),
@ -119,15 +119,15 @@ def test_clipping(runtime):
def handle_keypress(key, modifiers): def handle_keypress(key, modifiers):
if key == "c": if key == "c":
scene = mcrfpy.sceneUI("test") scene = test.children
parent1 = scene[0] parent1 = scene[0]
parent1.clip_children = not parent1.clip_children parent1.clip_children = not parent1.clip_children
print(f"Toggled parent1 clip_children to: {parent1.clip_children}") print(f"Toggled parent1 clip_children to: {parent1.clip_children}")
# Main execution # Main execution
print("Creating test scene...") print("Creating test scene...")
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
mcrfpy.keypressScene(handle_keypress) test.on_key = handle_keypress
mcrfpy.setTimer("test_clipping", test_clipping, 100) mcrfpy.setTimer("test_clipping", test_clipping, 100)
print("Test scheduled, running...") print("Test scheduled, running...")

View file

@ -12,7 +12,7 @@ def test_nested_clipping(runtime):
print("Testing advanced UIFrame clipping with nested frames...") print("Testing advanced UIFrame clipping with nested frames...")
# Create test scene # Create test scene
scene = mcrfpy.sceneUI("test") scene = test.children
# Create outer frame with clipping enabled # Create outer frame with clipping enabled
outer = Frame(pos=(50, 50), size=(400, 300), outer = Frame(pos=(50, 50), size=(400, 300),
@ -94,8 +94,8 @@ def test_nested_clipping(runtime):
# Main execution # Main execution
print("Creating advanced test scene...") print("Creating advanced test scene...")
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule the test # Schedule the test
mcrfpy.setTimer("test_nested_clipping", test_nested_clipping, 100) mcrfpy.setTimer("test_nested_clipping", test_nested_clipping, 100)

View file

@ -9,8 +9,8 @@ def test_grid_background():
print("Testing Grid Background Color...") print("Testing Grid Background Color...")
# Create a test scene # Create a test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
# Create a grid with default background # Create a grid with default background
grid = mcrfpy.Grid(pos=(50, 50), size=(400, 300), grid_size=(20, 15)) grid = mcrfpy.Grid(pos=(50, 50), size=(400, 300), grid_size=(20, 15))
@ -40,7 +40,7 @@ def test_grid_background():
info_frame.children.append(color_display) info_frame.children.append(color_display)
# Activate the scene # Activate the scene
mcrfpy.setScene("test") test.activate()
def run_tests(dt): def run_tests(dt):
"""Run background color tests""" """Run background color tests"""

View file

@ -9,8 +9,8 @@ def test_properties():
"""Test grid cell event properties exist and work""" """Test grid cell event properties exist and work"""
print("Testing grid cell event properties...") print("Testing grid cell event properties...")
mcrfpy.createScene("test_props") test_props = mcrfpy.Scene("test_props")
ui = mcrfpy.sceneUI("test_props") ui = test_props.children
grid = mcrfpy.Grid(grid_size=(5, 5), pos=(100, 100), size=(200, 200)) grid = mcrfpy.Grid(grid_size=(5, 5), pos=(100, 100), size=(200, 200))
ui.append(grid) ui.append(grid)
@ -45,9 +45,9 @@ def test_cell_hover():
"""Test cell hover events""" """Test cell hover events"""
print("Testing cell hover events...") print("Testing cell hover events...")
mcrfpy.createScene("test_hover") test_hover = mcrfpy.Scene("test_hover")
ui = mcrfpy.sceneUI("test_hover") ui = test_hover.children
mcrfpy.setScene("test_hover") test_hover.activate()
grid = mcrfpy.Grid(grid_size=(5, 5), pos=(100, 100), size=(200, 200)) grid = mcrfpy.Grid(grid_size=(5, 5), pos=(100, 100), size=(200, 200))
ui.append(grid) ui.append(grid)
@ -89,9 +89,9 @@ def test_cell_click():
"""Test cell click events""" """Test cell click events"""
print("Testing cell click events...") print("Testing cell click events...")
mcrfpy.createScene("test_click") test_click = mcrfpy.Scene("test_click")
ui = mcrfpy.sceneUI("test_click") ui = test_click.children
mcrfpy.setScene("test_click") test_click.activate()
grid = mcrfpy.Grid(grid_size=(5, 5), pos=(100, 100), size=(200, 200)) grid = mcrfpy.Grid(grid_size=(5, 5), pos=(100, 100), size=(200, 200))
ui.append(grid) ui.append(grid)

View file

@ -18,7 +18,7 @@ def run_test(runtime):
mcrfpy.delTimer("test") mcrfpy.delTimer("test")
# Get the scene UI # Get the scene UI
ui = mcrfpy.sceneUI("test") ui = test.children
# Create a grid without texture (uses default 16x16 cells) # Create a grid without texture (uses default 16x16 cells)
print("Test 1: Creating Grid with children...") print("Test 1: Creating Grid with children...")
@ -122,8 +122,8 @@ def run_test(runtime):
mcrfpy.setTimer("screenshot", take_screenshot, 100) mcrfpy.setTimer("screenshot", take_screenshot, 100)
# Create a test scene # Create a test scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
# Schedule test to run after game loop starts # Schedule test to run after game loop starts
mcrfpy.setTimer("test", run_test, 50) mcrfpy.setTimer("test", run_test, 50)

View file

@ -8,7 +8,7 @@ print("Testing grid creation...")
# First create scene # First create scene
try: try:
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
print("✓ Created scene") print("✓ Created scene")
except Exception as e: except Exception as e:
print(f"✗ Failed to create scene: {e}") print(f"✗ Failed to create scene: {e}")

View file

@ -8,7 +8,7 @@ import traceback
print("Testing grid creation with detailed error...") print("Testing grid creation with detailed error...")
# Create scene first # Create scene first
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
# Try to create grid and get detailed error # Try to create grid and get detailed error
try: try:

View file

@ -9,7 +9,7 @@ print("=" * 50)
# Test 1: Basic grid.at() calls # Test 1: Basic grid.at() calls
print("Test 1: Basic grid.at() calls") print("Test 1: Basic grid.at() calls")
try: try:
mcrfpy.createScene("test1") test1 = mcrfpy.Scene("test1")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# Single call # Single call
@ -32,7 +32,7 @@ print()
# Test 2: Grid.at() in a loop # Test 2: Grid.at() in a loop
print("Test 2: Grid.at() in simple loop") print("Test 2: Grid.at() in simple loop")
try: try:
mcrfpy.createScene("test2") test2 = mcrfpy.Scene("test2")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
for i in range(3): for i in range(3):
@ -50,7 +50,7 @@ print()
# Test 3: Nested loops with grid.at() # Test 3: Nested loops with grid.at()
print("Test 3: Nested loops with grid.at()") print("Test 3: Nested loops with grid.at()")
try: try:
mcrfpy.createScene("test3") test3 = mcrfpy.Scene("test3")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
for y in range(3): for y in range(3):
@ -68,7 +68,7 @@ print()
# Test 4: Exact pattern from failing code # Test 4: Exact pattern from failing code
print("Test 4: Exact failing pattern") print("Test 4: Exact failing pattern")
try: try:
mcrfpy.createScene("test4") test4 = mcrfpy.Scene("test4")
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
grid.fill_color = mcrfpy.Color(0, 0, 0) grid.fill_color = mcrfpy.Color(0, 0, 0)
@ -109,7 +109,7 @@ print()
# Test 5: Is it related to the number of grid.at() calls? # Test 5: Is it related to the number of grid.at() calls?
print("Test 5: Testing grid.at() call limits") print("Test 5: Testing grid.at() call limits")
try: try:
mcrfpy.createScene("test5") test5 = mcrfpy.Scene("test5")
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
count = 0 count = 0

View file

@ -17,9 +17,9 @@ def run_tests():
print("=== Headless Benchmark Tests ===\n") print("=== Headless Benchmark Tests ===\n")
# Create a test scene # Create a test scene
mcrfpy.createScene("benchmark_test") benchmark_test = mcrfpy.Scene("benchmark_test")
mcrfpy.setScene("benchmark_test") benchmark_test.activate()
ui = mcrfpy.sceneUI("benchmark_test") ui = benchmark_test.children
# Add some UI elements to have something to render # Add some UI elements to have something to render
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))

View file

@ -13,9 +13,9 @@ def test_headless_click():
"""Test that clicks work in headless mode via automation API""" """Test that clicks work in headless mode via automation API"""
print("Testing headless click events...") print("Testing headless click events...")
mcrfpy.createScene("test_click") test_click = mcrfpy.Scene("test_click")
ui = mcrfpy.sceneUI("test_click") ui = test_click.children
mcrfpy.setScene("test_click") test_click.activate()
# Create a frame at known position # Create a frame at known position
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
@ -64,9 +64,9 @@ def test_click_miss():
click_count = 0 click_count = 0
click_positions = [] click_positions = []
mcrfpy.createScene("test_miss") test_miss = mcrfpy.Scene("test_miss")
ui = mcrfpy.sceneUI("test_miss") ui = test_miss.children
mcrfpy.setScene("test_miss") test_miss.activate()
# Create a frame at known position # Create a frame at known position
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100)) frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))

View file

@ -6,9 +6,9 @@ from mcrfpy import automation
import sys import sys
# Create scene # Create scene
mcrfpy.createScene("detect_test") detect_test = mcrfpy.Scene("detect_test")
ui = mcrfpy.sceneUI("detect_test") ui = detect_test.children
mcrfpy.setScene("detect_test") detect_test.activate()
# Create a frame # Create a frame
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))

View file

@ -5,9 +5,9 @@ import mcrfpy
import sys import sys
# Create scene # Create scene
mcrfpy.createScene("headless_test") headless_test = mcrfpy.Scene("headless_test")
ui = mcrfpy.sceneUI("headless_test") ui = headless_test.children
mcrfpy.setScene("headless_test") headless_test.activate()
# Create a visible indicator # Create a visible indicator
frame = mcrfpy.Frame(pos=(200, 200), size=(400, 200)) frame = mcrfpy.Frame(pos=(200, 200), size=(400, 200))

View file

@ -108,11 +108,11 @@ def test_metrics(runtime):
# Set up test scene # Set up test scene
print("Setting up metrics test scene...") print("Setting up metrics test scene...")
mcrfpy.createScene("metrics_test") metrics_test = mcrfpy.Scene("metrics_test")
mcrfpy.setScene("metrics_test") metrics_test.activate()
# Add some UI elements # Add some UI elements
ui = mcrfpy.sceneUI("metrics_test") ui = metrics_test.children
# Create various UI elements # Create various UI elements
frame1 = mcrfpy.Frame(pos=(10, 10), size=(200, 150)) frame1 = mcrfpy.Frame(pos=(10, 10), size=(200, 150))

View file

@ -15,8 +15,8 @@ def test_callback_assignment():
"""Test that on_enter and on_exit callbacks can be assigned""" """Test that on_enter and on_exit callbacks can be assigned"""
print("Testing callback assignment...") print("Testing callback assignment...")
mcrfpy.createScene("test_assign") test_assign = mcrfpy.Scene("test_assign")
ui = mcrfpy.sceneUI("test_assign") ui = test_assign.children
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
ui.append(frame) ui.append(frame)
@ -50,8 +50,8 @@ def test_hovered_property():
"""Test that hovered property exists and is initially False""" """Test that hovered property exists and is initially False"""
print("Testing hovered property...") print("Testing hovered property...")
mcrfpy.createScene("test_hovered") test_hovered = mcrfpy.Scene("test_hovered")
ui = mcrfpy.sceneUI("test_hovered") ui = test_hovered.children
frame = mcrfpy.Frame(pos=(50, 50), size=(100, 100)) frame = mcrfpy.Frame(pos=(50, 50), size=(100, 100))
ui.append(frame) ui.append(frame)
@ -77,8 +77,8 @@ def test_all_types_have_events():
"""Test that all drawable types have on_enter/on_exit properties""" """Test that all drawable types have on_enter/on_exit properties"""
print("Testing events on all drawable types...") print("Testing events on all drawable types...")
mcrfpy.createScene("test_types") test_types = mcrfpy.Scene("test_types")
ui = mcrfpy.sceneUI("test_types") ui = test_types.children
types_to_test = [ types_to_test = [
("Frame", mcrfpy.Frame(pos=(0, 0), size=(100, 100))), ("Frame", mcrfpy.Frame(pos=(0, 0), size=(100, 100))),
@ -121,9 +121,9 @@ def test_enter_exit_simulation():
enter_positions = [] enter_positions = []
exit_positions = [] exit_positions = []
mcrfpy.createScene("test_sim") test_sim = mcrfpy.Scene("test_sim")
ui = mcrfpy.sceneUI("test_sim") ui = test_sim.children
mcrfpy.setScene("test_sim") test_sim.activate()
# Create a frame at known position # Create a frame at known position
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))

View file

@ -85,7 +85,7 @@ def test_ui_constructors(runtime):
sys.exit(0) sys.exit(0)
# Create a basic scene so the game can start # Create a basic scene so the game can start
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
# Schedule the test to run after game initialization # Schedule the test to run after game initialization
mcrfpy.setTimer("test", test_ui_constructors, 100) mcrfpy.setTimer("test", test_ui_constructors, 100)

View file

@ -9,8 +9,8 @@ def test_on_move_property():
"""Test that on_move property exists and can be assigned""" """Test that on_move property exists and can be assigned"""
print("Testing on_move property...") print("Testing on_move property...")
mcrfpy.createScene("test_move_prop") test_move_prop = mcrfpy.Scene("test_move_prop")
ui = mcrfpy.sceneUI("test_move_prop") ui = test_move_prop.children
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
ui.append(frame) ui.append(frame)
@ -33,9 +33,9 @@ def test_on_move_fires():
"""Test that on_move fires when mouse moves within bounds""" """Test that on_move fires when mouse moves within bounds"""
print("Testing on_move callback firing...") print("Testing on_move callback firing...")
mcrfpy.createScene("test_move") test_move = mcrfpy.Scene("test_move")
ui = mcrfpy.sceneUI("test_move") ui = test_move.children
mcrfpy.setScene("test_move") test_move.activate()
# Create a frame at known position # Create a frame at known position
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
@ -78,9 +78,9 @@ def test_on_move_not_outside():
"""Test that on_move doesn't fire when mouse is outside bounds""" """Test that on_move doesn't fire when mouse is outside bounds"""
print("Testing on_move doesn't fire outside bounds...") print("Testing on_move doesn't fire outside bounds...")
mcrfpy.createScene("test_move_outside") test_move_outside = mcrfpy.Scene("test_move_outside")
ui = mcrfpy.sceneUI("test_move_outside") ui = test_move_outside.children
mcrfpy.setScene("test_move_outside") test_move_outside.activate()
# Frame at 100-300, 100-300 # Frame at 100-300, 100-300
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
@ -117,8 +117,8 @@ def test_all_types_have_on_move():
"""Test that all drawable types have on_move property""" """Test that all drawable types have on_move property"""
print("Testing on_move on all drawable types...") print("Testing on_move on all drawable types...")
mcrfpy.createScene("test_types") test_types = mcrfpy.Scene("test_types")
ui = mcrfpy.sceneUI("test_types") ui = test_types.children
types_to_test = [ types_to_test = [
("Frame", mcrfpy.Frame(pos=(0, 0), size=(100, 100))), ("Frame", mcrfpy.Frame(pos=(0, 0), size=(100, 100))),

View file

@ -47,7 +47,7 @@ print()
# Test 4: After creating mcrfpy objects # Test 4: After creating mcrfpy objects
print("Test 4: After creating mcrfpy scene/grid") print("Test 4: After creating mcrfpy scene/grid")
try: try:
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
walls = [] walls = []
@ -63,7 +63,7 @@ print()
# Test 5: Check line number in error # Test 5: Check line number in error
print("Test 5: Checking exact error location") print("Test 5: Checking exact error location")
def test_exact_pattern(): def test_exact_pattern():
mcrfpy.createScene("dijkstra_demo") dijkstra_demo = mcrfpy.Scene("dijkstra_demo")
grid = mcrfpy.Grid(grid_x=25, grid_y=15) grid = mcrfpy.Grid(grid_x=25, grid_y=15)
grid.fill_color = mcrfpy.Color(0, 0, 0) grid.fill_color = mcrfpy.Color(0, 0, 0)

View file

@ -13,8 +13,8 @@ def test_parent_property():
print("Testing parent property...") print("Testing parent property...")
# Create scene and get UI # Create scene and get UI
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
ui = mcrfpy.sceneUI("test") ui = test.children
# Create a parent frame # Create a parent frame
parent = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) parent = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
@ -44,8 +44,8 @@ def test_global_position():
print("Testing global_position property...") print("Testing global_position property...")
# Create scene and get UI # Create scene and get UI
mcrfpy.createScene("test2") test2 = mcrfpy.Scene("test2")
ui = mcrfpy.sceneUI("test2") ui = test2.children
# Create nested hierarchy: # Create nested hierarchy:
# root (50, 50) # root (50, 50)
@ -81,8 +81,8 @@ def test_parent_changes_on_move():
"""Test that moving child to different parent updates parent reference""" """Test that moving child to different parent updates parent reference"""
print("Testing parent changes on move...") print("Testing parent changes on move...")
mcrfpy.createScene("test3") test3 = mcrfpy.Scene("test3")
ui = mcrfpy.sceneUI("test3") ui = test3.children
parent1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100), fill_color=(255, 0, 0, 255)) parent1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100), fill_color=(255, 0, 0, 255))
parent2 = mcrfpy.Frame(pos=(200, 0), size=(100, 100), fill_color=(0, 255, 0, 255)) parent2 = mcrfpy.Frame(pos=(200, 0), size=(100, 100), fill_color=(0, 255, 0, 255))
@ -116,8 +116,8 @@ def test_remove_clears_parent():
"""Test that removing child clears parent reference""" """Test that removing child clears parent reference"""
print("Testing remove clears parent...") print("Testing remove clears parent...")
mcrfpy.createScene("test4") test4 = mcrfpy.Scene("test4")
ui = mcrfpy.sceneUI("test4") ui = test4.children
parent = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) parent = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
ui.append(parent) ui.append(parent)
@ -140,8 +140,8 @@ def test_scene_level_elements():
"""Test that scene-level elements have no parent""" """Test that scene-level elements have no parent"""
print("Testing scene-level elements...") print("Testing scene-level elements...")
mcrfpy.createScene("test5") test5 = mcrfpy.Scene("test5")
ui = mcrfpy.sceneUI("test5") ui = test5.children
frame = mcrfpy.Frame(pos=(10, 10), size=(50, 50)) frame = mcrfpy.Frame(pos=(10, 10), size=(50, 50))
ui.append(frame) ui.append(frame)
@ -160,8 +160,8 @@ def test_all_drawable_types():
"""Test parent/global_position on all drawable types""" """Test parent/global_position on all drawable types"""
print("Testing all drawable types...") print("Testing all drawable types...")
mcrfpy.createScene("test6") test6 = mcrfpy.Scene("test6")
ui = mcrfpy.sceneUI("test6") ui = test6.children
parent = mcrfpy.Frame(pos=(100, 100), size=(300, 300)) parent = mcrfpy.Frame(pos=(100, 100), size=(300, 300))
ui.append(parent) ui.append(parent)
@ -190,8 +190,8 @@ def test_parent_setter():
"""Test parent property setter (assign parent directly)""" """Test parent property setter (assign parent directly)"""
print("Testing parent setter...") print("Testing parent setter...")
mcrfpy.createScene("test7") test7 = mcrfpy.Scene("test7")
ui = mcrfpy.sceneUI("test7") ui = test7.children
# Create parent frame and child # Create parent frame and child
parent = mcrfpy.Frame(pos=(100, 100), size=(200, 200)) parent = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
@ -223,8 +223,8 @@ def test_reparenting_via_setter():
"""Test moving a child from one parent to another via setter""" """Test moving a child from one parent to another via setter"""
print("Testing reparenting via setter...") print("Testing reparenting via setter...")
mcrfpy.createScene("test8") test8 = mcrfpy.Scene("test8")
ui = mcrfpy.sceneUI("test8") ui = test8.children
parent1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100)) parent1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100))
parent2 = mcrfpy.Frame(pos=(200, 200), size=(100, 100)) parent2 = mcrfpy.Frame(pos=(200, 200), size=(100, 100))

View file

@ -8,7 +8,7 @@ print("Testing path color changes...")
print("=" * 50) print("=" * 50)
# Create scene and small grid # Create scene and small grid
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
grid = mcrfpy.Grid(grid_x=5, grid_y=5) grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# Add color layer for cell coloring # Add color layer for cell coloring
@ -75,12 +75,12 @@ def check_visual(runtime):
sys.exit(0) sys.exit(0)
# Set up minimal UI to test rendering # Set up minimal UI to test rendering
ui = mcrfpy.sceneUI("test") ui = test.children
ui.append(grid) ui.append(grid)
grid.position = (50, 50) grid.position = (50, 50)
grid.size = (250, 250) grid.size = (250, 250)
mcrfpy.setScene("test") test.activate()
mcrfpy.setTimer("check", check_visual, 500) mcrfpy.setTimer("check", check_visual, 500)
print("\nStarting render test...") print("\nStarting render test...")

View file

@ -8,7 +8,7 @@ print("Testing pathfinding integration...")
print("=" * 50) print("=" * 50)
# Create scene and grid # Create scene and grid
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
grid = mcrfpy.Grid(grid_x=10, grid_y=10) grid = mcrfpy.Grid(grid_x=10, grid_y=10)
# Initialize grid # Initialize grid

View file

@ -5,9 +5,9 @@ import mcrfpy
import sys import sys
# Create a simple scene # Create a simple scene
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setScene("test") test.activate()
ui = mcrfpy.sceneUI("test") ui = test.children
# Create a small grid # Create a small grid
grid = mcrfpy.Grid( grid = mcrfpy.Grid(

View file

@ -53,5 +53,5 @@ def test_properties(runtime):
sys.exit(0) sys.exit(0)
mcrfpy.createScene("test") test = mcrfpy.Scene("test")
mcrfpy.setTimer("test_properties", test_properties, 100) mcrfpy.setTimer("test_properties", test_properties, 100)

Some files were not shown because too many files have changed in this diff Show more