ExperimentalGear/scripts/gameplay/song_panel.lua

144 lines
3.2 KiB
Lua
Raw Normal View History

2021-10-28 11:02:11 +02:00
local DiffRectangle = require('components.diff_rectangle');
local desw = 1080;
local desh = 1920;
2021-11-25 18:49:50 +01:00
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);
2021-10-28 17:36:06 +02:00
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
2021-10-28 17:40:15 +02:00
local render = function (deltaTime, bpm, laneSpeed, jacketPath, diff, level, progress, songTitle, songArtist)
2021-11-25 18:49:50 +01:00
gfx.Save();
2021-11-25 19:38:59 +01:00
2021-11-25 18:49:50 +01:00
local resx, resy = game.GetResolution();
isLandscape = resx > resy;
if (not loadedJacketImage and jacketPath) then
loadJacketImage(jacketPath)
end
tickTransitions(deltaTime)
if (isLandscape) then
desw = 1920;
desh = 1080;
else
desw = 1080;
desh = 1920;
end
2021-11-25 18:49:50 +01:00
local y = isLandscape and 0 or 210;
local scale = resy / desh
gfx.Scale(scale, scale)
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,
2021-11-25 18:49:50 +01:00
y+31.25, -- why does this need to be here?
105,
105,
jacketImage,
1,
0
);
2021-10-28 11:02:11 +02:00
-- Draw diff rectangle
2021-11-25 18:49:50 +01:00
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);
2021-10-12 20:09:42 +02:00
local actualLaneSpeed = (bpm*laneSpeed)/100
gfx.TextAlign(gfx.TEXT_ALIGN_RIGHT + gfx.TEXT_ALIGN_MIDDLE);
renderOutlinedText(260,y+247, string.format("%.0f", bpm), 2);
2021-10-12 20:09:42 +02:00
renderOutlinedText(260,y+281, string.format("%.2f", actualLaneSpeed), 2);
2021-10-28 17:21:25 +02:00
-- Draw progress
gfx.BeginPath()
gfx.FillColor(244, 204, 101)
2021-11-25 18:49:50 +01:00
gfx.Rect(222, y+81, 622 * progress, 3)
2021-10-28 17:21:25 +02:00
gfx.Fill()
2021-10-28 17:36:06 +02:00
gfx.BeginPath();
gfx.ImageRect(
208 + 622 * progress + ((1-progress) * 8),
2021-11-25 18:49:50 +01:00
y+78.5,
2021-10-28 17:36:06 +02:00
24*0.85,
10*0.85,
progressDotImage,
1,
0
);
2021-10-28 17:40:15 +02:00
-- Draw song title
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
gfx.FontSize(22)
2021-11-25 18:49:50 +01:00
gfx.Text(songTitle .. ' / ' .. songArtist, 385, y+60);
gfx.ResetTransform()
2021-11-25 18:49:50 +01:00
gfx.Restore();
end
return {
render=render
}