145 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
"""Generate entity documentation screenshot with proper font loading"""
 | 
						|
 | 
						|
import mcrfpy
 | 
						|
from mcrfpy import automation
 | 
						|
import sys
 | 
						|
 | 
						|
def capture_entity(runtime):
 | 
						|
    """Capture entity example after render loop starts"""
 | 
						|
    
 | 
						|
    # Take screenshot
 | 
						|
    automation.screenshot("mcrogueface.github.io/images/ui_entity_example.png")
 | 
						|
    print("Entity screenshot saved!")
 | 
						|
    
 | 
						|
    # Exit after capturing
 | 
						|
    sys.exit(0)
 | 
						|
 | 
						|
# Create scene
 | 
						|
mcrfpy.createScene("entities")
 | 
						|
 | 
						|
# Use the default font which is already loaded
 | 
						|
# Instead of: font = mcrfpy.Font("assets/JetbrainsMono.ttf")
 | 
						|
# We use: mcrfpy.default_font (which is already loaded by the engine)
 | 
						|
 | 
						|
# Title
 | 
						|
title = mcrfpy.Caption((400, 30), "Entity Example - Roguelike Characters", font=mcrfpy.default_font)
 | 
						|
#title.font = mcrfpy.default_font
 | 
						|
#title.font_size = 24
 | 
						|
title.size=24
 | 
						|
#title.font_color = (255, 255, 255)
 | 
						|
#title.text_color = (255,255,255)
 | 
						|
 | 
						|
# Create a grid background
 | 
						|
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
 | 
						|
 | 
						|
# Create grid with entities - using 2x scale (32x32 pixel tiles)
 | 
						|
#grid = mcrfpy.Grid((100, 100), (20, 15), texture, 16, 16) # I can never get the args right for this thing
 | 
						|
t = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
 | 
						|
grid = mcrfpy.Grid(20, 15, t, (10, 10), (1014, 758))
 | 
						|
grid.zoom = 2.0
 | 
						|
#grid.texture = texture
 | 
						|
 | 
						|
# Define tile types
 | 
						|
FLOOR = 58      # Stone floor
 | 
						|
WALL = 11       # Stone wall
 | 
						|
 | 
						|
# Fill with floor
 | 
						|
for x in range(20):
 | 
						|
    for y in range(15):
 | 
						|
        grid.at((x, y)).tilesprite = WALL
 | 
						|
 | 
						|
# Add walls around edges
 | 
						|
for x in range(20):
 | 
						|
    grid.at((x, 0)).tilesprite = WALL
 | 
						|
    grid.at((x, 14)).tilesprite = WALL
 | 
						|
for y in range(15):
 | 
						|
    grid.at((0, y)).tilesprite = WALL
 | 
						|
    grid.at((19, y)).tilesprite = WALL
 | 
						|
 | 
						|
# Create entities
 | 
						|
# Player at center
 | 
						|
player = mcrfpy.Entity((10, 7), t, 84)
 | 
						|
#player.texture = texture
 | 
						|
#player.sprite_index = 84  # Player sprite
 | 
						|
 | 
						|
# Enemies
 | 
						|
rat1 = mcrfpy.Entity((5, 5), t, 123)
 | 
						|
#rat1.texture = texture
 | 
						|
#rat1.sprite_index = 123  # Rat
 | 
						|
 | 
						|
rat2 = mcrfpy.Entity((15, 5), t, 123)
 | 
						|
#rat2.texture = texture  
 | 
						|
#rat2.sprite_index = 123  # Rat
 | 
						|
 | 
						|
big_rat = mcrfpy.Entity((7, 10), t, 130)
 | 
						|
#big_rat.texture = texture
 | 
						|
#big_rat.sprite_index = 130  # Big rat
 | 
						|
 | 
						|
cyclops = mcrfpy.Entity((13, 10), t, 109)
 | 
						|
#cyclops.texture = texture
 | 
						|
#cyclops.sprite_index = 109  # Cyclops
 | 
						|
 | 
						|
# Items
 | 
						|
chest = mcrfpy.Entity((3, 3), t, 89)
 | 
						|
#chest.texture = texture
 | 
						|
#chest.sprite_index = 89  # Chest
 | 
						|
 | 
						|
boulder = mcrfpy.Entity((10, 5), t, 66)
 | 
						|
#boulder.texture = texture
 | 
						|
#boulder.sprite_index = 66  # Boulder
 | 
						|
key = mcrfpy.Entity((17, 12), t, 384)
 | 
						|
#key.texture = texture
 | 
						|
#key.sprite_index = 384  # Key
 | 
						|
 | 
						|
# Add all entities to grid
 | 
						|
grid.entities.append(player)
 | 
						|
grid.entities.append(rat1)
 | 
						|
grid.entities.append(rat2)
 | 
						|
grid.entities.append(big_rat)
 | 
						|
grid.entities.append(cyclops)
 | 
						|
grid.entities.append(chest)
 | 
						|
grid.entities.append(boulder)
 | 
						|
grid.entities.append(key)
 | 
						|
 | 
						|
# Labels
 | 
						|
entity_label = mcrfpy.Caption((100, 580), "Entities move independently on the grid. Grid scale: 2x (32x32 pixels)")
 | 
						|
#entity_label.font = mcrfpy.default_font
 | 
						|
#entity_label.font_color = (255, 255, 255)
 | 
						|
 | 
						|
info = mcrfpy.Caption((100, 600), "Player (center), Enemies (rats, cyclops), Items (chest, boulder, key)")
 | 
						|
#info.font = mcrfpy.default_font
 | 
						|
#info.font_size = 14
 | 
						|
#info.font_color = (200, 200, 200)
 | 
						|
 | 
						|
# Legend frame
 | 
						|
legend_frame = mcrfpy.Frame(50, 50, 200, 150)
 | 
						|
#legend_frame.bgcolor = (64, 64, 128)
 | 
						|
#legend_frame.outline = 2
 | 
						|
 | 
						|
legend_title = mcrfpy.Caption((150, 60), "Entity Types")
 | 
						|
#legend_title.font = mcrfpy.default_font
 | 
						|
#legend_title.font_color = (255, 255, 255)
 | 
						|
#legend_title.centered = True
 | 
						|
 | 
						|
#legend_text = mcrfpy.Caption((60, 90), "Player: @\nRat: r\nBig Rat: R\nCyclops: C\nChest: $\nBoulder: O\nKey: k")
 | 
						|
#legend_text.font = mcrfpy.default_font
 | 
						|
#legend_text.font_size = 12
 | 
						|
#legend_text.font_color = (255, 255, 255)
 | 
						|
 | 
						|
# Add all to scene
 | 
						|
ui = mcrfpy.sceneUI("entities")
 | 
						|
ui.append(grid)
 | 
						|
ui.append(title)
 | 
						|
ui.append(entity_label)
 | 
						|
ui.append(info)
 | 
						|
ui.append(legend_frame)
 | 
						|
ui.append(legend_title)
 | 
						|
#ui.append(legend_text)
 | 
						|
 | 
						|
# Switch to scene
 | 
						|
mcrfpy.setScene("entities")
 | 
						|
 | 
						|
# Set timer to capture after rendering starts
 | 
						|
mcrfpy.setTimer("capture", capture_entity, 100)
 |