1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2025-01-09 18:39:45 +01:00

Update screenshake position in fixed-timestep loop

Otherwise the screen will shake too fast for my liking.

Also I'm planning to add an FPS limiting option later (because right
now, un-capping the FPS is pretty wasteful and eats up lots of
resources, especially since I have only a 60hz monitor), and it'd feel
weird if screen shaking updated every delta timestep.
This commit is contained in:
Misa 2020-04-28 17:29:59 -07:00 committed by Ethan Lee
parent 57f87dc820
commit 8fde6f28a3
3 changed files with 16 additions and 7 deletions

View file

@ -119,6 +119,9 @@ void Graphics::init()
showmousecursor = true; showmousecursor = true;
alpha = 1.0f; alpha = 1.0f;
screenshake_x = 0;
screenshake_y = 0;
} }
int Graphics::font_idx(uint32_t ch) { int Graphics::font_idx(uint32_t ch) {
@ -2679,7 +2682,6 @@ void Graphics::flashlight()
void Graphics::screenshake() void Graphics::screenshake()
{ {
point tpoint;
if(flipmode) if(flipmode)
{ {
// tpoint.x = int((Math.random() * 7) - 4); tpoint.y = int((Math.random() * 7) - 4); // tpoint.x = int((Math.random() * 7) - 4); tpoint.y = int((Math.random() * 7) - 4);
@ -2687,10 +2689,8 @@ void Graphics::screenshake()
// screenbuffer.draw(backbuffer, flipmatrix); // screenbuffer.draw(backbuffer, flipmatrix);
// flipmatrix.translate(-tpoint.x, -tpoint.y); // flipmatrix.translate(-tpoint.x, -tpoint.y);
tpoint.x = (fRandom() * 7) - 4;
tpoint.y = (fRandom() * 7) - 4;
SDL_Rect shakeRect; SDL_Rect shakeRect;
setRect(shakeRect,tpoint.x, tpoint.y, backBuffer->w, backBuffer->h); setRect(shakeRect,screenshake_x, screenshake_y, backBuffer->w, backBuffer->h);
SDL_Surface* flipBackBuffer = FlipSurfaceVerticle(backBuffer); SDL_Surface* flipBackBuffer = FlipSurfaceVerticle(backBuffer);
screenbuffer->UpdateScreen( flipBackBuffer, &shakeRect); screenbuffer->UpdateScreen( flipBackBuffer, &shakeRect);
SDL_FreeSurface(flipBackBuffer); SDL_FreeSurface(flipBackBuffer);
@ -2701,16 +2701,20 @@ void Graphics::screenshake()
//SDL_Rect rect; //SDL_Rect rect;
//setRect(rect, blackBars/2, 0, screenbuffer->w, screenbuffer->h); //setRect(rect, blackBars/2, 0, screenbuffer->w, screenbuffer->h);
//SDL_BlitSurface(backBuffer, NULL, screenbuffer, &rect); //SDL_BlitSurface(backBuffer, NULL, screenbuffer, &rect);
tpoint.x = static_cast<Sint32>((fRandom() * 7) - 4);
tpoint.y = static_cast<Sint32>((fRandom() * 7) - 4);
SDL_Rect shakeRect; SDL_Rect shakeRect;
setRect(shakeRect,tpoint.x, tpoint.y, backBuffer->w, backBuffer->h); setRect(shakeRect,screenshake_x, screenshake_y, backBuffer->w, backBuffer->h);
screenbuffer->UpdateScreen( backBuffer, &shakeRect); screenbuffer->UpdateScreen( backBuffer, &shakeRect);
} }
FillRect(backBuffer, 0x000000 ); FillRect(backBuffer, 0x000000 );
} }
void Graphics::updatescreenshake()
{
screenshake_x = static_cast<Sint32>((fRandom() * 7) - 4);
screenshake_y = static_cast<Sint32>((fRandom() * 7) - 4);
}
void Graphics::render() void Graphics::render()
{ {
if(screenbuffer == NULL) if(screenbuffer == NULL)

View file

@ -130,6 +130,10 @@ public:
void flashlight(); void flashlight();
void screenshake(); void screenshake();
void updatescreenshake();
int screenshake_x;
int screenshake_y;
void render(); void render();
void renderwithscreeneffects(); void renderwithscreeneffects();

View file

@ -471,6 +471,7 @@ int main(int argc, char *argv[])
if (game.infocus && game.screenshake > 0) if (game.infocus && game.screenshake > 0)
{ {
game.screenshake--; game.screenshake--;
graphics.updatescreenshake();
} }
//We did editorinput, now it's safe to turn this off //We did editorinput, now it's safe to turn this off