217 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
#!/usr/bin/env python3
 | 
						|
"""Generate documentation screenshots for McRogueFace UI elements - Simple version"""
 | 
						|
import mcrfpy
 | 
						|
from mcrfpy import automation
 | 
						|
import sys
 | 
						|
import os
 | 
						|
 | 
						|
# Crypt of Sokoban color scheme
 | 
						|
FRAME_COLOR = mcrfpy.Color(64, 64, 128)
 | 
						|
SHADOW_COLOR = mcrfpy.Color(64, 64, 86)
 | 
						|
BOX_COLOR = mcrfpy.Color(96, 96, 160)
 | 
						|
WHITE = mcrfpy.Color(255, 255, 255)
 | 
						|
BLACK = mcrfpy.Color(0, 0, 0)
 | 
						|
GREEN = mcrfpy.Color(0, 255, 0)
 | 
						|
RED = mcrfpy.Color(255, 0, 0)
 | 
						|
 | 
						|
# Create texture for sprites
 | 
						|
sprite_texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
 | 
						|
 | 
						|
# Output directory
 | 
						|
output_dir = "mcrogueface.github.io/images"
 | 
						|
if not os.path.exists(output_dir):
 | 
						|
    os.makedirs(output_dir)
 | 
						|
 | 
						|
def create_caption(x, y, text, font_size=16, text_color=WHITE, outline_color=BLACK):
 | 
						|
    """Helper function to create captions with common settings"""
 | 
						|
    caption = mcrfpy.Caption(mcrfpy.Vector(x, y), text=text)
 | 
						|
    caption.size = font_size
 | 
						|
    caption.fill_color = text_color
 | 
						|
    caption.outline_color = outline_color
 | 
						|
    return caption
 | 
						|
 | 
						|
# Screenshot counter
 | 
						|
screenshot_count = 0
 | 
						|
total_screenshots = 4
 | 
						|
 | 
						|
def screenshot_and_continue(runtime):
 | 
						|
    """Take a screenshot and move to the next scene"""
 | 
						|
    global screenshot_count
 | 
						|
    
 | 
						|
    if screenshot_count == 0:
 | 
						|
        # Caption example
 | 
						|
        print("Creating Caption example...")
 | 
						|
        mcrfpy.createScene("caption_example")
 | 
						|
        ui = mcrfpy.sceneUI("caption_example")
 | 
						|
        
 | 
						|
        bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
 | 
						|
        ui.append(bg)
 | 
						|
        
 | 
						|
        title = create_caption(200, 50, "Caption Examples", 32)
 | 
						|
        ui.append(title)
 | 
						|
        
 | 
						|
        caption1 = create_caption(100, 150, "Large Caption (24pt)", 24)
 | 
						|
        ui.append(caption1)
 | 
						|
        
 | 
						|
        caption2 = create_caption(100, 200, "Medium Caption (18pt)", 18, GREEN)
 | 
						|
        ui.append(caption2)
 | 
						|
        
 | 
						|
        caption3 = create_caption(100, 240, "Small Caption (14pt)", 14, RED)
 | 
						|
        ui.append(caption3)
 | 
						|
        
 | 
						|
        caption_bg = mcrfpy.Frame(100, 300, 300, 50, fill_color=BOX_COLOR)
 | 
						|
        ui.append(caption_bg)
 | 
						|
        caption4 = create_caption(110, 315, "Caption with Background", 16)
 | 
						|
        ui.append(caption4)
 | 
						|
        
 | 
						|
        mcrfpy.setScene("caption_example")
 | 
						|
        mcrfpy.setTimer("next1", lambda r: capture_screenshot("ui_caption_example.png"), 200)
 | 
						|
        
 | 
						|
    elif screenshot_count == 1:
 | 
						|
        # Sprite example
 | 
						|
        print("Creating Sprite example...")
 | 
						|
        mcrfpy.createScene("sprite_example")
 | 
						|
        ui = mcrfpy.sceneUI("sprite_example")
 | 
						|
        
 | 
						|
        bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
 | 
						|
        ui.append(bg)
 | 
						|
        
 | 
						|
        title = create_caption(250, 50, "Sprite Examples", 32)
 | 
						|
        ui.append(title)
 | 
						|
        
 | 
						|
        sprite_bg = mcrfpy.Frame(100, 150, 600, 300, fill_color=BOX_COLOR)
 | 
						|
        ui.append(sprite_bg)
 | 
						|
        
 | 
						|
        player_label = create_caption(150, 180, "Player", 14)
 | 
						|
        ui.append(player_label)
 | 
						|
        player_sprite = mcrfpy.Sprite(150, 200, sprite_texture, 84, 3.0)
 | 
						|
        ui.append(player_sprite)
 | 
						|
        
 | 
						|
        enemy_label = create_caption(250, 180, "Enemies", 14)
 | 
						|
        ui.append(enemy_label)
 | 
						|
        enemy1 = mcrfpy.Sprite(250, 200, sprite_texture, 123, 3.0)
 | 
						|
        ui.append(enemy1)
 | 
						|
        enemy2 = mcrfpy.Sprite(300, 200, sprite_texture, 107, 3.0)
 | 
						|
        ui.append(enemy2)
 | 
						|
        
 | 
						|
        boulder_label = create_caption(400, 180, "Boulder", 14)
 | 
						|
        ui.append(boulder_label)
 | 
						|
        boulder_sprite = mcrfpy.Sprite(400, 200, sprite_texture, 66, 3.0)
 | 
						|
        ui.append(boulder_sprite)
 | 
						|
        
 | 
						|
        exit_label = create_caption(500, 180, "Exit States", 14)
 | 
						|
        ui.append(exit_label)
 | 
						|
        exit_locked = mcrfpy.Sprite(500, 200, sprite_texture, 45, 3.0)
 | 
						|
        ui.append(exit_locked)
 | 
						|
        exit_open = mcrfpy.Sprite(550, 200, sprite_texture, 21, 3.0)
 | 
						|
        ui.append(exit_open)
 | 
						|
        
 | 
						|
        mcrfpy.setScene("sprite_example")
 | 
						|
        mcrfpy.setTimer("next2", lambda r: capture_screenshot("ui_sprite_example.png"), 200)
 | 
						|
        
 | 
						|
    elif screenshot_count == 2:
 | 
						|
        # Frame example
 | 
						|
        print("Creating Frame example...")
 | 
						|
        mcrfpy.createScene("frame_example")
 | 
						|
        ui = mcrfpy.sceneUI("frame_example")
 | 
						|
        
 | 
						|
        bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=SHADOW_COLOR)
 | 
						|
        ui.append(bg)
 | 
						|
        
 | 
						|
        title = create_caption(250, 30, "Frame Examples", 32)
 | 
						|
        ui.append(title)
 | 
						|
        
 | 
						|
        frame1 = mcrfpy.Frame(50, 100, 200, 150, fill_color=FRAME_COLOR)
 | 
						|
        ui.append(frame1)
 | 
						|
        label1 = create_caption(60, 110, "Basic Frame", 16)
 | 
						|
        ui.append(label1)
 | 
						|
        
 | 
						|
        frame2 = mcrfpy.Frame(300, 100, 200, 150, fill_color=BOX_COLOR, 
 | 
						|
                             outline_color=WHITE, outline=2.0)
 | 
						|
        ui.append(frame2)
 | 
						|
        label2 = create_caption(310, 110, "Frame with Outline", 16)
 | 
						|
        ui.append(label2)
 | 
						|
        
 | 
						|
        frame3 = mcrfpy.Frame(550, 100, 200, 150, fill_color=FRAME_COLOR,
 | 
						|
                             outline_color=WHITE, outline=1)
 | 
						|
        ui.append(frame3)
 | 
						|
        inner_frame = mcrfpy.Frame(570, 130, 160, 90, fill_color=BOX_COLOR)
 | 
						|
        ui.append(inner_frame)
 | 
						|
        label3 = create_caption(560, 110, "Nested Frames", 16)
 | 
						|
        ui.append(label3)
 | 
						|
        
 | 
						|
        mcrfpy.setScene("frame_example")
 | 
						|
        mcrfpy.setTimer("next3", lambda r: capture_screenshot("ui_frame_example.png"), 200)
 | 
						|
        
 | 
						|
    elif screenshot_count == 3:
 | 
						|
        # Grid example  
 | 
						|
        print("Creating Grid example...")
 | 
						|
        mcrfpy.createScene("grid_example")
 | 
						|
        ui = mcrfpy.sceneUI("grid_example")
 | 
						|
        
 | 
						|
        bg = mcrfpy.Frame(0, 0, 800, 600, fill_color=FRAME_COLOR)
 | 
						|
        ui.append(bg)
 | 
						|
        
 | 
						|
        title = create_caption(250, 30, "Grid Example", 32)
 | 
						|
        ui.append(title)
 | 
						|
        
 | 
						|
        grid = mcrfpy.Grid(20, 15, sprite_texture, 
 | 
						|
                          mcrfpy.Vector(100, 100), mcrfpy.Vector(320, 240))
 | 
						|
        
 | 
						|
        # Set up dungeon tiles
 | 
						|
        for x in range(20):
 | 
						|
            for y in range(15):
 | 
						|
                if x == 0 or x == 19 or y == 0 or y == 14:
 | 
						|
                    # Walls
 | 
						|
                    grid.at((x, y)).tilesprite = 3
 | 
						|
                    grid.at((x, y)).walkable = False
 | 
						|
                else:
 | 
						|
                    # Floor
 | 
						|
                    grid.at((x, y)).tilesprite = 48
 | 
						|
                    grid.at((x, y)).walkable = True
 | 
						|
        
 | 
						|
        # Add some internal walls
 | 
						|
        for x in range(5, 15):
 | 
						|
            grid.at((x, 7)).tilesprite = 3
 | 
						|
            grid.at((x, 7)).walkable = False
 | 
						|
        for y in range(3, 8):
 | 
						|
            grid.at((10, y)).tilesprite = 3
 | 
						|
            grid.at((10, y)).walkable = False
 | 
						|
        
 | 
						|
        # Add a door
 | 
						|
        grid.at((10, 7)).tilesprite = 131
 | 
						|
        grid.at((10, 7)).walkable = True
 | 
						|
        
 | 
						|
        ui.append(grid)
 | 
						|
        
 | 
						|
        grid_label = create_caption(100, 480, "20x15 Grid - Simple Dungeon Layout", 16)
 | 
						|
        ui.append(grid_label)
 | 
						|
        
 | 
						|
        mcrfpy.setScene("grid_example")
 | 
						|
        mcrfpy.setTimer("next4", lambda r: capture_screenshot("ui_grid_example.png"), 200)
 | 
						|
        
 | 
						|
    else:
 | 
						|
        print("\nAll screenshots captured successfully!")
 | 
						|
        print(f"Screenshots saved to: {output_dir}/")
 | 
						|
        mcrfpy.exit()
 | 
						|
        return
 | 
						|
        
 | 
						|
def capture_screenshot(filename):
 | 
						|
    """Capture a screenshot"""
 | 
						|
    global screenshot_count
 | 
						|
    full_path = f"{output_dir}/{filename}"
 | 
						|
    result = automation.screenshot(full_path)
 | 
						|
    print(f"Screenshot {screenshot_count + 1}/{total_screenshots}: {filename} - {'Success' if result else 'Failed'}")
 | 
						|
    screenshot_count += 1
 | 
						|
    
 | 
						|
    # Schedule next scene
 | 
						|
    mcrfpy.setTimer("continue", screenshot_and_continue, 300)
 | 
						|
 | 
						|
# Start the process
 | 
						|
print("Starting screenshot generation...")
 | 
						|
mcrfpy.setTimer("start", screenshot_and_continue, 500)
 | 
						|
 | 
						|
# Safety timeout
 | 
						|
mcrfpy.setTimer("safety", lambda r: mcrfpy.exit(), 30000)
 | 
						|
 | 
						|
print("Setup complete. Game loop starting...") |