mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-02 13:12:50 +00:00
Votekick menu
Not super polished, literally just implemented this way to make freeze
This commit is contained in:
parent
d8ea8c0fe1
commit
b59346f637
5 changed files with 224 additions and 2 deletions
11
src/k_menu.h
11
src/k_menu.h
|
|
@ -418,6 +418,8 @@ extern menu_t EXTRAS_EggTVDef;
|
|||
extern menuitem_t PAUSE_Main[];
|
||||
extern menu_t PAUSE_MainDef;
|
||||
|
||||
extern menu_t PAUSE_KickHandlerDef;
|
||||
|
||||
// EXTRAS
|
||||
extern menuitem_t MISC_Manual[];
|
||||
extern menu_t MISC_ManualDef;
|
||||
|
|
@ -1082,6 +1084,14 @@ void M_QuitPauseMenu(INT32 choice);
|
|||
boolean M_PauseInputs(INT32 ch);
|
||||
void M_PauseTick(void);
|
||||
|
||||
extern struct playerkickmenu_s {
|
||||
tic_t ticker;
|
||||
UINT8 player;
|
||||
UINT8 poke;
|
||||
} playerkickmenu;
|
||||
|
||||
void M_KickHandler(INT32 choice);
|
||||
|
||||
extern consvar_t cv_dummymenuplayer;
|
||||
extern consvar_t cv_dummyspectator;
|
||||
|
||||
|
|
@ -1154,6 +1164,7 @@ void M_DrawMPServerBrowser(void);
|
|||
|
||||
// Pause menu:
|
||||
void M_DrawPause(void);
|
||||
void M_DrawKickHandler(void);
|
||||
|
||||
// Replay Playback
|
||||
void M_DrawPlaybackMenu(void);
|
||||
|
|
|
|||
|
|
@ -4538,6 +4538,104 @@ void M_DrawPause(void)
|
|||
}
|
||||
}
|
||||
|
||||
void M_DrawKickHandler(void)
|
||||
{
|
||||
// fake round queue drawer simply to make release
|
||||
INT32 x = 29 + 4, y = 70, returny = y;
|
||||
INT32 pokeamount = (playerkickmenu.poke & 1) ? -playerkickmenu.poke/2 : playerkickmenu.poke/2;
|
||||
INT32 x2 = x + pokeamount - 9 - 8;
|
||||
|
||||
boolean datarightofcolumn = false;
|
||||
|
||||
patch_t *resbar = W_CachePatchName("R_RESBAR", PU_CACHE); // Results bars for players
|
||||
|
||||
UINT8 i;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
V_DrawMappedPatch(
|
||||
x, y,
|
||||
(playeringame[i] == true)
|
||||
? ((players[i].spectator == true) ? V_TRANSLUCENT : 0)
|
||||
: V_MODULATE,
|
||||
resbar, NULL
|
||||
);
|
||||
|
||||
V_DrawRightAlignedThinString(
|
||||
x+13, y-2,
|
||||
((i == playerkickmenu.player)
|
||||
? highlightflags
|
||||
: 0
|
||||
),
|
||||
va("%u", i)
|
||||
);
|
||||
|
||||
if (playeringame[i] == true)
|
||||
{
|
||||
if (players[i].skincolor != SKINCOLOR_NONE)
|
||||
{
|
||||
UINT8 *charcolormap;
|
||||
if ((players[i].pflags & PF_NOCONTEST) && players[i].bot)
|
||||
{
|
||||
// RETIRED !!
|
||||
charcolormap = R_GetTranslationColormap(TC_DEFAULT, players[i].skincolor, GTC_CACHE);
|
||||
V_DrawMappedPatch(x+14, y-5, 0, W_CachePatchName("MINIDEAD", PU_CACHE), charcolormap);
|
||||
}
|
||||
else
|
||||
{
|
||||
charcolormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, GTC_CACHE);
|
||||
V_DrawMappedPatch(x+14, y-5, 0, faceprefix[players[i].skin][FACE_MINIMAP], charcolormap);
|
||||
}
|
||||
}
|
||||
|
||||
V_DrawThinString(
|
||||
x+27, y-2,
|
||||
(
|
||||
P_IsMachineLocalPlayer(&players[i])
|
||||
? highlightflags
|
||||
: 0
|
||||
)|V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
||||
player_names[i]
|
||||
);
|
||||
|
||||
V_DrawRightAlignedThinString(
|
||||
x+118, y-2,
|
||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
||||
(players[i].spectator) ? "SPECTATOR" : "PLAYING"
|
||||
);
|
||||
}
|
||||
|
||||
if (i == playerkickmenu.player)
|
||||
{
|
||||
V_DrawScaledPatch(
|
||||
x2, y-1,
|
||||
(datarightofcolumn ? V_FLIP : 0),
|
||||
W_CachePatchName("M_CURSOR", PU_CACHE)
|
||||
);
|
||||
}
|
||||
|
||||
y += 13;
|
||||
|
||||
if (i == (MAXPLAYERS-1)/2)
|
||||
{
|
||||
x = 169 - 4;
|
||||
y = returny;
|
||||
|
||||
datarightofcolumn = true;
|
||||
x2 = x + 118 + 9 + 8 + 4 - pokeamount;
|
||||
}
|
||||
}
|
||||
|
||||
//V_DrawFill(32 + (playerkickmenu.player & 8), 32 + (playerkickmenu.player & 7)*8, 8, 8, playeringame[playerkickmenu.player] ? 0 : 16);
|
||||
|
||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
||||
V_DrawCenteredThinString(
|
||||
BASEVIDWIDTH/2, 12,
|
||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
||||
K_GetMidVoteLabel(menucallvote)
|
||||
);
|
||||
}
|
||||
|
||||
void M_DrawPlaybackMenu(void)
|
||||
{
|
||||
INT16 i;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ target_sources(SRB2SDL2 PRIVATE
|
|||
discord-requests.c
|
||||
message-box.c
|
||||
pause-game.c
|
||||
pause-kick.c
|
||||
pause-replay.c
|
||||
virtual-keyboard.c
|
||||
)
|
||||
|
|
|
|||
|
|
@ -333,8 +333,8 @@ void M_HandlePauseMenuCallVote(INT32 choice)
|
|||
}
|
||||
else if (K_MidVoteTypeUsesVictim(menucallvote) == true)
|
||||
{
|
||||
// Not yet implemented.
|
||||
S_StartSound(NULL, sfx_s3k7b);
|
||||
S_StartSound(NULL, sfx_s3k5b);
|
||||
M_KickHandler(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
112
src/menus/transient/pause-kick.c
Normal file
112
src/menus/transient/pause-kick.c
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
/// \file menus/transient/pause-kick.c
|
||||
/// \brief Player Kick menu
|
||||
|
||||
#include "../../k_menu.h"
|
||||
#include "../../s_sound.h"
|
||||
#include "../../p_local.h"
|
||||
#include "../../k_zvote.h"
|
||||
|
||||
struct playerkickmenu_s playerkickmenu;
|
||||
|
||||
static void M_PlayerKickHandler(INT32 choice)
|
||||
{
|
||||
const UINT8 pid = 0;
|
||||
|
||||
(void)choice;
|
||||
|
||||
if (menucmd[pid].dpad_lr != 0) // symmetrical in this case
|
||||
{
|
||||
S_StartSound(NULL, sfx_s3k5b);
|
||||
|
||||
playerkickmenu.player = ((playerkickmenu.player + 8) % MAXPLAYERS);
|
||||
|
||||
M_SetMenuDelay(pid);
|
||||
}
|
||||
|
||||
else if (menucmd[pid].dpad_ud > 0)
|
||||
{
|
||||
S_StartSound(NULL, sfx_s3k5b);
|
||||
|
||||
playerkickmenu.player = ((playerkickmenu.player + 1) & 7) + (playerkickmenu.player & 8);
|
||||
|
||||
M_SetMenuDelay(pid);
|
||||
}
|
||||
|
||||
else if (menucmd[pid].dpad_ud < 0)
|
||||
{
|
||||
S_StartSound(NULL, sfx_s3k5b);
|
||||
|
||||
playerkickmenu.player = ((playerkickmenu.player + 7) & 7) + (playerkickmenu.player & 8);
|
||||
|
||||
M_SetMenuDelay(pid);
|
||||
}
|
||||
|
||||
else if (M_MenuBackPressed(pid))
|
||||
{
|
||||
M_GoBack(0);
|
||||
M_SetMenuDelay(pid);
|
||||
}
|
||||
|
||||
else if (M_MenuConfirmPressed(pid))
|
||||
{
|
||||
M_SetMenuDelay(pid);
|
||||
|
||||
if (
|
||||
playeringame[playerkickmenu.player]
|
||||
&& P_IsMachineLocalPlayer(&players[playerkickmenu.player]) == false
|
||||
&& playerkickmenu.player != serverplayer
|
||||
)
|
||||
{
|
||||
if (
|
||||
K_MinimalCheckNewMidVote(menucallvote) == true
|
||||
#ifndef DEVELOP
|
||||
&& IsPlayerAdmin(playerkickmenu.player) == false
|
||||
#endif
|
||||
)
|
||||
{
|
||||
M_ClearMenus(true);
|
||||
K_SendCallMidVote(menucallvote, playerkickmenu.player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
playerkickmenu.poke = 8;
|
||||
S_StartSound(NULL, sfx_s3k7b);
|
||||
}
|
||||
}
|
||||
|
||||
static menuitem_t PAUSE_KickHandler[] =
|
||||
{
|
||||
{IT_NOTHING | IT_KEYHANDLER, NULL, NULL, NULL, {.routine = M_PlayerKickHandler}, 0, 0},
|
||||
};
|
||||
|
||||
static void M_KickHandlerTick(void)
|
||||
{
|
||||
playerkickmenu.ticker++;
|
||||
|
||||
if (playerkickmenu.poke)
|
||||
playerkickmenu.poke--;
|
||||
}
|
||||
|
||||
menu_t PAUSE_KickHandlerDef = {
|
||||
sizeof(PAUSE_KickHandler) / sizeof(menuitem_t),
|
||||
&PAUSE_MainDef,
|
||||
0,
|
||||
PAUSE_KickHandler,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0,
|
||||
NULL,
|
||||
0, 0,
|
||||
M_DrawKickHandler,
|
||||
M_KickHandlerTick,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
void M_KickHandler(INT32 choice)
|
||||
{
|
||||
PAUSE_KickHandlerDef.prevMenu = currentMenu;
|
||||
M_SetupNextMenu(&PAUSE_KickHandlerDef, true);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue