140 lines
3.6 KiB
Python
140 lines
3.6 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")
|
|
title.font = mcrfpy.default_font
|
|
title.font_size = 24
|
|
title.font_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, 32, 32)
|
|
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.set_tile(x, y, FLOOR)
|
|
|
|
# Add walls around edges
|
|
for x in range(20):
|
|
grid.set_tile(x, 0, WALL)
|
|
grid.set_tile(x, 14, WALL)
|
|
for y in range(15):
|
|
grid.set_tile(0, y, WALL)
|
|
grid.set_tile(19, y, WALL)
|
|
|
|
# Create entities
|
|
# Player at center
|
|
player = mcrfpy.Entity(10, 7)
|
|
player.texture = texture
|
|
player.sprite_index = 84 # Player sprite
|
|
|
|
# Enemies
|
|
rat1 = mcrfpy.Entity(5, 5)
|
|
rat1.texture = texture
|
|
rat1.sprite_index = 123 # Rat
|
|
|
|
rat2 = mcrfpy.Entity(15, 5)
|
|
rat2.texture = texture
|
|
rat2.sprite_index = 123 # Rat
|
|
|
|
big_rat = mcrfpy.Entity(7, 10)
|
|
big_rat.texture = texture
|
|
big_rat.sprite_index = 130 # Big rat
|
|
|
|
cyclops = mcrfpy.Entity(13, 10)
|
|
cyclops.texture = texture
|
|
cyclops.sprite_index = 109 # Cyclops
|
|
|
|
# Items
|
|
chest = mcrfpy.Entity(3, 3)
|
|
chest.texture = texture
|
|
chest.sprite_index = 89 # Chest
|
|
|
|
boulder = mcrfpy.Entity(10, 5)
|
|
boulder.texture = texture
|
|
boulder.sprite_index = 66 # Boulder
|
|
|
|
key = mcrfpy.Entity(17, 12)
|
|
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) |