Spraycan HUD tracking

This commit is contained in:
James R. 2023-09-07 01:01:23 -07:00
parent 11f428b67a
commit c454843837
4 changed files with 73 additions and 1 deletions

View file

@ -203,6 +203,9 @@ patch_t *kp_capsuletarget_near[2][8];
patch_t *kp_superflickytarget[2][4];
patch_t *kp_spraycantarget_far[2][6];
patch_t *kp_spraycantarget_near[2][6];
patch_t *kp_button_a[2][2];
patch_t *kp_button_b[2][2];
patch_t *kp_button_c[2][2];
@ -796,6 +799,34 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_superflickytarget[1][i], "%s", buffer);
}
sprintf(buffer, "SPCNBFAx");
for (i = 0; i < 6; i++)
{
buffer[7] = '1'+i;
HU_UpdatePatch(&kp_spraycantarget_far[0][i], "%s", buffer);
}
sprintf(buffer, "SPCNSFAx");
for (i = 0; i < 6; i++)
{
buffer[7] = '1'+i;
HU_UpdatePatch(&kp_spraycantarget_far[1][i], "%s", buffer);
}
sprintf(buffer, "SPCNBCLx");
for (i = 0; i < 6; i++)
{
buffer[7] = '1'+i;
HU_UpdatePatch(&kp_spraycantarget_near[0][i], "%s", buffer);
}
sprintf(buffer, "SPCNSCLx");
for (i = 0; i < 6; i++)
{
buffer[7] = '1'+i;
HU_UpdatePatch(&kp_spraycantarget_near[1][i], "%s", buffer);
}
K_LoadButtonGraphics(kp_button_a[0], 'A');
K_LoadButtonGraphics(kp_button_a[1], 'N');
K_LoadButtonGraphics(kp_button_b[0], 'B');

View file

@ -61,6 +61,9 @@ extern patch_t *kp_capsuletarget_near[2][8];
extern patch_t *kp_superflickytarget[2][4];
extern patch_t *kp_spraycantarget_far[2][6];
extern patch_t *kp_spraycantarget_near[2][6];
extern patch_t *kp_autoroulette;
extern patch_t *kp_button_a[2][2];

View file

@ -33,6 +33,7 @@ struct TargetTracking
int frames;
int tics_per_frame;
StaticVec<patch_t**, kMaxLayers> layers;
int32_t video_flags = 0;
};
struct Graphics
@ -85,6 +86,18 @@ struct TargetTracking
return anim;
}
bool uses_off_screen_arrow() const
{
switch (mobj->type)
{
case MT_SPRAYCAN:
return false;
default:
return true;
}
}
StaticVec<uint32_t, 7> player_emeralds_vec() const
{
StaticVec<uint32_t, 7> emeralds;
@ -149,6 +162,18 @@ private:
},
};
case MT_SPRAYCAN:
return {
{ // Near
{6, 2, {kp_spraycantarget_near[0]}, V_ADD}, // 1P
{{6, 2, {kp_spraycantarget_near[1]}, V_ADD}}, // 4P
},
{{ // Far
{6, 2, {kp_spraycantarget_far[0]}, V_ADD}, // 1P
{{6, 2, {kp_spraycantarget_far[1]}, V_ADD}}, // 4P
}},
};
default:
return {
{ // Near
@ -178,6 +203,11 @@ void K_DrawTargetTracking(const TargetTracking& target)
// Off-screen, draw alongside the borders of the screen.
// Probably the most complicated thing.
if (target.uses_off_screen_arrow() == false)
{
return;
}
int32_t scrVal = 240;
vector2_t screenSize = {};
@ -339,7 +369,7 @@ void K_DrawTargetTracking(const TargetTracking& target)
targetPos.x - ((patch->width << FRACBITS) >> 1),
targetPos.y - ((patch->height << FRACBITS) >> 1),
FRACUNIT,
V_SPLITSCREEN,
V_SPLITSCREEN | anim.video_flags,
patch,
colormap
);
@ -421,6 +451,9 @@ bool is_object_tracking_target(const mobj_t* mobj)
case MT_SUPER_FLICKY:
return Obj_IsSuperFlickyTargettingYou(mobj, stplyr->mo);
case MT_SPRAYCAN:
return !(mobj->renderflags & (RF_TRANSMASK | RF_DONTDRAW)); // the spraycan wasn't collected yet
default:
return false;
}
@ -434,6 +467,10 @@ bool is_object_visible(mobj_t* mobj)
// Always flickers.
return (leveltime & 1);
case MT_SPRAYCAN:
// Flickers, but only when visible.
return P_CheckSight(stplyr->mo, mobj) && (leveltime & 1);
default:
// Flicker when not visible.
return P_CheckSight(stplyr->mo, mobj) || (leveltime & 1);

View file

@ -5342,6 +5342,7 @@ static boolean P_IsTrackerType(INT32 type)
case MT_EMERALD:
case MT_BATTLEUFO:
case MT_SUPER_FLICKY:
case MT_SPRAYCAN:
return true;
default: