mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-17 19:11:30 +00:00
Toggle between freecam and director using C button
This commit is contained in:
parent
697e42cecd
commit
fcc35c1bb1
6 changed files with 52 additions and 14 deletions
|
|
@ -206,9 +206,17 @@ class TiccmdBuilder
|
|||
return true;
|
||||
}
|
||||
|
||||
void toggle_freecam_input()
|
||||
{
|
||||
if (M_MenuButtonPressed(forplayer(), MBT_C))
|
||||
{
|
||||
P_ToggleDemoCamera();
|
||||
}
|
||||
}
|
||||
|
||||
bool director_input()
|
||||
{
|
||||
if (G_IsPartyLocal(displayplayers[forplayer()]) == true)
|
||||
if (demo.freecam || G_IsPartyLocal(displayplayers[forplayer()]) == true)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -239,6 +247,8 @@ class TiccmdBuilder
|
|||
}
|
||||
}
|
||||
|
||||
toggle_freecam_input();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -376,6 +386,11 @@ public:
|
|||
if (!typing_input() && !director_input())
|
||||
{
|
||||
regular_input();
|
||||
|
||||
if (demo.freecam)
|
||||
{
|
||||
toggle_freecam_input();
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
|
|||
10
src/k_hud.c
10
src/k_hud.c
|
|
@ -5192,12 +5192,15 @@ static void K_drawDirectorHUD(void)
|
|||
offs = 2;
|
||||
}
|
||||
|
||||
K_DrawDirectorButton(offs + 1, "Freecam", kp_button_c[0], 0);
|
||||
|
||||
if (p == -1 || !playeringame[p] || players[p].spectator == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
K_DrawDirectorButton(offs + 1, "Director", kp_button_r,
|
||||
// TODO: this is too close to the screen bottom
|
||||
K_DrawDirectorButton(offs + 2, "Director", kp_button_r,
|
||||
(directorinfo.active ? V_YELLOWMAP : 0));
|
||||
|
||||
if (players[p].flashing)
|
||||
|
|
@ -5643,6 +5646,11 @@ void K_drawKartHUD(void)
|
|||
if (stplyr->karthud[khud_trickcool])
|
||||
K_drawTrickCool();
|
||||
|
||||
if (freecam)
|
||||
{
|
||||
K_DrawDirectorButton(3, "Freecam", kp_button_c[0], 0);
|
||||
}
|
||||
|
||||
if (modeattacking || freecam) // everything after here is MP and debug only
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -236,16 +236,7 @@ void M_PlaybackToggleFreecam(INT32 choice)
|
|||
splitscreen = 0;
|
||||
R_ExecuteSetViewSize();
|
||||
|
||||
if (!demo.freecam) // toggle on
|
||||
{
|
||||
demo.freecam = true;
|
||||
democam.button_a_held = 2;
|
||||
democam.reset_aiming = true;
|
||||
}
|
||||
else // toggle off
|
||||
{
|
||||
demo.freecam = false;
|
||||
}
|
||||
P_ToggleDemoCamera();
|
||||
}
|
||||
|
||||
void M_PlaybackQuit(INT32 choice)
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ boolean P_TryCameraMove(fixed_t x, fixed_t y, camera_t *thiscam);
|
|||
void P_SlideCameraMove(camera_t *thiscam);
|
||||
void P_DemoCameraMovement(camera_t *cam);
|
||||
boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcalled);
|
||||
void P_ToggleDemoCamera(void);
|
||||
|
||||
boolean P_PlayerInPain(player_t *player);
|
||||
void P_ResetPlayer(player_t *player);
|
||||
|
|
|
|||
|
|
@ -11969,6 +11969,15 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
{
|
||||
K_ToggleDirector(players[consoleplayer].spectator && pcount > 0);
|
||||
}
|
||||
|
||||
// TODO: handle splitscreen
|
||||
// Spectators can switch to freecam. This should be
|
||||
// disabled when they enter the race, or when the level
|
||||
// changes.
|
||||
if (playernum == consoleplayer && !demo.playback)
|
||||
{
|
||||
demo.freecam = false;
|
||||
}
|
||||
}
|
||||
|
||||
void P_AfterPlayerSpawn(INT32 playernum)
|
||||
|
|
|
|||
18
src/p_user.c
18
src/p_user.c
|
|
@ -2976,7 +2976,7 @@ void P_DemoCameraMovement(camera_t *cam)
|
|||
}
|
||||
}
|
||||
|
||||
if (!(cmd->buttons & BT_ACCELERATE) && democam.button_a_held)
|
||||
if (!(cmd->buttons & (BT_ACCELERATE | BT_DRIFT)) && democam.button_a_held)
|
||||
{
|
||||
democam.button_a_held--;
|
||||
}
|
||||
|
|
@ -3002,7 +3002,7 @@ void P_DemoCameraMovement(camera_t *cam)
|
|||
// forward/back will have a slope. So, as long as democam
|
||||
// controls haven't been used to alter the vertical angle,
|
||||
// slowly reset it to flat.
|
||||
if ((democam.reset_aiming && moving) || (cmd->buttons & BT_DRIFT))
|
||||
if ((democam.reset_aiming && moving) || ((cmd->buttons & BT_DRIFT) && !democam.button_a_held))
|
||||
{
|
||||
INT32 aiming = cam->aiming;
|
||||
INT32 smooth = FixedMul(ANGLE_11hh / 4, FCOS(cam->aiming));
|
||||
|
|
@ -3043,6 +3043,20 @@ void P_DemoCameraMovement(camera_t *cam)
|
|||
cam->subsector = R_PointInSubsector(cam->x, cam->y);
|
||||
}
|
||||
|
||||
void P_ToggleDemoCamera(void)
|
||||
{
|
||||
if (!demo.freecam) // toggle on
|
||||
{
|
||||
demo.freecam = true;
|
||||
democam.button_a_held = 2;
|
||||
democam.reset_aiming = true;
|
||||
}
|
||||
else // toggle off
|
||||
{
|
||||
demo.freecam = false;
|
||||
}
|
||||
}
|
||||
|
||||
void P_ResetCamera(player_t *player, camera_t *thiscam)
|
||||
{
|
||||
tic_t tries = 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue