Fixed: DBaseStatusBar::Draw did not use its ticFrac parameter when being called from scripts

Instead it directly went to the global viewpoint again which would be inconsistent.
This commit is contained in:
Christoph Oelckers 2018-06-19 09:00:50 +02:00
parent d73d89762d
commit 8787905fed
3 changed files with 13 additions and 12 deletions

View file

@ -817,7 +817,7 @@ void D_Display ()
{ {
StatusBar->DrawCrosshair(); StatusBar->DrawCrosshair();
} }
StatusBar->CallDraw (HUD_AltHud); StatusBar->CallDraw (HUD_AltHud, r_viewpoint.TicFrac);
StatusBar->DrawTopStuff (HUD_AltHud); StatusBar->DrawTopStuff (HUD_AltHud);
} }
else else
@ -825,13 +825,13 @@ void D_Display ()
{ {
EHudState state = DrawFSHUD ? HUD_Fullscreen : HUD_None; EHudState state = DrawFSHUD ? HUD_Fullscreen : HUD_None;
StatusBar->DrawBottomStuff (state); StatusBar->DrawBottomStuff (state);
StatusBar->CallDraw (state); StatusBar->CallDraw (state, r_viewpoint.TicFrac);
StatusBar->DrawTopStuff (state); StatusBar->DrawTopStuff (state);
} }
else else
{ {
StatusBar->DrawBottomStuff (HUD_StatusBar); StatusBar->DrawBottomStuff (HUD_StatusBar);
StatusBar->CallDraw (HUD_StatusBar); StatusBar->CallDraw (HUD_StatusBar, r_viewpoint.TicFrac);
StatusBar->DrawTopStuff (HUD_StatusBar); StatusBar->DrawTopStuff (HUD_StatusBar);
} }
//stb.Unclock(); //stb.Unclock();

View file

@ -397,10 +397,10 @@ public:
void SetScale(); void SetScale();
virtual void Tick (); virtual void Tick ();
void CallTick(); void CallTick();
virtual void Draw (EHudState state); virtual void Draw (EHudState state, double ticFrac);
void CallDraw(EHudState state); void CallDraw(EHudState state, double ticFrac);
void DrawBottomStuff (EHudState state); void DrawBottomStuff (EHudState state);
void DrawTopStuff (EHudState state); void DrawTopStuff (EHudState state);
void FlashItem (const PClass *itemtype); void FlashItem (const PClass *itemtype);
void AttachToPlayer(player_t *player); void AttachToPlayer(player_t *player);
DVector2 GetHUDScale() const; DVector2 GetHUDScale() const;

View file

@ -1006,7 +1006,7 @@ void DBaseStatusBar::DrawMessages (int layer, int bottom)
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void DBaseStatusBar::Draw (EHudState state) void DBaseStatusBar::Draw (EHudState state, double ticFrac)
{ {
// HUD_AltHud state is for popups only // HUD_AltHud state is for popups only
if (state == HUD_AltHud) if (state == HUD_AltHud)
@ -1048,18 +1048,19 @@ DEFINE_ACTION_FUNCTION(DBaseStatusBar, Draw)
{ {
PARAM_SELF_PROLOGUE(DBaseStatusBar); PARAM_SELF_PROLOGUE(DBaseStatusBar);
PARAM_INT(state); PARAM_INT(state);
self->Draw((EHudState)state); PARAM_FLOAT(ticFrac);
self->Draw((EHudState)state, ticFrac);
return 0; return 0;
} }
void DBaseStatusBar::CallDraw(EHudState state) void DBaseStatusBar::CallDraw(EHudState state, double ticFrac)
{ {
IFVIRTUAL(DBaseStatusBar, Draw) IFVIRTUAL(DBaseStatusBar, Draw)
{ {
VMValue params[] = { (DObject*)this, state, r_viewpoint.TicFrac }; VMValue params[] = { (DObject*)this, state, ticFrac };
VMCall(func, params, countof(params), nullptr, 0); VMCall(func, params, countof(params), nullptr, 0);
} }
else Draw(state); else Draw(state, ticFrac);
screen->ClearClipRect(); // make sure the scripts don't leave a valid clipping rect behind. screen->ClearClipRect(); // make sure the scripts don't leave a valid clipping rect behind.
BeginStatusBar(BaseSBarHorizontalResolution, BaseSBarVerticalResolution, BaseRelTop, false); BeginStatusBar(BaseSBarHorizontalResolution, BaseSBarVerticalResolution, BaseRelTop, false);
} }