mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
HUD tracking: refactor visibility checks
- Completely invisible trackers should not appear in tracker list, because they would occlude - Add Visibility::kFlicker, so frame check is not duplicated
This commit is contained in:
parent
e58253a2b2
commit
2188338a7e
1 changed files with 8 additions and 10 deletions
|
|
@ -33,9 +33,9 @@ namespace
|
|||
|
||||
enum class Visibility
|
||||
{
|
||||
kHidden,
|
||||
kVisible,
|
||||
kTransparent,
|
||||
kFlicker,
|
||||
};
|
||||
|
||||
struct TargetTracking
|
||||
|
|
@ -283,28 +283,26 @@ bool is_object_tracking_target(const mobj_t* mobj)
|
|||
return Obj_IsSuperFlickyTargettingYou(mobj, stplyr->mo);
|
||||
|
||||
case MT_SPRAYCAN:
|
||||
return !(mobj->renderflags & (RF_TRANSMASK | RF_DONTDRAW)); // the spraycan wasn't collected yet
|
||||
return !(mobj->renderflags & (RF_TRANSMASK | RF_DONTDRAW)) && // the spraycan wasn't collected yet
|
||||
P_CheckSight(stplyr->mo, const_cast<mobj_t*>(mobj));
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Visibility is_object_visible(mobj_t* mobj)
|
||||
Visibility is_object_visible(const mobj_t* mobj)
|
||||
{
|
||||
switch (mobj->type)
|
||||
{
|
||||
case MT_SPRAYCAN:
|
||||
case MT_SUPER_FLICKY:
|
||||
// Always flickers.
|
||||
return (leveltime & 1) ? Visibility::kVisible : Visibility::kHidden;
|
||||
|
||||
case MT_SPRAYCAN:
|
||||
// Flickers, but only when visible.
|
||||
return P_CheckSight(stplyr->mo, mobj) && (leveltime & 1) ? Visibility::kVisible : Visibility::kHidden;
|
||||
return Visibility::kFlicker;
|
||||
|
||||
default:
|
||||
// Transparent when not visible.
|
||||
return P_CheckSight(stplyr->mo, mobj) ? Visibility::kVisible : Visibility::kTransparent;
|
||||
return P_CheckSight(stplyr->mo, const_cast<mobj_t*>(mobj)) ? Visibility::kVisible : Visibility::kTransparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -312,7 +310,7 @@ void K_DrawTargetTracking(const TargetTracking& target)
|
|||
{
|
||||
Visibility visibility = is_object_visible(target.mobj);
|
||||
|
||||
if (visibility == Visibility::kHidden)
|
||||
if (visibility == Visibility::kFlicker && (leveltime & 1))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue