fix: Update test files to use current API patterns

Migrates test suite to current API:
- Frame(x, y, w, h) → Frame(pos=(x, y), size=(w, h))
- Caption("text", x, y) → Caption(pos=(x, y), text="text")
- caption.size → caption.font_size
- Entity(x, y, ...) → Entity((x, y), ...)
- Grid(w, h, ...) → Grid(grid_size=(w, h), ...)
- cell.color → ColorLayer system

Tests now serve as valid API usage examples.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
John McCardle 2025-12-29 19:47:48 -05:00
commit 9f481a2e4a
53 changed files with 614 additions and 586 deletions

View file

@ -51,17 +51,17 @@ mcrfpy.setScene("timer_test_scene")
ui = mcrfpy.sceneUI("timer_test_scene")
# Add a bright red frame that should be visible
frame = mcrfpy.Frame(100, 100, 400, 300,
frame = mcrfpy.Frame(pos=(100, 100), size=(400, 300),
fill_color=mcrfpy.Color(255, 0, 0), # Bright red
outline_color=mcrfpy.Color(255, 255, 255), # White outline
outline=5.0)
ui.append(frame)
# Add text
caption = mcrfpy.Caption(mcrfpy.Vector(150, 150),
caption = mcrfpy.Caption(pos=(150, 150),
text="TIMER TEST - SHOULD BE VISIBLE",
fill_color=mcrfpy.Color(255, 255, 255))
caption.size = 24
caption.font_size = 24
frame.children.append(caption)
# Add click handler to demonstrate interaction

View file

@ -1,4 +1,4 @@
import mcrfpy
e = mcrfpy.Entity(0, 0)
e = mcrfpy.Entity((0, 0))
print("Entity attributes:", dir(e))
print("\nEntity repr:", repr(e))

View file

@ -22,7 +22,7 @@ print(f"UI collection type: {type(ui)}")
print(f"Initial UI elements: {len(ui)}")
# Add a simple frame
frame = mcrfpy.Frame(0, 0, 100, 100,
frame = mcrfpy.Frame(pos=(0, 0), size=(100, 100),
fill_color=mcrfpy.Color(255, 255, 255))
ui.append(frame)
print(f"After adding frame: {len(ui)} elements")

View file

@ -22,14 +22,13 @@ mcrfpy.createScene("grid")
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
# Title
title = mcrfpy.Caption(400, 30, "Grid Example - Dungeon View")
title = mcrfpy.Caption(pos=(400, 30), text="Grid Example - Dungeon View")
title.font = mcrfpy.default_font
title.font_size = 24
title.font_color = (255, 255, 255)
title.fill_color = mcrfpy.Color(255, 255, 255)
# Create main grid (20x15 tiles, each 32x32 pixels)
grid = mcrfpy.Grid(100, 100, 20, 15, texture, 32, 32)
grid.texture = texture
grid = mcrfpy.Grid(pos=(100, 100), grid_size=(20, 15), texture=texture, size=(640, 480))
# Define tile types from Crypt of Sokoban
FLOOR = 58 # Stone floor
@ -63,36 +62,21 @@ grid.set_tile(12, 8, BOULDER)
# Create some entities on the grid
# Player entity
player = mcrfpy.Entity(5, 7)
player.texture = texture
player.sprite_index = 84 # Player sprite
player = mcrfpy.Entity((5, 7), texture=texture, sprite_index=84, grid=grid) # Player sprite
# Enemy entities
rat1 = mcrfpy.Entity(12, 5)
rat1.texture = texture
rat1.sprite_index = 123 # Rat
rat1 = mcrfpy.Entity((12, 5), texture=texture, sprite_index=123, grid=grid) # Rat
rat2 = mcrfpy.Entity(14, 9)
rat2.texture = texture
rat2.sprite_index = 123 # Rat
rat2 = mcrfpy.Entity((14, 9), texture=texture, sprite_index=123, grid=grid) # Rat
cyclops = mcrfpy.Entity(10, 10)
cyclops.texture = texture
cyclops.sprite_index = 109 # Cyclops
# Add entities to grid
grid.entities.append(player)
grid.entities.append(rat1)
grid.entities.append(rat2)
grid.entities.append(cyclops)
cyclops = mcrfpy.Entity((10, 10), texture=texture, sprite_index=109, grid=grid) # Cyclops
# Create a smaller grid showing tile palette
palette_label = mcrfpy.Caption(100, 600, "Tile Types:")
palette_label = mcrfpy.Caption(pos=(100, 600), text="Tile Types:")
palette_label.font = mcrfpy.default_font
palette_label.font_color = (255, 255, 255)
palette_label.fill_color = mcrfpy.Color(255, 255, 255)
palette = mcrfpy.Grid(250, 580, 7, 1, texture, 32, 32)
palette.texture = texture
palette = mcrfpy.Grid(pos=(250, 580), grid_size=(7, 1), texture=texture, size=(224, 32))
palette.set_tile(0, 0, FLOOR)
palette.set_tile(1, 0, WALL)
palette.set_tile(2, 0, DOOR)
@ -104,17 +88,17 @@ palette.set_tile(6, 0, BOULDER)
# Labels for palette
labels = ["Floor", "Wall", "Door", "Chest", "Button", "Exit", "Boulder"]
for i, label in enumerate(labels):
l = mcrfpy.Caption(250 + i * 32, 615, label)
l = mcrfpy.Caption(pos=(250 + i * 32, 615), text=label)
l.font = mcrfpy.default_font
l.font_size = 10
l.font_color = (255, 255, 255)
l.fill_color = mcrfpy.Color(255, 255, 255)
mcrfpy.sceneUI("grid").append(l)
# Add info caption
info = mcrfpy.Caption(100, 680, "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.")
info.font = mcrfpy.default_font
info.font_size = 14
info.font_color = (200, 200, 200)
info.fill_color = mcrfpy.Color(200, 200, 200)
# Add all elements to scene
ui = mcrfpy.sceneUI("grid")

View file

@ -22,20 +22,20 @@ mcrfpy.createScene("sprites")
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
# Title
title = mcrfpy.Caption(400, 30, "Sprite Examples")
title = mcrfpy.Caption(pos=(400, 30), text="Sprite Examples")
title.font = mcrfpy.default_font
title.font_size = 24
title.font_color = (255, 255, 255)
title.fill_color = mcrfpy.Color(255, 255, 255)
# Create a frame background
frame = mcrfpy.Frame(50, 80, 700, 500)
frame.bgcolor = (64, 64, 128)
frame = mcrfpy.Frame(pos=(50, 80), size=(700, 500))
frame.fill_color = mcrfpy.Color(64, 64, 128)
frame.outline = 2
# Player sprite
player_label = mcrfpy.Caption(100, 120, "Player")
player_label = mcrfpy.Caption(pos=(100, 120), text="Player")
player_label.font = mcrfpy.default_font
player_label.font_color = (255, 255, 255)
player_label.fill_color = mcrfpy.Color(255, 255, 255)
player = mcrfpy.Sprite(120, 150)
player.texture = texture
@ -43,9 +43,9 @@ player.sprite_index = 84 # Player sprite
player.scale = (3.0, 3.0)
# Enemy sprites
enemy_label = mcrfpy.Caption(250, 120, "Enemies")
enemy_label = mcrfpy.Caption(pos=(250, 120), text="Enemies")
enemy_label.font = mcrfpy.default_font
enemy_label.font_color = (255, 255, 255)
enemy_label.fill_color = mcrfpy.Color(255, 255, 255)
rat = mcrfpy.Sprite(250, 150)
rat.texture = texture
@ -63,9 +63,9 @@ cyclops.sprite_index = 109 # Cyclops
cyclops.scale = (3.0, 3.0)
# Items row
items_label = mcrfpy.Caption(100, 250, "Items")
items_label = mcrfpy.Caption(pos=(100, 250), text="Items")
items_label.font = mcrfpy.default_font
items_label.font_color = (255, 255, 255)
items_label.fill_color = mcrfpy.Color(255, 255, 255)
# Boulder
boulder = mcrfpy.Sprite(100, 280)
@ -92,9 +92,9 @@ button.sprite_index = 250 # Button
button.scale = (3.0, 3.0)
# UI elements row
ui_label = mcrfpy.Caption(100, 380, "UI Elements")
ui_label = mcrfpy.Caption(pos=(100, 380), text="UI Elements")
ui_label.font = mcrfpy.default_font
ui_label.font_color = (255, 255, 255)
ui_label.fill_color = mcrfpy.Color(255, 255, 255)
# Hearts
heart_full = mcrfpy.Sprite(100, 410)
@ -119,9 +119,9 @@ armor.sprite_index = 211 # Armor
armor.scale = (3.0, 3.0)
# Scale demonstration
scale_label = mcrfpy.Caption(500, 120, "Scale Demo")
scale_label = mcrfpy.Caption(pos=(500, 120), text="Scale Demo")
scale_label.font = mcrfpy.default_font
scale_label.font_color = (255, 255, 255)
scale_label.fill_color = mcrfpy.Color(255, 255, 255)
# Same sprite at different scales
for i, scale in enumerate([1.0, 2.0, 3.0, 4.0]):

View file

@ -17,42 +17,42 @@ def test_transparency_workaround():
# WORKAROUND: Create a full-window opaque frame as the first element
# This acts as an opaque background since the scene clears with transparent
print("Creating full-window opaque background...")
background = mcrfpy.Frame(0, 0, 1024, 768,
background = mcrfpy.Frame(pos=(0, 0), size=(1024, 768),
fill_color=mcrfpy.Color(50, 50, 50), # Dark gray
outline_color=None,
outline=0.0)
ui.append(background)
print("✓ Added opaque background frame")
# Now add normal content on top
print("\nAdding test content...")
# Red frame
frame1 = mcrfpy.Frame(100, 100, 200, 150,
frame1 = mcrfpy.Frame(pos=(100, 100), size=(200, 150),
fill_color=mcrfpy.Color(255, 0, 0),
outline_color=mcrfpy.Color(255, 255, 255),
outline=3.0)
ui.append(frame1)
# Green frame
frame2 = mcrfpy.Frame(350, 100, 200, 150,
frame2 = mcrfpy.Frame(pos=(350, 100), size=(200, 150),
fill_color=mcrfpy.Color(0, 255, 0),
outline_color=mcrfpy.Color(0, 0, 0),
outline=3.0)
ui.append(frame2)
# Blue frame
frame3 = mcrfpy.Frame(100, 300, 200, 150,
frame3 = mcrfpy.Frame(pos=(100, 300), size=(200, 150),
fill_color=mcrfpy.Color(0, 0, 255),
outline_color=mcrfpy.Color(255, 255, 0),
outline=3.0)
ui.append(frame3)
# Add text
caption = mcrfpy.Caption(mcrfpy.Vector(250, 50),
caption = mcrfpy.Caption(pos=(250, 50),
text="OPAQUE BACKGROUND TEST",
fill_color=mcrfpy.Color(255, 255, 255))
caption.size = 32
caption.font_size = 32
ui.append(caption)
# Take screenshot

View file

@ -31,9 +31,9 @@ def take_screenshot(runtime):
mcrfpy.createScene("test")
# Add a visible element
caption = mcrfpy.Caption(100, 100, "Screenshot Test")
caption = mcrfpy.Caption(pos=(100, 100), text="Screenshot Test")
caption.font = mcrfpy.default_font
caption.font_color = (255, 255, 255)
caption.fill_color = mcrfpy.Color(255, 255, 255)
caption.font_size = 24
mcrfpy.sceneUI("test").append(caption)

View file

@ -30,7 +30,7 @@ mcrfpy.setScene("test")
ui = mcrfpy.sceneUI("test")
# Add visible content - a white frame on default background
frame = mcrfpy.Frame(100, 100, 200, 200,
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200),
fill_color=mcrfpy.Color(255, 255, 255))
ui.append(frame)

View file

@ -73,6 +73,9 @@ mcrfpy.createScene("chain_test")
grid = mcrfpy.Grid(grid_x=20, grid_y=15)
grid.fill_color = mcrfpy.Color(20, 20, 30)
# Add a color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
# Simple map
for y in range(15):
for x in range(20):
@ -80,17 +83,17 @@ for y in range(15):
if x == 0 or x == 19 or y == 0 or y == 14:
cell.walkable = False
cell.transparent = False
cell.color = mcrfpy.Color(60, 40, 40)
color_layer.set(x, y, mcrfpy.Color(60, 40, 40))
else:
cell.walkable = True
cell.transparent = True
cell.color = mcrfpy.Color(100, 100, 120)
color_layer.set(x, y, mcrfpy.Color(100, 100, 120))
# Create entities
player = mcrfpy.Entity(2, 2, grid=grid)
player = mcrfpy.Entity((2, 2), grid=grid)
player.sprite_index = 64 # @
enemy = mcrfpy.Entity(17, 12, grid=grid)
enemy = mcrfpy.Entity((17, 12), grid=grid)
enemy.sprite_index = 69 # E
# UI setup
@ -99,15 +102,15 @@ ui.append(grid)
grid.position = (100, 100)
grid.size = (600, 450)
title = mcrfpy.Caption("Animation Chaining Test", 300, 20)
title = mcrfpy.Caption(pos=(300, 20), text="Animation Chaining Test")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)
status = mcrfpy.Caption("Press 1: Animate Player | 2: Animate Enemy | 3: Both | Q: Quit", 100, 50)
status = mcrfpy.Caption(pos=(100, 50), text="Press 1: Animate Player | 2: Animate Enemy | 3: Both | Q: Quit")
status.fill_color = mcrfpy.Color(200, 200, 200)
ui.append(status)
info = mcrfpy.Caption("Status: Ready", 100, 70)
info = mcrfpy.Caption(pos=(100, 70), text="Status: Ready")
info.fill_color = mcrfpy.Color(100, 255, 100)
ui.append(info)

View file

@ -63,14 +63,15 @@ mcrfpy.createScene("anim_debug")
# Simple grid
grid = mcrfpy.Grid(grid_x=15, grid_y=10)
color_layer = grid.add_layer("color", z_index=-1)
for y in range(10):
for x in range(15):
cell = grid.at(x, y)
cell.walkable = True
cell.color = mcrfpy.Color(100, 100, 120)
color_layer.set(x, y, mcrfpy.Color(100, 100, 120))
# Test entity
entity = mcrfpy.Entity(5, 5, grid=grid)
entity = mcrfpy.Entity((5, 5), grid=grid)
entity.sprite_index = 64
# UI
@ -79,19 +80,19 @@ ui.append(grid)
grid.position = (100, 150)
grid.size = (450, 300)
title = mcrfpy.Caption("Animation Debug Tool", 250, 20)
title = mcrfpy.Caption(pos=(250, 20), text="Animation Debug Tool")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)
status = mcrfpy.Caption("Press keys to test animations", 100, 50)
status = mcrfpy.Caption(pos=(100, 50), text="Press keys to test animations")
status.fill_color = mcrfpy.Color(200, 200, 200)
ui.append(status)
pos_display = mcrfpy.Caption("", 100, 70)
pos_display = mcrfpy.Caption(pos=(100, 70), text="")
pos_display.fill_color = mcrfpy.Color(255, 255, 100)
ui.append(pos_display)
active_display = mcrfpy.Caption("Active animations: 0", 100, 90)
active_display = mcrfpy.Caption(pos=(100, 90), text="Active animations: 0")
active_display.fill_color = mcrfpy.Color(100, 255, 255)
ui.append(active_display)

View file

@ -13,7 +13,7 @@ print("2. Getting UI...")
ui = mcrfpy.sceneUI("test")
print("3. Creating frame...")
frame = mcrfpy.Frame(100, 100, 200, 200)
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
ui.append(frame)
print("4. Creating Animation object...")

View file

@ -30,7 +30,7 @@ def test_1_basic_animation():
"""Test that basic animations still work"""
try:
ui = mcrfpy.sceneUI("test")
frame = mcrfpy.Frame(100, 100, 100, 100)
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame)
anim = mcrfpy.Animation("x", 200.0, 1000, "linear")
@ -49,7 +49,7 @@ def test_2_remove_animated_object():
"""Test removing object with active animation"""
try:
ui = mcrfpy.sceneUI("test")
frame = mcrfpy.Frame(100, 100, 100, 100)
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame)
# Start animation
@ -73,7 +73,7 @@ def test_3_complete_animation():
"""Test completing animation immediately"""
try:
ui = mcrfpy.sceneUI("test")
frame = mcrfpy.Frame(100, 100, 100, 100)
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame)
# Start animation
@ -98,7 +98,7 @@ def test_4_multiple_animations_timer():
nonlocal success
try:
ui = mcrfpy.sceneUI("test")
frame = mcrfpy.Frame(200, 200, 100, 100)
frame = mcrfpy.Frame(pos=(200, 200), size=(100, 100))
ui.append(frame)
# Create multiple animations rapidly (this used to crash)
@ -129,7 +129,7 @@ def test_5_scene_cleanup():
# Add animated objects to first scene
ui = mcrfpy.sceneUI("test")
for i in range(5):
frame = mcrfpy.Frame(50 * i, 100, 40, 40)
frame = mcrfpy.Frame(pos=(50 * i, 100), size=(40, 40))
ui.append(frame)
anim = mcrfpy.Animation("y", 300.0, 2000, "easeOutBounce")
anim.start(frame)
@ -148,9 +148,9 @@ def test_6_animation_after_clear():
"""Test animations after clearing UI"""
try:
ui = mcrfpy.sceneUI("test")
# Create and animate
frame = mcrfpy.Frame(100, 100, 100, 100)
frame = mcrfpy.Frame(pos=(100, 100), size=(100, 100))
ui.append(frame)
anim = mcrfpy.Animation("w", 200.0, 1500, "easeInOutCubic")
anim.start(frame)
@ -207,7 +207,7 @@ mcrfpy.setScene("test")
# Add a background
ui = mcrfpy.sceneUI("test")
bg = mcrfpy.Frame(0, 0, 1024, 768)
bg = mcrfpy.Frame(pos=(0, 0), size=(1024, 768))
bg.fill_color = mcrfpy.Color(20, 20, 30)
ui.append(bg)

View file

@ -42,14 +42,14 @@ mcrfpy.setScene("test")
ui = mcrfpy.sceneUI("test")
# Add title and subtitle (to preserve during clearing)
title = mcrfpy.Caption("Test Title", 400, 20)
subtitle = mcrfpy.Caption("Test Subtitle", 400, 50)
title = mcrfpy.Caption(pos=(400, 20), text="Test Title")
subtitle = mcrfpy.Caption(pos=(400, 50), text="Test Subtitle")
ui.extend([title, subtitle])
# Create initial animated objects
print("Creating initial animated objects...")
for i in range(10):
f = mcrfpy.Frame(50 + i*30, 100, 25, 25)
f = mcrfpy.Frame(pos=(50 + i*30, 100), size=(25, 25))
f.fill_color = mcrfpy.Color(255, 100, 100)
ui.append(f)

View file

@ -17,10 +17,15 @@ import sys
def create_test_grid():
"""Create a test grid with obstacles"""
mcrfpy.createScene("dijkstra_test")
# Create grid
grid = mcrfpy.Grid(grid_x=20, grid_y=20)
# Add color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
# Store color_layer on grid for access elsewhere
grid._color_layer = color_layer
# Initialize all cells as walkable
for y in range(grid.grid_y):
for x in range(grid.grid_x):
@ -28,8 +33,8 @@ def create_test_grid():
cell.walkable = True
cell.transparent = True
cell.tilesprite = 46 # . period
cell.color = mcrfpy.Color(50, 50, 50)
color_layer.set(x, y, mcrfpy.Color(50, 50, 50))
# Create some walls to make pathfinding interesting
# Vertical wall
for y in range(5, 15):
@ -37,8 +42,8 @@ def create_test_grid():
cell.walkable = False
cell.transparent = False
cell.tilesprite = 219 # Block
cell.color = mcrfpy.Color(100, 100, 100)
color_layer.set(10, y, mcrfpy.Color(100, 100, 100))
# Horizontal wall
for x in range(5, 15):
if x != 10: # Leave a gap
@ -46,8 +51,8 @@ def create_test_grid():
cell.walkable = False
cell.transparent = False
cell.tilesprite = 219
cell.color = mcrfpy.Color(100, 100, 100)
color_layer.set(x, 10, mcrfpy.Color(100, 100, 100))
return grid
def test_basic_dijkstra():
@ -133,7 +138,7 @@ def test_multi_target_scenario():
# Mark threat position
cell = grid.at(tx, ty)
cell.tilesprite = 84 # T for threat
cell.color = mcrfpy.Color(255, 0, 0)
grid._color_layer.set(tx, ty, mcrfpy.Color(255, 0, 0))
# Compute Dijkstra from this threat
grid.compute_dijkstra(tx, ty)
@ -176,7 +181,7 @@ def test_multi_target_scenario():
# Mark safe position
cell = grid.at(best_pos[0], best_pos[1])
cell.tilesprite = 83 # S for safe
cell.color = mcrfpy.Color(0, 255, 0)
grid._color_layer.set(best_pos[0], best_pos[1], mcrfpy.Color(0, 255, 0))
def run_test(runtime):
"""Timer callback to run tests after scene loads"""
@ -211,7 +216,7 @@ ui = mcrfpy.sceneUI("dijkstra_test")
ui.append(grid)
# Add title
title = mcrfpy.Caption("Dijkstra Pathfinding Test", 10, 10)
title = mcrfpy.Caption(pos=(10, 10), text="Dijkstra Pathfinding Test")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)

View file

@ -17,13 +17,16 @@ mcrfpy.createScene("test_anim")
grid = mcrfpy.Grid(grid_x=15, grid_y=15)
grid.fill_color = mcrfpy.Color(20, 20, 30)
# Add a color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
# Initialize all cells as walkable floors
for y in range(15):
for x in range(15):
cell = grid.at(x, y)
cell.walkable = True
cell.transparent = True
cell.color = mcrfpy.Color(100, 100, 120)
color_layer.set(x, y, mcrfpy.Color(100, 100, 120))
# Mark the path we'll follow with different color
path_cells = [(5,5), (6,5), (7,5), (8,5), (9,5), (10,5),
@ -32,11 +35,10 @@ path_cells = [(5,5), (6,5), (7,5), (8,5), (9,5), (10,5),
(5,9), (5,8), (5,7), (5,6)]
for x, y in path_cells:
cell = grid.at(x, y)
cell.color = mcrfpy.Color(120, 120, 150)
color_layer.set(x, y, mcrfpy.Color(120, 120, 150))
# Create entity at start position
entity = mcrfpy.Entity(5, 5, grid=grid)
entity = mcrfpy.Entity((5, 5), grid=grid)
entity.sprite_index = 64 # @
# UI setup
@ -46,27 +48,27 @@ grid.position = (100, 100)
grid.size = (450, 450) # 15 * 30 pixels per cell
# Title
title = mcrfpy.Caption("Entity Animation Test - Square Path", 200, 20)
title = mcrfpy.Caption(pos=(200, 20), text="Entity Animation Test - Square Path")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)
# Status display
status = mcrfpy.Caption("Press SPACE to start animation | Q to quit", 100, 50)
status = mcrfpy.Caption(pos=(100, 50), text="Press SPACE to start animation | Q to quit")
status.fill_color = mcrfpy.Color(200, 200, 200)
ui.append(status)
# Position display
pos_display = mcrfpy.Caption(f"Entity Position: ({entity.x:.2f}, {entity.y:.2f})", 100, 70)
pos_display = mcrfpy.Caption(pos=(100, 70), text=f"Entity Position: ({entity.x:.2f}, {entity.y:.2f})")
pos_display.fill_color = mcrfpy.Color(255, 255, 100)
ui.append(pos_display)
# Animation info
anim_info = mcrfpy.Caption("Animation: Not started", 400, 70)
anim_info = mcrfpy.Caption(pos=(400, 70), text="Animation: Not started")
anim_info.fill_color = mcrfpy.Color(100, 255, 255)
ui.append(anim_info)
# Debug info
debug_info = mcrfpy.Caption("Debug: Waiting...", 100, 570)
debug_info = mcrfpy.Caption(pos=(100, 570), text="Debug: Waiting...")
debug_info.fill_color = mcrfpy.Color(150, 150, 150)
ui.append(debug_info)

View file

@ -33,16 +33,19 @@ mcrfpy.createScene("fix_demo")
grid = mcrfpy.Grid(grid_x=15, grid_y=10)
grid.fill_color = mcrfpy.Color(20, 20, 30)
# Add color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
# Make floor
for y in range(10):
for x in range(15):
cell = grid.at(x, y)
cell.walkable = True
cell.transparent = True
cell.color = mcrfpy.Color(100, 100, 120)
color_layer.set(x, y, mcrfpy.Color(100, 100, 120))
# Create entity
entity = mcrfpy.Entity(2, 2, grid=grid)
entity = mcrfpy.Entity((2, 2), grid=grid)
entity.sprite_index = 64 # @
# UI
@ -52,19 +55,19 @@ grid.position = (100, 150)
grid.size = (450, 300)
# Info displays
title = mcrfpy.Caption("Entity Animation Issue Demo", 250, 20)
title = mcrfpy.Caption(pos=(250, 20), text="Entity Animation Issue Demo")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)
pos_info = mcrfpy.Caption("", 100, 50)
pos_info = mcrfpy.Caption(pos=(100, 50), text="")
pos_info.fill_color = mcrfpy.Color(255, 255, 100)
ui.append(pos_info)
sprite_info = mcrfpy.Caption("", 100, 70)
sprite_info = mcrfpy.Caption(pos=(100, 70), text="")
sprite_info.fill_color = mcrfpy.Color(255, 100, 100)
ui.append(sprite_info)
status = mcrfpy.Caption("Press SPACE to animate entity", 100, 100)
status = mcrfpy.Caption(pos=(100, 100), text="Press SPACE to animate entity")
status.fill_color = mcrfpy.Color(200, 200, 200)
ui.append(status)

View file

@ -22,8 +22,7 @@ for x, y in walls:
grid.at(x, y).walkable = False
# Create entity
entity = mcrfpy.Entity(2, 2)
grid.entities.append(entity)
entity = mcrfpy.Entity((2, 2), grid=grid)
print(f"Entity at: ({entity.x}, {entity.y})")

View file

@ -9,7 +9,7 @@ print("=" * 50)
# Test 1: Entity without grid
print("Test 1: Entity not in grid")
try:
entity = mcrfpy.Entity(5, 5)
entity = mcrfpy.Entity((5, 5))
path = entity.path_to(8, 8)
print(" ✗ Should have failed for entity not in grid")
except ValueError as e:
@ -31,8 +31,7 @@ for y in range(5):
for x in range(5):
grid.at(x, 2).walkable = False
entity = mcrfpy.Entity(1, 1)
grid.entities.append(entity)
entity = mcrfpy.Entity((1, 1), grid=grid)
try:
path = entity.path_to(1, 4)

View file

@ -13,32 +13,28 @@ def test_grid_background():
ui = mcrfpy.sceneUI("test")
# Create a grid with default background
grid = mcrfpy.Grid(20, 15, grid_size=(20, 15))
grid.x = 50
grid.y = 50
grid.w = 400
grid.h = 300
grid = mcrfpy.Grid(pos=(50, 50), size=(400, 300), grid_size=(20, 15))
ui.append(grid)
# Add some tiles to see the background better
# Add color layer for some tiles to see the background better
color_layer = grid.add_layer("color", z_index=-1)
for x in range(5, 15):
for y in range(5, 10):
point = grid.at(x, y)
point.color = mcrfpy.Color(100, 150, 100)
color_layer.set(x, y, mcrfpy.Color(100, 150, 100))
# Add UI to show current background color
info_frame = mcrfpy.Frame(500, 50, 200, 150,
info_frame = mcrfpy.Frame(pos=(500, 50), size=(200, 150),
fill_color=mcrfpy.Color(40, 40, 40),
outline_color=mcrfpy.Color(200, 200, 200),
outline=2)
ui.append(info_frame)
color_caption = mcrfpy.Caption(510, 60, "Background Color:")
color_caption = mcrfpy.Caption(pos=(510, 60), text="Background Color:")
color_caption.font_size = 14
color_caption.fill_color = mcrfpy.Color(255, 255, 255)
info_frame.children.append(color_caption)
color_display = mcrfpy.Caption(510, 80, "")
color_display = mcrfpy.Caption(pos=(510, 80), text="")
color_display.font_size = 12
color_display.fill_color = mcrfpy.Color(200, 200, 200)
info_frame.children.append(color_display)

View file

@ -11,8 +11,8 @@ ui = mcrfpy.sceneUI("detect_test")
mcrfpy.setScene("detect_test")
# Create a frame
frame = mcrfpy.Frame(100, 100, 200, 200)
frame.fill_color = (255, 100, 100, 255)
frame = mcrfpy.Frame(pos=(100, 100), size=(200, 200))
frame.fill_color = mcrfpy.Color(255, 100, 100, 255)
ui.append(frame)
def test_mode(runtime):

View file

@ -10,13 +10,13 @@ ui = mcrfpy.sceneUI("headless_test")
mcrfpy.setScene("headless_test")
# Create a visible indicator
frame = mcrfpy.Frame(200, 200, 400, 200)
frame.fill_color = (100, 200, 100, 255)
frame = mcrfpy.Frame(pos=(200, 200), size=(400, 200))
frame.fill_color = mcrfpy.Color(100, 200, 100, 255)
ui.append(frame)
caption = mcrfpy.Caption((400, 300), "If you see this, windowed mode is working!", mcrfpy.default_font)
caption.size = 24
caption.fill_color = (255, 255, 255)
caption = mcrfpy.Caption(pos=(400, 300), text="If you see this, windowed mode is working!")
caption.font_size = 24
caption.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(caption)
print("Script started. Window should appear unless --headless was specified.")

View file

@ -115,18 +115,18 @@ mcrfpy.setScene("metrics_test")
ui = mcrfpy.sceneUI("metrics_test")
# Create various UI elements
frame1 = mcrfpy.Frame(10, 10, 200, 150)
frame1.fill_color = (100, 100, 100, 128)
frame1 = mcrfpy.Frame(pos=(10, 10), size=(200, 150))
frame1.fill_color = mcrfpy.Color(100, 100, 100, 128)
ui.append(frame1)
caption1 = mcrfpy.Caption("Test Caption", 50, 50)
caption1 = mcrfpy.Caption(pos=(50, 50), text="Test Caption")
ui.append(caption1)
sprite1 = mcrfpy.Sprite(100, 100)
sprite1 = mcrfpy.Sprite(pos=(100, 100))
ui.append(sprite1)
# Invisible element (should not count as visible)
frame2 = mcrfpy.Frame(300, 10, 100, 100)
frame2 = mcrfpy.Frame(pos=(300, 10), size=(100, 100))
frame2.visible = False
ui.append(frame2)

View file

@ -11,17 +11,20 @@ print("=" * 50)
mcrfpy.createScene("test")
grid = mcrfpy.Grid(grid_x=5, grid_y=5)
# Add color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
# Initialize
for y in range(5):
for x in range(5):
grid.at(x, y).walkable = True
grid.at(x, y).color = mcrfpy.Color(200, 200, 200) # Light gray
color_layer.set(x, y, mcrfpy.Color(200, 200, 200)) # Light gray
# Add entities
e1 = mcrfpy.Entity(0, 0)
e2 = mcrfpy.Entity(4, 4)
grid.entities.append(e1)
grid.entities.append(e2)
e1 = mcrfpy.Entity((0, 0), grid=grid)
e2 = mcrfpy.Entity((4, 4), grid=grid)
e1.sprite_index = 64
e2.sprite_index = 69
print(f"Entity 1 at ({e1.x}, {e1.y})")
print(f"Entity 2 at ({e2.x}, {e2.y})")
@ -35,24 +38,25 @@ PATH_COLOR = mcrfpy.Color(100, 255, 100) # Green
print(f"\nSetting path cells to green ({PATH_COLOR.r}, {PATH_COLOR.g}, {PATH_COLOR.b})...")
for x, y in path:
cell = grid.at(x, y)
# Check before
before = cell.color[:3] # Get RGB from tuple
before_c = color_layer.at(x, y)
before = (before_c.r, before_c.g, before_c.b)
# Set color
cell.color = PATH_COLOR
color_layer.set(x, y, PATH_COLOR)
# Check after
after = cell.color[:3] # Get RGB from tuple
after_c = color_layer.at(x, y)
after = (after_c.r, after_c.g, after_c.b)
print(f" Cell ({x},{y}): {before} -> {after}")
# Verify all path cells
print("\nVerifying all cells in grid:")
for y in range(5):
for x in range(5):
cell = grid.at(x, y)
color = cell.color[:3] # Get RGB from tuple
c = color_layer.at(x, y)
color = (c.r, c.g, c.b)
is_path = (x, y) in path
print(f" ({x},{y}): color={color}, in_path={is_path}")

View file

@ -21,10 +21,8 @@ for i in range(5):
grid.at(5, i + 2).walkable = False
# Create entities
e1 = mcrfpy.Entity(2, 5)
e2 = mcrfpy.Entity(8, 5)
grid.entities.append(e1)
grid.entities.append(e2)
e1 = mcrfpy.Entity((2, 5), grid=grid)
e2 = mcrfpy.Entity((8, 5), grid=grid)
# Test pathfinding between entities
print(f"Entity 1 at ({e1.x}, {e1.y})")

View file

@ -10,7 +10,7 @@ def test_properties(runtime):
# Test Frame
try:
frame = mcrfpy.Frame(10, 10, 100, 100)
frame = mcrfpy.Frame(pos=(10, 10), size=(100, 100))
print(f"Frame visible: {frame.visible}")
frame.visible = False
print(f"Frame visible after setting to False: {frame.visible}")

View file

@ -11,51 +11,51 @@ def create_test_scenes():
# Scene 1: Red background
mcrfpy.createScene("red_scene")
ui1 = mcrfpy.sceneUI("red_scene")
bg1 = mcrfpy.Frame(0, 0, 1024, 768, fill_color=mcrfpy.Color(255, 0, 0, 255))
label1 = mcrfpy.Caption(512, 384, "RED SCENE", font=mcrfpy.Font.font_ui)
label1.color = mcrfpy.Color(255, 255, 255, 255)
bg1 = mcrfpy.Frame(pos=(0, 0), size=(1024, 768), fill_color=mcrfpy.Color(255, 0, 0, 255))
label1 = mcrfpy.Caption(pos=(512, 384), text="RED SCENE", font=mcrfpy.Font.font_ui)
label1.fill_color = mcrfpy.Color(255, 255, 255, 255)
ui1.append(bg1)
ui1.append(label1)
# Scene 2: Blue background
mcrfpy.createScene("blue_scene")
ui2 = mcrfpy.sceneUI("blue_scene")
bg2 = mcrfpy.Frame(0, 0, 1024, 768, fill_color=mcrfpy.Color(0, 0, 255, 255))
label2 = mcrfpy.Caption(512, 384, "BLUE SCENE", font=mcrfpy.Font.font_ui)
label2.color = mcrfpy.Color(255, 255, 255, 255)
bg2 = mcrfpy.Frame(pos=(0, 0), size=(1024, 768), fill_color=mcrfpy.Color(0, 0, 255, 255))
label2 = mcrfpy.Caption(pos=(512, 384), text="BLUE SCENE", font=mcrfpy.Font.font_ui)
label2.fill_color = mcrfpy.Color(255, 255, 255, 255)
ui2.append(bg2)
ui2.append(label2)
# Scene 3: Green background
mcrfpy.createScene("green_scene")
ui3 = mcrfpy.sceneUI("green_scene")
bg3 = mcrfpy.Frame(0, 0, 1024, 768, fill_color=mcrfpy.Color(0, 255, 0, 255))
label3 = mcrfpy.Caption(512, 384, "GREEN SCENE", font=mcrfpy.Font.font_ui)
label3.color = mcrfpy.Color(0, 0, 0, 255) # Black text on green
bg3 = mcrfpy.Frame(pos=(0, 0), size=(1024, 768), fill_color=mcrfpy.Color(0, 255, 0, 255))
label3 = mcrfpy.Caption(pos=(512, 384), text="GREEN SCENE", font=mcrfpy.Font.font_ui)
label3.fill_color = mcrfpy.Color(0, 0, 0, 255) # Black text on green
ui3.append(bg3)
ui3.append(label3)
# Scene 4: Menu scene with buttons
mcrfpy.createScene("menu_scene")
ui4 = mcrfpy.sceneUI("menu_scene")
bg4 = mcrfpy.Frame(0, 0, 1024, 768, fill_color=mcrfpy.Color(50, 50, 50, 255))
title = mcrfpy.Caption(512, 100, "SCENE TRANSITION DEMO", font=mcrfpy.Font.font_ui)
title.color = mcrfpy.Color(255, 255, 255, 255)
bg4 = mcrfpy.Frame(pos=(0, 0), size=(1024, 768), fill_color=mcrfpy.Color(50, 50, 50, 255))
title = mcrfpy.Caption(pos=(512, 100), text="SCENE TRANSITION DEMO", font=mcrfpy.Font.font_ui)
title.fill_color = mcrfpy.Color(255, 255, 255, 255)
ui4.append(bg4)
ui4.append(title)
# Add instruction text
instructions = mcrfpy.Caption(512, 200, "Press keys 1-6 for different transitions", font=mcrfpy.Font.font_ui)
instructions.color = mcrfpy.Color(200, 200, 200, 255)
instructions = mcrfpy.Caption(pos=(512, 200), text="Press keys 1-6 for different transitions", font=mcrfpy.Font.font_ui)
instructions.fill_color = mcrfpy.Color(200, 200, 200, 255)
ui4.append(instructions)
controls = mcrfpy.Caption(512, 250, "1: Fade | 2: Slide Left | 3: Slide Right | 4: Slide Up | 5: Slide Down | 6: Instant", font=mcrfpy.Font.font_ui)
controls.color = mcrfpy.Color(150, 150, 150, 255)
controls = mcrfpy.Caption(pos=(512, 250), text="1: Fade | 2: Slide Left | 3: Slide Right | 4: Slide Up | 5: Slide Down | 6: Instant", font=mcrfpy.Font.font_ui)
controls.fill_color = mcrfpy.Color(150, 150, 150, 255)
ui4.append(controls)
scene_info = mcrfpy.Caption(512, 300, "R: Red Scene | B: Blue Scene | G: Green Scene | M: Menu", font=mcrfpy.Font.font_ui)
scene_info.color = mcrfpy.Color(150, 150, 150, 255)
scene_info = mcrfpy.Caption(pos=(512, 300), text="R: Red Scene | B: Blue Scene | G: Green Scene | M: Menu", font=mcrfpy.Font.font_ui)
scene_info.fill_color = mcrfpy.Color(150, 150, 150, 255)
ui4.append(scene_info)
print("Created test scenes: red_scene, blue_scene, green_scene, menu_scene")

View file

@ -13,13 +13,13 @@ def test_scene_transitions():
# Scene 1
mcrfpy.createScene("scene1")
ui1 = mcrfpy.sceneUI("scene1")
frame1 = mcrfpy.Frame(0, 0, 100, 100, fill_color=mcrfpy.Color(255, 0, 0))
frame1 = mcrfpy.Frame(pos=(0, 0), size=(100, 100), fill_color=mcrfpy.Color(255, 0, 0))
ui1.append(frame1)
# Scene 2
# Scene 2
mcrfpy.createScene("scene2")
ui2 = mcrfpy.sceneUI("scene2")
frame2 = mcrfpy.Frame(0, 0, 100, 100, fill_color=mcrfpy.Color(0, 0, 255))
frame2 = mcrfpy.Frame(pos=(0, 0), size=(100, 100), fill_color=mcrfpy.Color(0, 0, 255))
ui2.append(frame2)
# Test each transition type

View file

@ -8,7 +8,7 @@ def simple_test(runtime):
try:
# Test basic functionality
frame = mcrfpy.Frame(10, 10, 100, 100)
frame = mcrfpy.Frame(pos=(10, 10), size=(100, 100))
print(f"Frame created: visible={frame.visible}, opacity={frame.opacity}")
bounds = frame.get_bounds()

View file

@ -18,13 +18,13 @@ def create_demo():
scene = mcrfpy.sceneUI("text_demo")
# Background
bg = mcrfpy.Frame(0, 0, 800, 600)
bg.fill_color = (40, 40, 40, 255)
bg = mcrfpy.Frame(pos=(0, 0), size=(800, 600))
bg.fill_color = mcrfpy.Color(40, 40, 40, 255)
scene.append(bg)
# Title
title = mcrfpy.Caption("Text Input Widget Demo", 20, 20)
title.fill_color = (255, 255, 255, 255)
title = mcrfpy.Caption(pos=(20, 20), text="Text Input Widget Demo")
title.fill_color = mcrfpy.Color(255, 255, 255, 255)
scene.append(title)
# Focus manager
@ -62,8 +62,8 @@ def create_demo():
inputs.append(comment_input)
# Status display
status = mcrfpy.Caption("Ready for input...", 50, 360)
status.fill_color = (150, 255, 150, 255)
status = mcrfpy.Caption(pos=(50, 360), text="Ready for input...")
status.fill_color = mcrfpy.Color(150, 255, 150, 255)
scene.append(status)
# Update handler

View file

@ -69,11 +69,11 @@ def main():
mcrfpy.setScene("test")
# Create multiple captions for testing
caption1 = mcrfpy.Caption(50, 50, "Caption 1: Normal", fill_color=(255, 255, 255))
caption2 = mcrfpy.Caption(50, 100, "Caption 2: Will be invisible", fill_color=(255, 200, 200))
caption3 = mcrfpy.Caption(50, 150, "Caption 3: 50% opacity", fill_color=(200, 255, 200))
caption4 = mcrfpy.Caption(50, 200, "Caption 4: 25% opacity", fill_color=(200, 200, 255))
caption5 = mcrfpy.Caption(50, 250, "Caption 5: 0% opacity", fill_color=(255, 255, 200))
caption1 = mcrfpy.Caption(pos=(50, 50), text="Caption 1: Normal", fill_color=mcrfpy.Color(255, 255, 255))
caption2 = mcrfpy.Caption(pos=(50, 100), text="Caption 2: Will be invisible", fill_color=mcrfpy.Color(255, 200, 200))
caption3 = mcrfpy.Caption(pos=(50, 150), text="Caption 3: 50% opacity", fill_color=mcrfpy.Color(200, 255, 200))
caption4 = mcrfpy.Caption(pos=(50, 200), text="Caption 4: 25% opacity", fill_color=mcrfpy.Color(200, 200, 255))
caption5 = mcrfpy.Caption(pos=(50, 250), text="Caption 5: 0% opacity", fill_color=mcrfpy.Color(255, 255, 200))
# Add captions to scene
ui = mcrfpy.sceneUI("test")
@ -84,7 +84,7 @@ def main():
ui.append(caption5)
# Also add a frame as background to see transparency better
frame = mcrfpy.Frame(40, 40, 400, 250, fill_color=(50, 50, 50))
frame = mcrfpy.Frame(pos=(40, 40), size=(400, 250), fill_color=mcrfpy.Color(50, 50, 50))
frame.z_index = -1 # Put it behind the captions
ui.append(frame)

View file

@ -18,6 +18,9 @@ mcrfpy.createScene("visibility_test")
grid = mcrfpy.Grid(grid_x=20, grid_y=15)
grid.fill_color = mcrfpy.Color(20, 20, 30) # Dark background
# Add a color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
# Initialize grid - all walkable and transparent
print("\nInitializing 20x15 grid...")
for y in range(15):
@ -25,7 +28,7 @@ for y in range(15):
cell = grid.at(x, y)
cell.walkable = True
cell.transparent = True
cell.color = mcrfpy.Color(100, 100, 120) # Floor color
color_layer.set(x, y, mcrfpy.Color(100, 100, 120)) # Floor color
# Create some walls to block vision
print("Adding walls...")
@ -47,14 +50,14 @@ for wall_group in walls:
cell = grid.at(x, y)
cell.walkable = False
cell.transparent = False
cell.color = mcrfpy.Color(40, 20, 20) # Wall color
color_layer.set(x, y, mcrfpy.Color(40, 20, 20)) # Wall color
# Create entities
print("\nCreating entities...")
entities = [
mcrfpy.Entity(2, 7), # Left side
mcrfpy.Entity(18, 7), # Right side
mcrfpy.Entity(10, 1), # Top center (above wall)
mcrfpy.Entity((2, 7)), # Left side
mcrfpy.Entity((18, 7)), # Right side
mcrfpy.Entity((10, 1)), # Top center (above wall)
]
for i, entity in enumerate(entities):
@ -138,17 +141,17 @@ grid.position = (50, 50)
grid.size = (600, 450) # 20*30, 15*30
# Add title
title = mcrfpy.Caption("Knowledge Stubs 1 - Visibility Test", 200, 10)
title = mcrfpy.Caption(pos=(200, 10), text="Knowledge Stubs 1 - Visibility Test")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)
# Add info
info = mcrfpy.Caption("Perspective: -1 (omniscient)", 50, 520)
info = mcrfpy.Caption(pos=(50, 520), text="Perspective: -1 (omniscient)")
info.fill_color = mcrfpy.Color(200, 200, 200)
ui.append(info)
# Add legend
legend = mcrfpy.Caption("Black=Never seen, Dark gray=Discovered, Normal=Visible", 50, 540)
legend = mcrfpy.Caption(pos=(50, 540), text="Black=Never seen, Dark gray=Discovered, Normal=Visible")
legend.fill_color = mcrfpy.Color(150, 150, 150)
ui.append(legend)

View file

@ -4,28 +4,10 @@
import mcrfpy
import sys
# Colors as tuples (r, g, b, a)
WALL_COLOR = (60, 30, 30, 255)
FLOOR_COLOR = (200, 200, 220, 255)
PATH_COLOR = (100, 255, 100, 255)
def check_render(dt):
"""Timer callback to verify rendering"""
print(f"\nTimer fired after {dt}ms")
# Take screenshot
from mcrfpy import automation
automation.screenshot("visual_path_test.png")
print("Screenshot saved as visual_path_test.png")
# Sample some path cells to verify colors
print("\nSampling path cell colors from grid:")
for x, y in [(1, 1), (2, 2), (3, 3)]:
cell = grid.at(x, y)
color = cell.color
print(f" Cell ({x},{y}): color={color[:3]}")
sys.exit(0)
# Colors
WALL_COLOR = mcrfpy.Color(60, 30, 30)
FLOOR_COLOR = mcrfpy.Color(200, 200, 220)
PATH_COLOR = mcrfpy.Color(100, 255, 100)
# Create scene
mcrfpy.createScene("visual_test")
@ -34,20 +16,38 @@ mcrfpy.createScene("visual_test")
grid = mcrfpy.Grid(grid_x=5, grid_y=5)
grid.fill_color = mcrfpy.Color(0, 0, 0)
# Add color layer for cell coloring
color_layer = grid.add_layer("color", z_index=-1)
def check_render(dt):
"""Timer callback to verify rendering"""
print(f"\nTimer fired after {dt}ms")
# Take screenshot
from mcrfpy import automation
automation.screenshot("visual_path_test.png")
print("Screenshot saved as visual_path_test.png")
# Sample some path cells to verify colors
print("\nSampling path cell colors from grid:")
for x, y in [(1, 1), (2, 2), (3, 3)]:
color = color_layer.at(x, y)
print(f" Cell ({x},{y}): color=({color.r}, {color.g}, {color.b})")
sys.exit(0)
# Initialize all cells as floor
print("Initializing grid...")
for y in range(5):
for x in range(5):
grid.at(x, y).walkable = True
grid.at(x, y).color = FLOOR_COLOR
color_layer.set(x, y, FLOOR_COLOR)
# Create entities
e1 = mcrfpy.Entity(0, 0)
e2 = mcrfpy.Entity(4, 4)
e1 = mcrfpy.Entity((0, 0), grid=grid)
e2 = mcrfpy.Entity((4, 4), grid=grid)
e1.sprite_index = 64 # @
e2.sprite_index = 69 # E
grid.entities.append(e1)
grid.entities.append(e2)
print(f"Entity 1 at ({e1.x}, {e1.y})")
print(f"Entity 2 at ({e2.x}, {e2.y})")
@ -60,7 +60,7 @@ print(f"\nPath from E1 to E2: {path}")
if path:
print("\nColoring path cells green...")
for x, y in path:
grid.at(x, y).color = PATH_COLOR
color_layer.set(x, y, PATH_COLOR)
print(f" Set ({x},{y}) to green")
# Set up UI
@ -70,7 +70,7 @@ grid.position = (50, 50)
grid.size = (250, 250)
# Add title
title = mcrfpy.Caption("Path Visualization Test", 50, 10)
title = mcrfpy.Caption(pos=(50, 10), text="Path Visualization Test")
title.fill_color = mcrfpy.Color(255, 255, 255)
ui.append(title)

View file

@ -16,11 +16,11 @@ def test_issue_38_children():
print("\nTest 1: Passing children argument to Frame constructor")
try:
# Create some child elements
child1 = mcrfpy.Caption(mcrfpy.Vector(10, 10), text="Child 1")
child2 = mcrfpy.Sprite(mcrfpy.Vector(10, 30))
child1 = mcrfpy.Caption(pos=(10, 10), text="Child 1")
child2 = mcrfpy.Sprite(pos=(10, 30))
# Try to create frame with children argument
frame = mcrfpy.Frame(10, 10, 200, 150, children=[child1, child2])
frame = mcrfpy.Frame(pos=(10, 10), size=(200, 150), children=[child1, child2])
print("✗ UNEXPECTED: Frame accepted children argument (should fail per issue #38)")
except TypeError as e:
print(f"✓ EXPECTED: Frame constructor rejected children argument: {e}")
@ -30,12 +30,12 @@ def test_issue_38_children():
# Test 2: Verify children can be added after creation
print("\nTest 2: Adding children after Frame creation")
try:
frame = mcrfpy.Frame(10, 10, 200, 150)
frame = mcrfpy.Frame(pos=(10, 10), size=(200, 150))
ui.append(frame)
# Add children via the children collection
child1 = mcrfpy.Caption(mcrfpy.Vector(10, 10), text="Added Child 1")
child2 = mcrfpy.Caption(mcrfpy.Vector(10, 30), text="Added Child 2")
child1 = mcrfpy.Caption(pos=(10, 10), text="Added Child 1")
child2 = mcrfpy.Caption(pos=(10, 30), text="Added Child 2")
frame.children.append(child1)
frame.children.append(child2)
@ -65,33 +65,33 @@ def test_issue_42_click_callback():
return True
try:
frame1 = mcrfpy.Frame(10, 10, 200, 150)
frame1 = mcrfpy.Frame(pos=(10, 10), size=(200, 150))
ui.append(frame1)
frame1.on_click = correct_callback
print("✓ Click callback with correct signature assigned successfully")
except Exception as e:
print(f"✗ Failed to assign correct callback: {type(e).__name__}: {e}")
# Test 2: Callback with wrong signature (no args)
print("\nTest 2: Click callback with no arguments")
def wrong_callback_no_args():
print(" Wrong callback called")
try:
frame2 = mcrfpy.Frame(220, 10, 200, 150)
frame2 = mcrfpy.Frame(pos=(220, 10), size=(200, 150))
ui.append(frame2)
frame2.on_click = wrong_callback_no_args
print("✓ Click callback with no args assigned (will fail at runtime per issue #42)")
except Exception as e:
print(f"✗ Failed to assign callback: {type(e).__name__}: {e}")
# Test 3: Callback with wrong signature (too few args)
print("\nTest 3: Click callback with too few arguments")
def wrong_callback_few_args(x, y):
print(f" Wrong callback called: x={x}, y={y}")
try:
frame3 = mcrfpy.Frame(10, 170, 200, 150)
frame3 = mcrfpy.Frame(pos=(10, 170), size=(200, 150))
ui.append(frame3)
frame3.on_click = wrong_callback_few_args
print("✓ Click callback with 2 args assigned (will fail at runtime per issue #42)")

View file

@ -7,24 +7,24 @@ import sys
def test_grid_none_texture(runtime):
"""Test Grid functionality without texture"""
print("\n=== Testing Grid with None texture ===")
# Test 1: Create Grid with None texture
try:
grid = mcrfpy.Grid(10, 10, None, mcrfpy.Vector(50, 50), mcrfpy.Vector(400, 400))
grid = mcrfpy.Grid(grid_size=(10, 10), pos=(50, 50), size=(400, 400))
print("✓ Grid created successfully with None texture")
except Exception as e:
print(f"✗ Failed to create Grid with None texture: {e}")
sys.exit(1)
# Add to UI
ui = mcrfpy.sceneUI("grid_none_test")
ui.append(grid)
# Test 2: Verify grid properties
try:
grid_size = grid.grid_size
print(f"✓ Grid size: {grid_size}")
# Check texture property
texture = grid.texture
if texture is None:
@ -33,39 +33,41 @@ def test_grid_none_texture(runtime):
print(f"✗ Grid texture should be None, got: {texture}")
except Exception as e:
print(f"✗ Property access failed: {e}")
# Test 3: Access grid points and set colors
# Test 3: Access grid points using ColorLayer (new API)
# Note: GridPoint no longer has .color - must use ColorLayer system
try:
# Add a color layer to the grid
color_layer = grid.add_layer("color", z_index=-1)
# Create a checkerboard pattern with colors
for x in range(10):
for y in range(10):
point = grid.at(x, y)
if (x + y) % 2 == 0:
point.color = mcrfpy.Color(255, 0, 0, 255) # Red
color_layer.set(x, y, mcrfpy.Color(255, 0, 0, 255)) # Red
else:
point.color = mcrfpy.Color(0, 0, 255, 255) # Blue
print("✓ Successfully set grid point colors")
color_layer.set(x, y, mcrfpy.Color(0, 0, 255, 255)) # Blue
print("✓ Successfully set grid colors via ColorLayer")
except Exception as e:
print(f"✗ Failed to set grid colors: {e}")
# Test 4: Add entities to the grid
try:
# Create an entity with its own texture
entity_texture = mcrfpy.Texture("assets/kenney_tinydungeon.png", 16, 16)
entity = mcrfpy.Entity(mcrfpy.Vector(5, 5), entity_texture, 1, grid)
entity = mcrfpy.Entity((5, 5), texture=entity_texture, sprite_index=1, grid=grid)
grid.entities.append(entity)
print(f"✓ Added entity to grid, total entities: {len(grid.entities)}")
except Exception as e:
print(f"✗ Failed to add entity: {e}")
# Test 5: Test grid interaction properties
try:
# Test zoom
grid.zoom = 2.0
print(f"✓ Set zoom to: {grid.zoom}")
# Test center
grid.center = mcrfpy.Vector(5, 5)
# Test center (uses pixel coordinates)
grid.center = (200, 200)
print(f"✓ Set center to: {grid.center}")
except Exception as e:
print(f"✗ Grid properties failed: {e}")
@ -86,7 +88,7 @@ mcrfpy.setScene("grid_none_test")
# Add a background frame so we can see the grid
ui = mcrfpy.sceneUI("grid_none_test")
background = mcrfpy.Frame(0, 0, 800, 600,
background = mcrfpy.Frame(pos=(0, 0), size=(800, 600),
fill_color=mcrfpy.Color(200, 200, 200),
outline_color=mcrfpy.Color(0, 0, 0),
outline=2.0)

View file

@ -11,8 +11,8 @@ def test_UICollection():
ui = mcrfpy.sceneUI("collection_test")
# Add various UI elements
frame = mcrfpy.Frame(10, 10, 100, 100)
caption = mcrfpy.Caption(mcrfpy.Vector(120, 10), text="Test")
frame = mcrfpy.Frame(pos=(10, 10), size=(100, 100))
caption = mcrfpy.Caption(pos=(120, 10), text="Test")
# Skip sprite for now since it requires a texture
ui.append(frame)
@ -74,9 +74,9 @@ def test_UICollection():
# Test type preservation (Issue #76)
try:
# Add a frame with children to test nested collections
parent_frame = mcrfpy.Frame(250, 10, 200, 200,
parent_frame = mcrfpy.Frame(pos=(250, 10), size=(200, 200),
fill_color=mcrfpy.Color(200, 200, 200))
child_caption = mcrfpy.Caption(mcrfpy.Vector(10, 10), text="Child")
child_caption = mcrfpy.Caption(pos=(10, 10), text="Child")
parent_frame.children.append(child_caption)
ui.append(parent_frame)

View file

@ -18,50 +18,50 @@ def test_screenshot_validation():
print("Creating UI elements...")
# Bright red frame with white outline
frame1 = mcrfpy.Frame(50, 50, 300, 200,
frame1 = mcrfpy.Frame(pos=(50, 50), size=(300, 200),
fill_color=mcrfpy.Color(255, 0, 0), # Bright red
outline_color=mcrfpy.Color(255, 255, 255), # White
outline=5.0)
ui.append(frame1)
print("Added red frame at (50, 50)")
# Bright green frame
frame2 = mcrfpy.Frame(400, 50, 300, 200,
frame2 = mcrfpy.Frame(pos=(400, 50), size=(300, 200),
fill_color=mcrfpy.Color(0, 255, 0), # Bright green
outline_color=mcrfpy.Color(0, 0, 0), # Black
outline=3.0)
ui.append(frame2)
print("Added green frame at (400, 50)")
# Blue frame
frame3 = mcrfpy.Frame(50, 300, 300, 200,
frame3 = mcrfpy.Frame(pos=(50, 300), size=(300, 200),
fill_color=mcrfpy.Color(0, 0, 255), # Bright blue
outline_color=mcrfpy.Color(255, 255, 0), # Yellow
outline=4.0)
ui.append(frame3)
print("Added blue frame at (50, 300)")
# Add text captions
caption1 = mcrfpy.Caption(mcrfpy.Vector(60, 60),
caption1 = mcrfpy.Caption(pos=(60, 60),
text="RED FRAME TEST",
fill_color=mcrfpy.Color(255, 255, 255))
caption1.size = 24
caption1.font_size = 24
frame1.children.append(caption1)
caption2 = mcrfpy.Caption(mcrfpy.Vector(410, 60),
caption2 = mcrfpy.Caption(pos=(410, 60),
text="GREEN FRAME TEST",
fill_color=mcrfpy.Color(0, 0, 0))
caption2.size = 24
caption2.font_size = 24
ui.append(caption2)
caption3 = mcrfpy.Caption(mcrfpy.Vector(60, 310),
caption3 = mcrfpy.Caption(pos=(60, 310),
text="BLUE FRAME TEST",
fill_color=mcrfpy.Color(255, 255, 0))
caption3.size = 24
caption3.font_size = 24
ui.append(caption3)
# White background frame to ensure non-transparent background
background = mcrfpy.Frame(0, 0, 1024, 768,
background = mcrfpy.Frame(pos=(0, 0), size=(1024, 768),
fill_color=mcrfpy.Color(200, 200, 200)) # Light gray
# Insert at beginning so it's behind everything
ui.remove(len(ui) - 1) # Remove to re-add at start

View file

@ -11,16 +11,16 @@ mcrfpy.setScene("timer_works")
ui = mcrfpy.sceneUI("timer_works")
# Add visible content
frame = mcrfpy.Frame(100, 100, 300, 200,
frame = mcrfpy.Frame(pos=(100, 100), size=(300, 200),
fill_color=mcrfpy.Color(255, 0, 0),
outline_color=mcrfpy.Color(255, 255, 255),
outline=3.0)
ui.append(frame)
caption = mcrfpy.Caption(mcrfpy.Vector(150, 150),
caption = mcrfpy.Caption(pos=(150, 150),
text="TIMER TEST SUCCESS",
fill_color=mcrfpy.Color(255, 255, 255))
caption.size = 24
caption.font_size = 24
ui.append(caption)
# Timer callback with correct signature