161 lines
4.7 KiB
Python
161 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Debug version of Dijkstra pathfinding to diagnose visualization issues
|
|
"""
|
|
|
|
import mcrfpy
|
|
import sys
|
|
|
|
# Colors
|
|
WALL_COLOR = mcrfpy.Color(60, 30, 30)
|
|
FLOOR_COLOR = mcrfpy.Color(200, 200, 220)
|
|
PATH_COLOR = mcrfpy.Color(200, 250, 220)
|
|
ENTITY_COLORS = [
|
|
mcrfpy.Color(255, 100, 100), # Entity 1 - Red
|
|
mcrfpy.Color(100, 255, 100), # Entity 2 - Green
|
|
mcrfpy.Color(100, 100, 255), # Entity 3 - Blue
|
|
]
|
|
|
|
# Global state
|
|
grid = None
|
|
entities = []
|
|
first_point = None
|
|
second_point = None
|
|
|
|
def create_simple_map():
|
|
"""Create a simple test map"""
|
|
global grid, entities
|
|
|
|
mcrfpy.createScene("dijkstra_debug")
|
|
|
|
# Small grid for easy debugging
|
|
grid = mcrfpy.Grid(grid_x=10, grid_y=10)
|
|
grid.fill_color = mcrfpy.Color(0, 0, 0)
|
|
|
|
print("Initializing 10x10 grid...")
|
|
|
|
# Initialize all as floor
|
|
for y in range(10):
|
|
for x in range(10):
|
|
grid.at(x, y).walkable = True
|
|
grid.at(x, y).transparent = True
|
|
grid.at(x, y).color = FLOOR_COLOR
|
|
|
|
# Add a simple wall
|
|
print("Adding walls at:")
|
|
walls = [(5, 2), (5, 3), (5, 4), (5, 5), (5, 6)]
|
|
for x, y in walls:
|
|
print(f" Wall at ({x}, {y})")
|
|
grid.at(x, y).walkable = False
|
|
grid.at(x, y).color = WALL_COLOR
|
|
|
|
# Create 3 entities
|
|
entity_positions = [(2, 5), (8, 5), (5, 8)]
|
|
entities = []
|
|
|
|
print("\nCreating entities at:")
|
|
for i, (x, y) in enumerate(entity_positions):
|
|
print(f" Entity {i+1} at ({x}, {y})")
|
|
entity = mcrfpy.Entity(x, y)
|
|
entity.sprite_index = 49 + i # '1', '2', '3'
|
|
grid.entities.append(entity)
|
|
entities.append(entity)
|
|
|
|
return grid
|
|
|
|
def test_path_highlighting():
|
|
"""Test path highlighting with debug output"""
|
|
print("\n" + "="*50)
|
|
print("Testing path highlighting...")
|
|
|
|
# Select first two entities
|
|
e1 = entities[0]
|
|
e2 = entities[1]
|
|
|
|
print(f"\nEntity 1 position: ({e1.x}, {e1.y})")
|
|
print(f"Entity 2 position: ({e2.x}, {e2.y})")
|
|
|
|
# Use entity.path_to()
|
|
print("\nCalling entity.path_to()...")
|
|
path = e1.path_to(int(e2.x), int(e2.y))
|
|
|
|
print(f"Path returned: {path}")
|
|
print(f"Path length: {len(path)} steps")
|
|
|
|
if path:
|
|
print("\nHighlighting path cells:")
|
|
for i, (x, y) in enumerate(path):
|
|
print(f" Step {i}: ({x}, {y})")
|
|
# Get current color for debugging
|
|
cell = grid.at(x, y)
|
|
old_color = (cell.color.r, cell.color.g, cell.color.b)
|
|
|
|
# Set new color
|
|
cell.color = PATH_COLOR
|
|
new_color = (cell.color.r, cell.color.g, cell.color.b)
|
|
|
|
print(f" Color changed from {old_color} to {new_color}")
|
|
print(f" Walkable: {cell.walkable}")
|
|
|
|
# Also test grid's Dijkstra methods
|
|
print("\n" + "-"*30)
|
|
print("Testing grid Dijkstra methods...")
|
|
|
|
grid.compute_dijkstra(int(e1.x), int(e1.y))
|
|
grid_path = grid.get_dijkstra_path(int(e2.x), int(e2.y))
|
|
distance = grid.get_dijkstra_distance(int(e2.x), int(e2.y))
|
|
|
|
print(f"Grid path: {grid_path}")
|
|
print(f"Grid distance: {distance}")
|
|
|
|
# Verify colors were set
|
|
print("\nVerifying cell colors after highlighting:")
|
|
for x, y in path[:3]: # Check first 3 cells
|
|
cell = grid.at(x, y)
|
|
color = (cell.color.r, cell.color.g, cell.color.b)
|
|
expected = (PATH_COLOR.r, PATH_COLOR.g, PATH_COLOR.b)
|
|
match = color == expected
|
|
print(f" Cell ({x}, {y}): color={color}, expected={expected}, match={match}")
|
|
|
|
def handle_keypress(scene_name, keycode):
|
|
"""Simple keypress handler"""
|
|
if keycode == 81 or keycode == 113 or keycode == 256: # Q/q/ESC
|
|
print("\nExiting debug...")
|
|
sys.exit(0)
|
|
elif keycode == 32: # Space
|
|
print("\nSpace pressed - retesting path highlighting...")
|
|
test_path_highlighting()
|
|
|
|
# Create the map
|
|
print("Dijkstra Debug Test")
|
|
print("===================")
|
|
grid = create_simple_map()
|
|
|
|
# Initial path test
|
|
test_path_highlighting()
|
|
|
|
# Set up UI
|
|
ui = mcrfpy.sceneUI("dijkstra_debug")
|
|
ui.append(grid)
|
|
|
|
# Position and scale
|
|
grid.position = (50, 50)
|
|
grid.size = (400, 400) # 10*40
|
|
|
|
# Add title
|
|
title = mcrfpy.Caption("Dijkstra Debug - Press SPACE to retest, Q to quit", 50, 10)
|
|
title.fill_color = mcrfpy.Color(255, 255, 255)
|
|
ui.append(title)
|
|
|
|
# Add debug info
|
|
info = mcrfpy.Caption("Check console for debug output", 50, 470)
|
|
info.fill_color = mcrfpy.Color(200, 200, 200)
|
|
ui.append(info)
|
|
|
|
# Set up scene
|
|
mcrfpy.keypressScene(handle_keypress)
|
|
mcrfpy.setScene("dijkstra_debug")
|
|
|
|
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("Press SPACE to retest, Q to quit.") |