Skip to content

Render API Examples

Complete Render() callbacks that use the functions from the Render API reference.

Screen-Space HUD

Draws the assigned player's resources on a rounded panel in the top-left corner.

local resources = {
    { "Food", PlayerAttribute.FOOD },
    { "Wood", PlayerAttribute.WOOD },
    { "Gold", PlayerAttribute.GOLD },
    { "Stone", PlayerAttribute.STONE },
}

function Render()
    local white = Color(255, 255, 255, 255)
    local panel = Color(0, 0, 0, 140)

    RenderRectFilled(Vector2(10, 30), Vector2(170, 40 + #resources * 20), panel, 6.0, 0)
    for i, entry in ipairs(resources) do
        local amount = math.floor(GetAttribute(entry[2]))
        RenderText(entry[1] .. ": " .. amount, Vector2(20, 30 + i * 20), 16.0, white, false)
    end
end

Owned-Unit Overlay

Fills the footprint of every villager of the assigned player. The color is a module setting the player can change in the CONTROL menu.

function Load()
    Settings.AddColor("Villager Color", Color(0, 255, 0, 90))
end

function Render()
    local player = GetAssignedPlayer()
    if not player then
        return
    end

    local color = Settings.GetColor("Villager Color", Color(0, 255, 0, 90))
    for _, villager in ipairs(player:GetObjectsByClass(UnitClass.VILLAGER)) do
        RenderObjectBoundsFilled(villager, color)
    end
end

World Marker

Circles the object under the mouse cursor and labels it.

function Render()
    local player = GetAssignedPlayer()
    if not player then
        return
    end

    local hovered = player:GetMouseHoveredObject()
    if hovered and hovered:IsAlive() then
        local pos = hovered:GetPosition()
        RenderWorldCircle(pos, 1.0, Color(255, 128, 0, 255), 2.0, 24)
        RenderWorldText(hovered:GetTypeName(), pos, 14.0, Color(255, 255, 255, 255))
    end
end

Minimap Enemy Markers

Marks every enemy town center on the minimap.

function Render()
    for i = 0, GetPlayerCount() - 1 do
        local player = GetPlayerById(i)
        if player and IsEnemyPlayer(player) then
            for _, tc in ipairs(player:GetTownCenters()) do
                RenderMinimapDot(tc:GetPosition(), 3.0, Color(255, 0, 0, 255))
            end
        end
    end
end