Merge branch 'drawinput-profile-option' into 'master'

Input Display fixes

Closes #1085

See merge request KartKrew/Kart!1989
This commit is contained in:
James R. 2024-03-03 05:18:02 +00:00
commit 102fdf5978
6 changed files with 46 additions and 18 deletions

View file

@ -359,6 +359,7 @@ consvar_t cv_drawdist_precip = Player("drawdist_precip", "1024").values({
{0, "None"},
});
consvar_t cv_drawinput = Player("drawinput", "No").yes_no();
consvar_t cv_ffloorclip = Player("ffloorclip", "On").on_off();
consvar_t cv_fpscap = Player("fpscap", "Match refresh rate").values({
@ -445,7 +446,6 @@ consvar_t cv_showfocuslost = Player("showfocuslost", "Yes").yes_no();
void R_SetViewSize(void);
consvar_t cv_showhud = Player("showhud", "Yes").yes_no().onchange(R_SetViewSize).dont_save();
consvar_t cv_showinputjoy = Player("showinputjoy", "Off").on_off().dont_save();
consvar_t cv_skybox = Player("skybox", "On").on_off();
// Display song credits
@ -892,7 +892,6 @@ consvar_t cv_debugrender_spriteclip = PlayerCheat("debugrender_spriteclip", "Off
consvar_t cv_debugrender_visplanes = PlayerCheat("debugrender_visplanes", "Off").on_off().description("Highlight the number of visplanes");
consvar_t cv_devmode_screen = PlayerCheat("devmode_screen", "1").min_max(1, 4).description("Choose which splitscreen player devmode applies to");
consvar_t cv_drawpickups = PlayerCheat("drawpickups", "Yes").yes_no().description("Hide rings, spheres, item capsules, prison capsules (visual only)");
consvar_t cv_drawinput = PlayerCheat("drawinput", "No").yes_no().description("Draw turn inputs outside of Record Attack (turn solver debugging)");
void lua_profile_OnChange(void);
consvar_t cv_lua_profile = PlayerCheat("lua_profile", "0").values(CV_Unsigned).onchange(lua_profile_OnChange).description("Show hook timings over an average of N tics");

View file

@ -927,7 +927,6 @@ extern tic_t g_fast_forward;
#include "d_clisrv.h"
extern consvar_t cv_showinputjoy; // display joystick in time attack
extern consvar_t cv_forceskin; // force clients to use the server's skin
extern consvar_t cv_downloading; // allow clients to downloading WADs.
extern consvar_t cv_nettimeout; // SRB2Kart: Advanced server options menu

View file

@ -7,6 +7,7 @@
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
#include <algorithm>
#include <string>
#include <fmt/format.h>
@ -18,6 +19,8 @@
#include "../i_joy.h"
#include "../k_hud.h"
#include "../k_kart.h"
#include "../m_easing.h"
#include "../p_tick.h"
#include "../v_draw.hpp"
using srb2::Draw;
@ -59,8 +62,21 @@ const char* dpad_suffix(const Vec2<float>& v)
}; // namespace
void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent)
void K_DrawInputDisplay(float x, float y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent)
{
auto fade_in = []
{
constexpr tic_t kStart = TICRATE;
constexpr tic_t kDuration = TICRATE/2;
fixed_t f = std::min(std::max(leveltime, kStart) - kStart, kDuration) * FRACUNIT / kDuration;
return Easing_Linear(f, 0, 9);
};
auto alpha_to_flag = [](int alpha) { return (9 - alpha) << V_ALPHASHIFT; };
int alpha = fade_in();
if (alpha == 0)
return;
const ticcmd_t& cmd = players[displayplayers[pid]].cmd;
const boolean analog = (mode == '4' || mode == '5') ? players[displayplayers[pid]].analoginput : false;
const std::string prefix = fmt::format("PR{}", mode);
@ -73,7 +89,8 @@ void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boo
Draw box = Draw(x, y).flags(flags);
box.flags(transparent ? V_TRANSLUCENT : 0).patch(gfx("CONT"));
box.flags(alpha_to_flag(alpha / (transparent ? 2 : 1))).patch(gfx("CONT"));
box = box.flags(alpha_to_flag(alpha));
Vec2<float> dpad = local ?
Vec2<float> {

View file

@ -51,6 +51,7 @@
#include "g_party.h"
#include "k_hitlag.h"
#include "g_input.h"
#include "k_dialogue.h"
//{ Patch Definitions
static patch_t *kp_nodraw;
@ -5163,19 +5164,28 @@ static void K_drawKartFirstPerson(void)
static void K_drawInput(void)
{
UINT8 viewnum = R_GetViewNumber();
boolean freecam = camera[viewnum].freecam; //disable some hud elements w/ freecam
if (!cv_drawinput.value && !modeattacking && gametype != GT_TUTORIAL)
return;
if (stplyr->spectator || freecam || demo.attract)
return;
INT32 def[4][3] = {
{247, 156, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 1p
{247, 56, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 2p
{6, 52, V_SNAPTOBOTTOM | V_SNAPTOLEFT}, // 4p left
{282 - BASEVIDWIDTH/2, 52, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 4p right
};
INT32 k = r_splitscreen <= 1 ? r_splitscreen : 2 + (R_GetViewNumber() & 1);
INT32 flags = def[k][2] | V_SPLITSCREEN | V_SLIDEIN;
INT32 k = r_splitscreen <= 1 ? r_splitscreen : 2 + (viewnum & 1);
INT32 flags = def[k][2] | V_SPLITSCREEN;
char mode = ((stplyr->pflags & PF_ANALOGSTICK) ? '4' : '2') + (r_splitscreen > 1);
bool local = !demo.playback && P_IsMachineLocalPlayer(stplyr);
K_DrawInputDisplay(
def[k][0],
def[k][1],
def[k][0] - FixedToFloat(K_GetDialogueSlide(34 * FRACUNIT)),
def[k][1] - FixedToFloat(K_GetDialogueSlide(51 * FRACUNIT)),
flags,
mode,
(local ? G_LocalSplitscreenPartyPosition : G_PartyPosition)(stplyr - players),
@ -6062,13 +6072,6 @@ void K_drawKartHUD(void)
K_drawRingCounter(gametypeinfoshown);
}
if ((modeattacking && !bossinfo.valid) || cv_drawinput.value)
{
// Draw the input UI
if (LUA_HudEnabled(hud_position))
K_drawInput();
}
// Draw the item window
if (LUA_HudEnabled(hud_item) && !freecam)
{
@ -6128,7 +6131,10 @@ void K_drawKartHUD(void)
K_drawEmeraldWin(true);
if (modeattacking || freecam) // everything after here is MP and debug only
{
K_drawInput();
return;
}
if ((gametyperules & GTR_KARMA) && !r_splitscreen && (stplyr->karthud[khud_yougotem] % 2)) // * YOU GOT EM *
V_DrawScaledPatch(BASEVIDWIDTH/2 - (SHORT(kp_yougotem->width)/2), 32, V_HUDTRANS, kp_yougotem);
@ -6147,6 +6153,10 @@ void K_drawKartHUD(void)
{
K_drawSpectatorHUD(true);
}
else
{
K_drawInput();
}
if (cv_kartdebugdistribution.value)
K_drawDistributionDebugger();

View file

@ -63,7 +63,7 @@ void K_DrawKartPositionNumXY(
boolean exit, boolean lastLap, boolean losing
);
void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent);
void K_DrawInputDisplay(float x, float y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent);
extern patch_t *kp_capsuletarget_arrow[2][2];
extern patch_t *kp_capsuletarget_icon[2];

View file

@ -8,7 +8,7 @@
#include "../m_easing.h"
#include "../p_local.h" // cv_tilting
extern "C" consvar_t cv_mindelay;
extern "C" consvar_t cv_mindelay, cv_drawinput;
using srb2::Draw;
@ -119,6 +119,9 @@ menuitem_t OPTIONS_ProfileAccessibility[] = {
{IT_STRING | IT_CVAR, "Screenshake", "Adjust shake intensity from hazards and offroad.",
NULL, {.cvar = &cv_screenshake}, 0, 0},
{IT_STRING | IT_CVAR, "Input Display", "Show virtual controller on the HUD.",
NULL, {.cvar = &cv_drawinput}, 0, 0},
};
menu_t OPTIONS_ProfileAccessibilityDef = {