From 3b417215639e37ec4e50c0e06d6d5a74050214d1 Mon Sep 17 00:00:00 2001 From: Misa Date: Tue, 28 Apr 2020 20:46:33 -0700 Subject: [PATCH] Interpolate bringing up and down quit/pause/teleporter screen Now it's really, really smooth. Except for like the last frame when it goes down, which I sometimes didn't notice (but maybe it didn't happen every time due to being lucky on the delta timesteps or something, whatevs.) --- desktop_version/src/Graphics.cpp | 6 ++++-- desktop_version/src/Graphics.h | 1 + desktop_version/src/Input.cpp | 28 ++++++++++++++++++++++++---- desktop_version/src/Logic.cpp | 1 + desktop_version/src/Script.cpp | 7 ++++++- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index b63e67c1..17fc6c20 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -84,6 +84,7 @@ void Graphics::init() crewframe = 0; crewframedelay = 4; menuoffset = 0; + oldmenuoffset = 0; resumegamemode = false; //Fading stuff @@ -2609,6 +2610,7 @@ void Graphics::menuoffrender() + int usethisoffset = lerp(oldmenuoffset, menuoffset); if(flipmode) { // flipmatrix.translate(0, menuoffset); @@ -2620,7 +2622,7 @@ void Graphics::menuoffrender() BlitSurfaceStandard(tempbufferFlipped, NULL, backBuffer, NULL); SDL_FreeSurface(tempbufferFlipped); SDL_Rect offsetRect; - setRect (offsetRect, 0, menuoffset, backBuffer->w ,backBuffer->h); + setRect (offsetRect, 0, usethisoffset, backBuffer->w ,backBuffer->h); SDL_Surface* temp = FlipSurfaceVerticle(menubuffer); BlitSurfaceStandard(temp,NULL,backBuffer,&offsetRect); SDL_FreeSurface(temp); @@ -2631,7 +2633,7 @@ void Graphics::menuoffrender() BlitSurfaceStandard(tempBuffer, NULL, backBuffer, NULL); SDL_Rect offsetRect; - setRect (offsetRect, 0, menuoffset, backBuffer->w ,backBuffer->h); + setRect (offsetRect, 0, usethisoffset, backBuffer->w ,backBuffer->h); BlitSurfaceStandard(menubuffer,NULL,backBuffer,&offsetRect); } diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index 9ac181ea..c21a18af 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -255,6 +255,7 @@ public: bool backgrounddrawn, foregrounddrawn; int menuoffset; + int oldmenuoffset; bool resumegamemode; SDL_Rect warprect; diff --git a/desktop_version/src/Input.cpp b/desktop_version/src/Input.cpp index dd4f707b..ac803740 100644 --- a/desktop_version/src/Input.cpp +++ b/desktop_version/src/Input.cpp @@ -1625,7 +1625,12 @@ void gameinput() //Alright, normal teleporting game.gamestate = TELEPORTERMODE; graphics.menuoffset = 240; //actually this should count the roomname - if (map.extrarow) graphics.menuoffset -= 10; + graphics.oldmenuoffset = 240; + if (map.extrarow) + { + graphics.menuoffset -= 10; + graphics.oldmenuoffset -= 10; + } BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL); @@ -1681,7 +1686,12 @@ void gameinput() game.menupage = 20; // The Map Page BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL); graphics.menuoffset = 240; //actually this should count the roomname - if (map.extrarow) graphics.menuoffset -= 10; + graphics.oldmenuoffset = 240; + if (map.extrarow) + { + graphics.menuoffset -= 10; + graphics.oldmenuoffset -= 10; + } } else if (game.intimetrial && graphics.fademode==0) { @@ -1705,7 +1715,12 @@ void gameinput() game.menupage = 0; // The Map Page BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL); graphics.menuoffset = 240; //actually this should count the roomname - if (map.extrarow) graphics.menuoffset -= 10; + graphics.oldmenuoffset = 240; + if (map.extrarow) + { + graphics.menuoffset -= 10; + graphics.oldmenuoffset -= 10; + } } } @@ -1720,7 +1735,12 @@ void gameinput() BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL); graphics.menuoffset = 240; //actually this should count the roomname - if (map.extrarow) graphics.menuoffset -= 10; + graphics.oldmenuoffset = 240; + if (map.extrarow) + { + graphics.menuoffset -= 10; + graphics.oldmenuoffset -= 10; + } } if (key.keymap[SDLK_r] && game.deathseq<=0)// && map.custommode) //Have fun glitchrunners! diff --git a/desktop_version/src/Logic.cpp b/desktop_version/src/Logic.cpp index f9bb5cc0..5f32c6ea 100644 --- a/desktop_version/src/Logic.cpp +++ b/desktop_version/src/Logic.cpp @@ -40,6 +40,7 @@ void maplogic() help.updateglow(); graphics.updatetextboxes(); + graphics.oldmenuoffset = graphics.menuoffset; if (graphics.resumegamemode) { graphics.menuoffset += 25; diff --git a/desktop_version/src/Script.cpp b/desktop_version/src/Script.cpp index 492d0098..f15aeb52 100644 --- a/desktop_version/src/Script.cpp +++ b/desktop_version/src/Script.cpp @@ -1277,7 +1277,12 @@ void scriptclass::run() //TODO this draw the teleporter screen. This is a problem. :( game.gamestate = TELEPORTERMODE; graphics.menuoffset = 240; //actually this should count the roomname - if (map.extrarow) graphics.menuoffset -= 10; + graphics.oldmenuoffset = 240; + if (map.extrarow) + { + graphics.menuoffset -= 10; + graphics.oldmenuoffset -= 10; + } graphics.resumegamemode = false;