131 lines
3.3 KiB
Python
131 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Generate grid documentation screenshot for McRogueFace"""
|
|
|
|
import mcrfpy
|
|
from mcrfpy import automation
|
|
import sys
|
|
|
|
def capture_grid(runtime):
|
|
"""Capture grid example after render loop starts"""
|
|
|
|
# Take screenshot
|
|
automation.screenshot("mcrogueface.github.io/images/ui_grid_example.png")
|
|
print("Grid screenshot saved!")
|
|
|
|
# Exit after capturing
|
|
sys.exit(0)
|
|
|
|
# Create scene
|
|
mcrfpy.createScene("grid")
|
|
|
|
# Load texture
|
|
texture = mcrfpy.Texture("assets/kenney_TD_MR_IP.png", 16, 16)
|
|
|
|
# Title
|
|
title = mcrfpy.Caption(400, 30, "Grid Example - Dungeon View")
|
|
title.font = mcrfpy.default_font
|
|
title.font_size = 24
|
|
title.font_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
|
|
|
|
# Define tile types from Crypt of Sokoban
|
|
FLOOR = 58 # Stone floor
|
|
WALL = 11 # Stone wall
|
|
DOOR = 28 # Closed door
|
|
CHEST = 89 # Treasure chest
|
|
BUTTON = 250 # Floor button
|
|
EXIT = 45 # Locked exit
|
|
BOULDER = 66 # Boulder
|
|
|
|
# Create a simple dungeon room layout
|
|
# Fill with walls first
|
|
for x in range(20):
|
|
for y in range(15):
|
|
grid.set_tile(x, y, WALL)
|
|
|
|
# Carve out room
|
|
for x in range(2, 18):
|
|
for y in range(2, 13):
|
|
grid.set_tile(x, y, FLOOR)
|
|
|
|
# Add door
|
|
grid.set_tile(10, 2, DOOR)
|
|
|
|
# Add some features
|
|
grid.set_tile(5, 5, CHEST)
|
|
grid.set_tile(15, 10, BUTTON)
|
|
grid.set_tile(10, 12, EXIT)
|
|
grid.set_tile(8, 8, BOULDER)
|
|
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
|
|
|
|
# Enemy entities
|
|
rat1 = mcrfpy.Entity(12, 5)
|
|
rat1.texture = texture
|
|
rat1.sprite_index = 123 # Rat
|
|
|
|
rat2 = mcrfpy.Entity(14, 9)
|
|
rat2.texture = texture
|
|
rat2.sprite_index = 123 # 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)
|
|
|
|
# Create a smaller grid showing tile palette
|
|
palette_label = mcrfpy.Caption(100, 600, "Tile Types:")
|
|
palette_label.font = mcrfpy.default_font
|
|
palette_label.font_color = (255, 255, 255)
|
|
|
|
palette = mcrfpy.Grid(250, 580, 7, 1, texture, 32, 32)
|
|
palette.texture = texture
|
|
palette.set_tile(0, 0, FLOOR)
|
|
palette.set_tile(1, 0, WALL)
|
|
palette.set_tile(2, 0, DOOR)
|
|
palette.set_tile(3, 0, CHEST)
|
|
palette.set_tile(4, 0, BUTTON)
|
|
palette.set_tile(5, 0, EXIT)
|
|
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.font = mcrfpy.default_font
|
|
l.font_size = 10
|
|
l.font_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.font = mcrfpy.default_font
|
|
info.font_size = 14
|
|
info.font_color = (200, 200, 200)
|
|
|
|
# Add all elements to scene
|
|
ui = mcrfpy.sceneUI("grid")
|
|
ui.append(title)
|
|
ui.append(grid)
|
|
ui.append(palette_label)
|
|
ui.append(palette)
|
|
ui.append(info)
|
|
|
|
# Switch to scene
|
|
mcrfpy.setScene("grid")
|
|
|
|
# Set timer to capture after rendering starts
|
|
mcrfpy.setTimer("capture", capture_grid, 100) |