From 4629ff6bbee4c69ba32c1ff8530b1e282ae3b111 Mon Sep 17 00:00:00 2001 From: FajsiEx Date: Wed, 17 Nov 2021 19:54:26 +0100 Subject: [PATCH] + opacity transition support to particles --- scripts/gameplay/track_end.lua | 71 +++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/scripts/gameplay/track_end.lua b/scripts/gameplay/track_end.lua index 52d1d1f..62f916e 100644 --- a/scripts/gameplay/track_end.lua +++ b/scripts/gameplay/track_end.lua @@ -38,9 +38,10 @@ local outroTransitionTextBlurAlpha = 0; local particles = { green_dot_one = { texture = particleGreenDot1Image, + opacity = 1, startX = 1280, finishX = 380, - currentX = 1280, + xPos = 1280, yPos = 660, width = 235*0.5, height = 235*0.5, @@ -49,9 +50,10 @@ local particles = { }, green_dot_two = { texture = particleGreenDot2Image, + opacity = 1, startX = 1280, finishX = 70, - currentX = 1280, + xPos = 1280, yPos = 610, width = 128*0.5, height = 128*0.5, @@ -60,9 +62,10 @@ local particles = { }, blue_ring = { texture = particleBlueRingImage, + opacity = 1, startX = 1280, finishX = 65, - currentX = 1280, + xPos = 1280, yPos = 620, width = 229*0.5, height = 229*0.5, @@ -71,20 +74,24 @@ local particles = { }, large_rainbow_ring = { -- needs opacity and scale transitions texture = particleLargeRainbowRingImage, + opacity = 0, + startOpacity = 0, + finishOpacity = 1, startX = (1080/2-(2160*0.675)/2), finishX = (1080/2-(2160*0.675)/2), - currentX = (1080/2-(2160*0.675)/2), + xPos = (1080/2-(2160*0.675)/2), yPos = (680-(2273*0.675)/2) + 100, width = 2160*0.675, height = 2273*0.675, startTime = 0.25, - duration = 0.6 + duration = 0.6, }, red_ball = { -- needs opacity transition texture = particleRedBallImage, - startX = -150, - finishX = -150, - currentX = -150, + startOpacity = 0, + finishOpacity = 1, + opacity = 0, + xPos = -150, yPos = 500, width = 787*0.5, height = 818*0.5, @@ -93,9 +100,10 @@ local particles = { }, red_ring = { texture = particleRedRingImage, + opacity = 1, startX = -600, finishX = 590, - currentX = -600, + xPos = -600, yPos = 460, width = 1051*0.5, height = 1081*0.5, @@ -104,9 +112,10 @@ local particles = { }, small_yellow_ring_1 = { texture = particleSmallYellowRing1Image, + opacity = 1, startX = 1280, finishX = -170, - currentX = 1280, + xPos = 1280, yPos = 620, width = 579*0.5, height = 557*0.5, @@ -115,9 +124,10 @@ local particles = { }, small_yellow_ring_2 = { texture = particleSmallYellowRing2Image, + opacity = 1, startX = 1280, finishX = 140, - currentX = 1280, + xPos = 1280, yPos = 590, width = 436*0.5, height = 392*0.5, @@ -126,9 +136,10 @@ local particles = { }, small_rainbow_ring = { texture = particleSmallRainbowRingImage, + opacity = 1, startX = 1280, finishX = -380, - currentX = 1280, + xPos = 1280, yPos = 450, width = 1117*0.5, height = 1117*0.5, @@ -137,9 +148,10 @@ local particles = { }, yellow_ring = { texture = particleYellowRingImage, + opacity = 1, startX = -600, finishX = 650, - currentX = -600, + xPos = -600, yPos = 370, width = 1401*0.5, height = 1398*0.5, @@ -181,15 +193,28 @@ local tickTransitions = function (deltaTime) ) for particleName, particle in pairs(particles) do - if (outroTransitionScale < particle.startTime) then - particle.currentX = particle.startX; - elseif (outroTransitionScale >= particle.startTime + particle.duration) then - particle.currentX = particle.finishX; - else - local transScale = Easing.outQuad(math.min(1, (outroTransitionScale-particle.startTime)/particle.duration)); + local transScale = Easing.outQuad(math.min(1, (outroTransitionScale-particle.startTime)/particle.duration)); - local xDiff = particle.finishX - particle.startX; - particle.currentX = particle.startX + xDiff*transScale; + if (particle.finishX) then -- If x position want to have anim + if (outroTransitionScale < particle.startTime) then + particle.xPos = particle.startX; + elseif (outroTransitionScale >= particle.startTime + particle.duration) then + particle.xPos = particle.finishX; + else + local xDiff = particle.finishX - particle.startX; + particle.xPos = particle.startX + xDiff*transScale; + end + end + + if (particle.finishOpacity) then + if (outroTransitionScale < particle.startTime) then + particle.opacity = particle.startOpacity; + elseif (outroTransitionScale >= particle.startTime + particle.duration) then + particle.opacity = particle.finishOpacity; + else + local opacityDiff = particle.finishOpacity - particle.startOpacity; + particle.opacity = particle.startOpacity + opacityDiff*transScale; + end end end @@ -210,12 +235,12 @@ local drawParticles = function () for particleName, particle in pairs(particles) do gfx.BeginPath(); gfx.ImageRect( - particle.currentX, + particle.xPos, particle.yPos, particle.width, particle.height, particle.texture, - 1, + particle.opacity, 0 ); -- game.Log(particle.currentX, game.LOGGER_ERROR)