Merge branch 'voting-after-the-vote-ended' into 'master'

Double vote picking and modifying vote after vote ended

See merge request KartKrew/Kart!195
This commit is contained in:
Sal 2020-05-04 15:50:02 -04:00
commit ebb3471124

View file

@ -156,6 +156,7 @@ static y_votelvlinfo levelinfo[5];
static y_voteclient voteclient;
static INT32 votetic;
static INT32 voteendtic = -1;
static boolean votenotyetpicked;
static patch_t *cursor = NULL;
static patch_t *cursor1 = NULL;
static patch_t *cursor2 = NULL;
@ -1604,68 +1605,75 @@ void Y_VoteTicker(void)
else
voteclient.ranim = pickedvote;
}
else
else if (votenotyetpicked)
{
if (votetic < 3*(NEWTICRATE/7)) // give it some time before letting you control it :V
return;
for (i = 0; i <= splitscreen; i++)
/*
The vote ended, but it will take at least a tic for that to reach us from
the server. Don't let me change the vote now, it won't matter anyway!
*/
if (timer)
{
UINT8 p;
boolean pressed = false;
switch (i)
for (i = 0; i <= splitscreen; i++)
{
case 1:
p = g_localplayers[1];
break;
case 2:
p = g_localplayers[2];
break;
case 3:
p = g_localplayers[3];
break;
default:
p = consoleplayer;
break;
}
UINT8 p;
boolean pressed = false;
if (voteclient.playerinfo[i].delay)
voteclient.playerinfo[i].delay--;
if ((playeringame[p] && !players[p].spectator)
&& !voteclient.playerinfo[i].delay
&& pickedvote == -1 && votes[p] == -1)
{
if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0)
switch (i)
{
voteclient.playerinfo[i].selection--;
pressed = true;
case 1:
p = g_localplayers[1];
break;
case 2:
p = g_localplayers[2];
break;
case 3:
p = g_localplayers[3];
break;
default:
p = consoleplayer;
break;
}
if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0) && !pressed)
if (voteclient.playerinfo[i].delay)
voteclient.playerinfo[i].delay--;
if ((playeringame[p] && !players[p].spectator)
&& !voteclient.playerinfo[i].delay
&& pickedvote == -1 && votes[p] == -1)
{
voteclient.playerinfo[i].selection++;
pressed = true;
if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0)
{
voteclient.playerinfo[i].selection--;
pressed = true;
}
if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0) && !pressed)
{
voteclient.playerinfo[i].selection++;
pressed = true;
}
if (voteclient.playerinfo[i].selection < 0)
voteclient.playerinfo[i].selection = 3;
if (voteclient.playerinfo[i].selection > 3)
voteclient.playerinfo[i].selection = 0;
if ((InputDown(gc_accelerate, i+1) || JoyAxis(AXISMOVE, i+1) > 0) && !pressed)
{
D_ModifyClientVote(voteclient.playerinfo[i].selection, i);
pressed = true;
}
}
if (voteclient.playerinfo[i].selection < 0)
voteclient.playerinfo[i].selection = 3;
if (voteclient.playerinfo[i].selection > 3)
voteclient.playerinfo[i].selection = 0;
if ((InputDown(gc_accelerate, i+1) || JoyAxis(AXISMOVE, i+1) > 0) && !pressed)
if (pressed)
{
D_ModifyClientVote(voteclient.playerinfo[i].selection, i);
pressed = true;
S_StartSound(NULL, sfx_kc4a);
voteclient.playerinfo[i].delay = NEWTICRATE/7;
}
}
if (pressed)
{
S_StartSound(NULL, sfx_kc4a);
voteclient.playerinfo[i].delay = NEWTICRATE/7;
}
}
if (server)
@ -1689,7 +1697,10 @@ void Y_VoteTicker(void)
timer = 0;
if (voteendtic == -1)
{
votenotyetpicked = false;/* don't pick vote twice */
D_PickVote();
}
}
}
}
@ -1723,6 +1734,8 @@ void Y_StartVote(void)
timer = cv_votetime.value*TICRATE;
pickedvote = -1;
votenotyetpicked = true;
for (i = 0; i < 3; i++)
{
voteclient.playerinfo[i].selection = 0;