Files
YataiDONNijiiro/Scripts/game/combo_announce.lua
2026-09-30 15:29:22 -04:00

72 lines
2.2 KiB
Lua

-- Combo announce (100/200/.../1000+) drawn from the per-digit announce_digit strip.
ComboAnnounce = {}
ComboAnnounce.__index = ComboAnnounce
local CELL = 104.0
local GROUP_CX = 204.0 -- combo_num's origin inside the scroll
local PITCH_WIDE = 64.0
local PITCH_NARROW = 54.0
local SX_NARROW = 0.85
local NARROW_X0 = -70.0 -- leftmost cell, local to GROUP_CX
local TEXTMC_WIDE = 392.0
local TEXTMC_NARROW = 398.0
local TEXT_DX = -84.0
local TEXT_W = 123.0
-- sx, pitch, first_cx (centre of the leftmost cell, scroll frame), textmc_x
local function layout(digits)
if digits <= 3 then
return 1.0, PITCH_WIDE, GROUP_CX - PITCH_WIDE * (digits - 1) * 0.5, TEXTMC_WIDE
end
if digits == 4 then
return SX_NARROW, PITCH_NARROW, GROUP_CX + NARROW_X0, TEXTMC_NARROW
end
local k = 4.0 / digits
local pitch = PITCH_NARROW * k
return SX_NARROW * k, pitch, GROUP_CX + 92.0 - pitch * (digits - 1), TEXTMC_NARROW
end
function ComboAnnounce.new(combo, player_num)
local self = setmetatable({}, ComboAnnounce)
local suffix = player_num .. "p"
self.t_bg = tex.get_texture("game/combo/announce_bg_" .. suffix)
self.t_digit = tex.get_texture("game/combo/announce_digit_" .. suffix)
self.t_text = tex.get_texture("game/combo/announce_text")
self.number = tostring(combo)
return self
end
function ComboAnnounce:draw(y, fade_value)
if not self.t_bg then return end
tex.draw_texture(self.t_bg, { y = y, fade = fade_value })
if not self.t_digit then return end
local n = #self.number
local sx, pitch, first_cx, textmc_x = layout(n)
local dw = CELL * sx
for i = 1, n do
local cx = first_cx + pitch * (i - 1)
tex.draw_texture(self.t_digit, {
frame = tonumber(self.number:sub(i, i)),
x = cx - dw * 0.5,
y = y,
x2 = dw - CELL, -- horizontal condense only; sy stays 1
fade = fade_value,
})
end
if self.t_text then
tex.draw_texture(self.t_text, {
x = textmc_x + sx * TEXT_DX,
y = y,
x2 = TEXT_W * (sx - 1.0),
fade = fade_value,
})
end
end
return ComboAnnounce