228 lines
6.4 KiB
Lua
228 lines
6.4 KiB
Lua
|
|
local Charting = require('common.charting');
|
|
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 notify = gfx.CreateSkinImage("gameplay/song_panel/notice.png", 0)
|
|
|
|
local demopanel = gfx.CreateSkinImage("multi/lobby/multi_jacket.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 demoMode = function (songTitle,songArtist)
|
|
--[[
|
|
gfx.BeginPath();
|
|
local tw, th = gfx.ImageSize(demopanel);
|
|
th = (Dim.design.width / tw) * th;
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(0, 0, Dim.design.width, Dim.design.height,temp, 1, 0);
|
|
gfx.BeginPath();
|
|
gfx.FillColor(50,80,120,100)
|
|
gfx.Rect((Dim.design.width/4)-29, th+62, Dim.design.width/1.75, th/1.75);
|
|
gfx.Fill()
|
|
gfx.BeginPath();
|
|
gfx.FillColor(50,120,80,100)
|
|
gfx.Rect((Dim.design.width/4)+15, th+129, Dim.design.width/2.12, th/2.25);
|
|
gfx.Fill()
|
|
gfx.BeginPath();
|
|
gfx.Text(actualLaneSpeed,Dim.design.width/4, th+100)
|
|
]]
|
|
|
|
gfx.BeginPath();
|
|
local tw, th = gfx.ImageSize(demopanel);
|
|
th = (desw / tw) * th;
|
|
gfx.BeginPath();
|
|
gfx.FillColor(50,80,120,100)
|
|
gfx.Rect((desw/4)-29, th+62, desw/1.75, th/1.64);
|
|
-- gfx.ImageRect((desw/4)-29,th+62,desw/1.75,th/1.64,demopanel,1,0)
|
|
gfx.Fill()
|
|
gfx.BeginPath();
|
|
gfx.FontSize(38)
|
|
gfx.LoadSkinFont('Digital-Serial-Bold.ttf')
|
|
renderOutlinedText(desw/4+12,th+90, "DEMO MODE", 2);
|
|
gfx.BeginPath();
|
|
-- gfx.FillColor(50,120,80,100)
|
|
-- gfx.Rect((desw/4)+15, th+129, desw/2.12, th/2.25);
|
|
gfx.ImageRect((desw/4)+15,th+129,desw/2.12,th/2.25,jacketImage,1,0)
|
|
-- gfx.Fill()
|
|
gfx.BeginPath();
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_CENTER + gfx.TEXT_ALIGN_MIDDLE)
|
|
renderOutlinedText(desw/2,th+685, songTitle, 2);
|
|
renderOutlinedText(desw/2,th+725, songArtist, 2);
|
|
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)
|
|
|
|
if (isLandscape) then
|
|
desw = 1920;
|
|
desh = 1080;
|
|
else
|
|
desw = 1080;
|
|
desh = 1920;
|
|
end
|
|
|
|
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,
|
|
y+31.25, -- why does this need to be here?
|
|
105,
|
|
105,
|
|
jacketImage,
|
|
1,
|
|
0
|
|
);
|
|
|
|
-- Draw diff rectangle
|
|
local adjustedDiff = Charting.GetDisplayDifficulty(gameplay.jacketPath, diff)
|
|
DiffRectangle.render(deltaTime, 31, y+140, 0.84, adjustedDiff, 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);
|
|
|
|
gfx.FontSize(18);
|
|
if gameplay.autoplay and not gameplay.demoMode and gameplay.practice_setup == nil then
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(0,y+310,245,67,notify,1,0);
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
renderOutlinedText(30,y+354.5, "AUTOPLAY IS ENABLED", 1.5);
|
|
|
|
elseif gameplay.demoMode and gameplay.practice_setup == nil then
|
|
|
|
gfx.BeginPath();
|
|
if (isLandscape) then
|
|
|
|
gfx.ImageRect(0,y+310,245,67,notify,1,0);
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
renderOutlinedText(30,y+354.5, "DEMO MODE IS ENABLED", 1.5);
|
|
else
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
demoMode(songTitle,songArtist)
|
|
end
|
|
|
|
elseif gameplay.scoreReplays and not gameplay.autoplay and not gameplay.demoMode and gameplay.practice_setup == nil then
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(0,y+310,245,67,notify,1,0);
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
renderOutlinedText(30,y+354.5, "REPLAY MODE IS ENABLED", 1.5);
|
|
|
|
elseif gameplay.practice_setup then
|
|
|
|
gfx.BeginPath();
|
|
gfx.ImageRect(0,y+310,245,67,notify,1,0);
|
|
gfx.TextAlign(gfx.TEXT_ALIGN_LEFT + gfx.TEXT_ALIGN_MIDDLE)
|
|
renderOutlinedText(30,y+354.5, "PRACTICE MODE IS ENABLED", 1.5);
|
|
|
|
end
|
|
|
|
gfx.FontSize(30);
|
|
-- 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.ResetTransform()
|
|
|
|
gfx.Restore();
|
|
end
|
|
|
|
return {
|
|
render=render
|
|
} |