diff --git a/src/d_main.cpp b/src/d_main.cpp index 0971c48d1..34ae5b369 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -1040,7 +1040,7 @@ void D_Display () if (DrawFSHUD || automapactive) StatusBar->DrawAltHUD(); if (players[consoleplayer].camera && players[consoleplayer].camera->player && !automapactive) { - StatusBar->DrawCrosshair(); + StatusBar->DrawCrosshair(vp.TicFrac); } StatusBar->CallDraw (HUD_AltHud, vp.TicFrac); StatusBar->DrawTopStuff (HUD_AltHud); diff --git a/src/g_statusbar/sbar.h b/src/g_statusbar/sbar.h index a1fa6926c..bffa1a823 100644 --- a/src/g_statusbar/sbar.h +++ b/src/g_statusbar/sbar.h @@ -427,14 +427,14 @@ private: public: AActor *ValidateInvFirst (int numVisible) const; - void DrawCrosshair (); + void DrawCrosshair (double ticFrac); // Sizing info for ths status bar. bool Scaled; // This needs to go away. bool Centering; bool FixedOrigin; - double CrosshairSize; + double PrevCrosshairSize, CrosshairSize; double Displacement; bool ShowLog; int artiflashTick = 0; diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index de125725b..5890fd58f 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -388,7 +388,7 @@ DBaseStatusBar::DBaseStatusBar () CompleteBorder = false; Centering = false; FixedOrigin = false; - CrosshairSize = 1.; + CrosshairSize = PrevCrosshairSize = 1.; memset(Messages, 0, sizeof(Messages)); Displacement = 0; CPlayer = NULL; @@ -679,6 +679,8 @@ int DBaseStatusBar::GetPlayer () void DBaseStatusBar::Tick () { + PrevCrosshairSize = CrosshairSize; + for (size_t i = 0; i < countof(Messages); ++i) { DHUDMessageBase *msg = Messages[i]; @@ -988,7 +990,7 @@ void DBaseStatusBar::RefreshBackground () const // //--------------------------------------------------------------------------- -void DBaseStatusBar::DrawCrosshair () +void DBaseStatusBar::DrawCrosshair (double ticFrac) { if (!crosshairon) { @@ -1010,7 +1012,8 @@ void DBaseStatusBar::DrawCrosshair () } int health = Scale(CPlayer->health, 100, CPlayer->mo->GetDefault()->health); - ST_DrawCrosshair(health, viewwidth / 2 + viewwindowx, viewheight / 2 + viewwindowy, CrosshairSize); + const double size = PrevCrosshairSize * (1.0 - ticFrac) + CrosshairSize * ticFrac; + ST_DrawCrosshair(health, viewwidth / 2 + viewwindowx, viewheight / 2 + viewwindowy, size); } //--------------------------------------------------------------------------- @@ -1082,7 +1085,7 @@ void DBaseStatusBar::Draw (EHudState state, double ticFrac) { if (CPlayer && CPlayer->camera && CPlayer->camera->player) { - DrawCrosshair (); + DrawCrosshair (ticFrac); } } else if (automapactive)