132 lines
3.0 KiB
Lua
132 lines
3.0 KiB
Lua
|
|
local DiffRectangle = require('components.diff_rectangle');
|
|
|
|
local desw = 1080;
|
|
local desh = 1920;
|
|
|
|
local isLandscape = false;
|
|
|
|
local bgLeftImage = gfx.CreateSkinImage("gameplay/song_panel/bg_left.png", 0);
|
|
local bgRightImage = gfx.CreateSkinImage("gameplay/song_panel/bg_right.png", 0);
|
|
|
|
local progressDotImage = gfx.CreateSkinImage("gameplay/song_panel/dot.png", 0);
|
|
|
|
local jacketFallbackImage = gfx.CreateSkinImage("song_select/loading.png", 0);
|
|
|
|
local jacketImage;
|
|
local loadedJacketImage = false;
|
|
|
|
local loadJacketImage = function (jacketPath)
|
|
if jacketImage == nil or jacketImage == jacketFallbackImage then
|
|
jacketImage = gfx.LoadImageJob(jacketPath, jacketFallbackImage)
|
|
end
|
|
end
|
|
|
|
local renderOutlinedText = function (x,y, text, outlineWidth)
|
|
gfx.BeginPath();
|
|
gfx.FillColor(0,0,0,255);
|
|
gfx.Text(text, x-outlineWidth, y+outlineWidth);
|
|
gfx.Text(text, x-outlineWidth, y-outlineWidth);
|
|
gfx.Text(text, x+outlineWidth, y+outlineWidth);
|
|
gfx.Text(text, x+outlineWidth, y-outlineWidth);
|
|
|
|
gfx.FillColor(255,255,255,255);
|
|
gfx.Text(text, x, y);
|
|
end
|
|
|
|
local tickTransitions = function (deltaTime)
|
|
|
|
end
|
|
|
|
local render = function (deltaTime, bpm, laneSpeed, jacketPath, diff, level, progress, songTitle, songArtist)
|
|
gfx.Save();
|
|
|
|
local resx, resy = game.GetResolution();
|
|
isLandscape = resx > resy;
|
|
|
|
if (not loadedJacketImage and jacketPath) then
|
|
loadJacketImage(jacketPath)
|
|
end
|
|
|
|
tickTransitions(deltaTime)
|
|
|
|
|
|
local y = isLandscape and 0 or 210;
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
0,
|
|
y,
|
|
844*0.85,
|
|
374*0.85,
|
|
bgLeftImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
200,
|
|
y,
|
|
1016*0.85,
|
|
122*0.85,
|
|
bgRightImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
-- Draw jacket
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
32,
|
|
y+31.25, -- why does this need to be here?
|
|
105,
|
|
105,
|
|
jacketImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
-- Draw diff rectangle
|
|
DiffRectangle.render(deltaTime, 31, y+140, 0.84, diff, level);
|
|
|
|
gfx.FontSize(30);
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
renderOutlinedText(25,y+247, "BPM", 2);
|
|
renderOutlinedText(25,y+281, "LANE-SPEED", 2);
|
|
|
|
local actualLaneSpeed = (bpm*laneSpeed)/100
|
|
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_MIDDLE);
|
|
renderOutlinedText(260,y+247, string.format("%.0f", bpm), 2);
|
|
renderOutlinedText(260,y+281, string.format("%.2f", actualLaneSpeed), 2);
|
|
|
|
-- Draw progress
|
|
gfx.BeginPath()
|
|
gfx.FillColor(244, 204, 101)
|
|
gfx.Rect(222, y+81, 622 * progress, 3)
|
|
gfx.Fill()
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(
|
|
208 + 622 * progress + ((1-progress) * 8),
|
|
y+78.5,
|
|
24*0.85,
|
|
10*0.85,
|
|
progressDotImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
-- Draw song title
|
|
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
gfx.FontSize(22)
|
|
gfx.Text(songTitle .. ' / ' .. songArtist, 385, y+60);
|
|
|
|
gfx.Restore();
|
|
end
|
|
|
|
return {
|
|
render=render
|
|
} |