Meters Module β

The Meters module provides native RDR2 circular meters with support for:
- Primary icon + progress value
- Secondary icon layer
- Overlay icon layer
- Blink and pulse states
- Dynamic meter IDs
- Queueing when more than 8 meters are created
Getting Started β
local Meters = exports.bln_lib:missionMeterUi()Basic Usage β
Create a meter β
local meter = Meters.create({
value = 0.35, -- 0.0 to 1.0
color = "COLOR_YELLOW",
blink = false,
pulse = true,
icon = {
dict = "overhead",
name = "overhead_ambient_hunter",
color = "COLOR_YELLOW"
}
})
local id = meter:getId()
print("Created meter id:", id)Update using the meter object β
meter:update({ value = 0.5 })Update a meter by ID β
Meters.update(1, {
value = 0.8,
color = "COLOR_RED",
pulse = false
})Create Options β
Meters.create(options) supports:
value(number): meter fill from0.0to1.0(auto-clamped)colorormeterColor(string): meter ring colorblink(boolean): blink primary iconpulse(boolean): pulse animationvisible(boolean): defaulttrueenabled(boolean): defaulttrueicon(table):dictortxd(string)nameortxn(string)colororimgColor(string)
secondaryorsecondaryIcon(table):enabled(boolean)dict/txd,name/txn,color/imgColor
overlay(table):enabled(boolean)dict/txd,name/txn,color/imgColor
Module Methods β
Meters.create(options) β
Creates a meter and returns a meter object.
If all native slots are busy (8 max visible), the new meter is queued automatically.
Meters.get(id) β
Returns the meter object for this ID, or nil.
Meters.exists(id) β
Returns true if meter exists.
Meters.update(id, patch) β
Updates a meter by ID.
Returns:
trueon successfalse, "meter_not_found"if ID does not exist
Meters.setSecondary(id, options) β
Enables/updates/disables secondary icon data for a meter.
Meters.setOverlay(id, options) β
Enables/updates/disables overlay icon data for a meter.
Meters.destroy(id) β
Destroys a meter by ID.
Returns:
trueon successfalse, "meter_not_found"if ID does not exist
Meters.destroyAll() β
Destroys all active and queued meters.
Meters.count() β
Returns current meter count.
Meters.getAllIds() β
Returns sorted list of meter IDs.
Meters.getSnapshot(id) β
Returns a snapshot table for a meter, or nil.
Meters.getAllSnapshots() β
Returns a snapshot array of all meters.
Meter Object Methods β
Methods available on the object returned by Meters.create(...):
meter:getId()meter:isQueued()meter:getSnapshot()meter:update(patch)meter:setSecondary(options)meter:clearSecondary()meter:setOverlay(options)meter:clearOverlay()meter:show()meter:hide()meter:enable()meter:disable()meter:destroy()
Secondary and Overlay Behavior β
-- Disable secondary
meter:setSecondary({ enabled = false })
-- Disable overlay
meter:setOverlay({ enabled = false })
-- Also valid: nil disables
meter:setSecondary(nil)
meter:setOverlay(nil)Calling setSecondary(...) or setOverlay(...) again updates existing values.
Queue and Slot Behavior β
- Native UI has 8 visible meter slots.
- Additional meters are queued (FIFO).
- When a visible meter is removed, the next queued meter is promoted.
- Active meters are compacted in stable left-to-right order.
Example:
- Create
1..9 1..8visible,9queued- Remove
1 - Visible order becomes
2..9(with9at the end)
Example: Full Flow β
local Meters = exports.bln_lib:missionMeterUi()
local meter = Meters.create({
value = 0.2,
color = "COLOR_GREEN",
icon = {
dict = "overhead",
name = "overhead_ambient_hunter",
color = "COLOR_GREEN"
}
})
if meter then
meter:setSecondary({
enabled = true,
dict = "overhead",
name = "overhead_generic_arrow",
color = "COLOR_RED"
})
meter:update({ value = 0.9, pulse = true })
Wait(5000)
meter:destroy()
end