162 lines
4.1 KiB
Lua
162 lines
4.1 KiB
Lua
local Easing = require('common.easings')
|
|
|
|
local bgImage = gfx.CreateSkinImage("gameplay/track_end/bg.png", 0)
|
|
local bgHexTopImage = gfx.CreateSkinImage("gameplay/track_end/top_hex.png", 0)
|
|
local bgHexBottomImage = gfx.CreateSkinImage("gameplay/track_end/bottom_hex.png", 0)
|
|
|
|
local enterFlareBlueImage = gfx.CreateSkinImage("gameplay/track_end/flares/blue_transition_flare.png", 0)
|
|
local enterFlarePinkImage = gfx.CreateSkinImage("gameplay/track_end/flares/pink_transition_flare.png", 0)
|
|
|
|
local trackCompImage = gfx.CreateSkinImage("gameplay/track_end/track_comp.png", 0)
|
|
|
|
local particleRedBall = gfx.CreateSkinImage("gameplay/track_end/particles/red_ball.png", 0)
|
|
local particleRedRing = gfx.CreateSkinImage("gameplay/track_end/particles/red_ring.png", 0)
|
|
|
|
local outroTransitionScale = 0;
|
|
local outroTransitionGlobalAlpha = 0;
|
|
local outroTransitionEnterFlareX = -1920;
|
|
local outroTransitionTextCutX = 0;
|
|
local outroTransitionFlareRedX = -500;
|
|
|
|
local tickTransitions = function (deltaTime)
|
|
if outroTransitionScale < 1 then
|
|
outroTransitionScale = outroTransitionScale + deltaTime / 15 -- transition should last for that time in seconds
|
|
else
|
|
outroTransitionScale = 1
|
|
end
|
|
|
|
outroTransitionGlobalAlpha = math.min(1, (outroTransitionScale*6))
|
|
|
|
outroTransitionEnterFlareX = math.min(2*1920, (
|
|
(outroTransitionScale-0.2)/0.1* -- Last from 0.2 transition scale for 0.1 transition scale, ending at 0.3 TS
|
|
(1920*2) -- move this amount during the transition
|
|
)-1920); -- start off-screen
|
|
|
|
outroTransitionTextCutX = math.min(1920, (
|
|
(outroTransitionScale-0.25)/0.2* -- Last from 0.25 transition scale for 0.2 transition scale, ending at 0.45 TS
|
|
(1920) -- reveal this amount during the transition (the whole width)
|
|
)-0); -- start from 0
|
|
|
|
outroTransitionFlareRedX = math.min(1080+150, (
|
|
Easing.outQuad(math.min(1,
|
|
(outroTransitionScale-0.25)/0.2) -- Last from 0.25 transition scale for 0.2 transition scale, ending at 0.45 TS
|
|
)*
|
|
(1080+150) -- reveal this amount during the transition (the whole width)
|
|
)-500); -- start from -500 (off-screen)
|
|
end
|
|
|
|
local drawParticles = function ()
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
outroTransitionFlareRedX,
|
|
510,
|
|
787*0.5,
|
|
818*0.5,
|
|
particleRedBall,
|
|
1,
|
|
0
|
|
);
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
outroTransitionFlareRedX,
|
|
510,
|
|
787*0.5,
|
|
818*0.5,
|
|
particleRedRing,
|
|
1,
|
|
0
|
|
);
|
|
end
|
|
|
|
local render = function (deltaTime)
|
|
tickTransitions(deltaTime);
|
|
gfx.GlobalAlpha(outroTransitionGlobalAlpha);
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
0,
|
|
0,
|
|
2160*0.5,
|
|
3840*0.5,
|
|
bgImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
0,
|
|
0,
|
|
2160*0.5,
|
|
1921*0.5,
|
|
bgHexTopImage,
|
|
1,
|
|
0
|
|
);
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
0,
|
|
1920-(1921*0.5),
|
|
2160*0.5,
|
|
1921*0.5,
|
|
bgHexBottomImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
-- Enter flares
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
outroTransitionEnterFlareX,
|
|
530,
|
|
3280*0.5,
|
|
790*0.5,
|
|
enterFlareBlueImage,
|
|
1,
|
|
0
|
|
);
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
-outroTransitionEnterFlareX, -- go from the other side of the screen
|
|
530,
|
|
3280*0.5,
|
|
790*0.5,
|
|
enterFlarePinkImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
drawParticles();
|
|
|
|
gfx.BeginPath();
|
|
gfx.Scissor(0, 530, outroTransitionTextCutX, 1920)
|
|
gfx.ImageRect(
|
|
0,
|
|
680,
|
|
2160*0.5,
|
|
177*0.5,
|
|
trackCompImage,
|
|
1,
|
|
0
|
|
);
|
|
gfx.ResetScissor();
|
|
|
|
-- Get the banner downscaled in whatever resolution it is, while maintaining the aspect ratio
|
|
-- local tw,th = gfx.ImageSize(bannerBaseImage);
|
|
-- BANNER_H = th * (1080/tw);
|
|
|
|
-- gfx.BeginPath();
|
|
-- gfx.ImageRect(
|
|
-- 0,
|
|
-- 0,
|
|
-- BANNER_W,
|
|
-- BANNER_H,
|
|
-- bannerBaseImage,
|
|
-- 1,
|
|
-- 0
|
|
-- );
|
|
end
|
|
|
|
return {
|
|
render=render
|
|
} |