Files
PyTaikoGreen/Scripts/result/result_retry_message.lua
T
2026-10-12 17:16:15 -04:00

51 lines
2.0 KiB
Lua

-- "Revive!" message after a failed result, before the retry mini-game (Lumen result msg_retry, sprite 877):
-- an orange burst with 復活連打, then a yellow one with もう1曲あそべるドン!. The burst is one corner art
-- drawn in four quadrants; the message fades in over 233 ms. Lumen leaves which label is shown to the
-- game, so the hold times are ours.
ResultRetryMessage = {}
ResultRetryMessage.__index = ResultRetryMessage
local FADE_IN_MS = 233
local REVIVE_MS = 1100
local MORE_MS = 1100
-- burst size; a quadrant turned a half circle pivots about its centre
local BURST_W, BURST_H = 456, 336
function ResultRetryMessage.new()
local self = setmetatable({}, ResultRetryMessage)
self.t0 = nil
self.t = 0
self.revive = { burst = tex.get_texture("result/retry/burst_revive"), text = tex.get_texture("result/retry/text_revive_" .. tex.language()) }
self.more = { burst = tex.get_texture("result/retry/burst_more"), text = tex.get_texture("result/retry/text_more_" .. tex.language()) }
return self
end
function ResultRetryMessage:update(current_ms)
if not self.t0 then self.t0 = current_ms end
self.t = current_ms - self.t0
end
function ResultRetryMessage:is_finished()
return self.t >= REVIVE_MS + MORE_MS
end
local function draw_set(set, fade)
if not set.burst then return end
-- draw indices: normal, turned 180 degrees, mirrored, flipped
tex.draw_texture(set.burst, { index = 0, fade = fade })
tex.draw_texture(set.burst, { index = 1, fade = fade, rotation = 180, x = BURST_W / 2, y = BURST_H / 2, origin = { BURST_W / 2, BURST_H / 2 } })
tex.draw_texture(set.burst, { index = 2, fade = fade, mirror = "horizontal" })
tex.draw_texture(set.burst, { index = 3, fade = fade, mirror = "vertical" })
if set.text then tex.draw_texture(set.text, { fade = fade }) end
end
function ResultRetryMessage:draw()
local t = self.t
if t < REVIVE_MS then
draw_set(self.revive, math.min(1, t / FADE_IN_MS))
else
draw_set(self.more, math.min(1, (t - REVIVE_MS) / FADE_IN_MS))
end
end