51 lines
2.0 KiB
Lua
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
|