mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-10 01:30:50 +00:00
- added Raze-style HUD scaling.
This commit is contained in:
parent
0ee1cc85ec
commit
efaaa3c118
5 changed files with 79 additions and 9 deletions
|
@ -62,6 +62,7 @@ CVAR(Bool, crosshairgrow, false, CVAR_ARCHIVE);
|
||||||
EXTERN_CVAR(Bool, vid_fps)
|
EXTERN_CVAR(Bool, vid_fps)
|
||||||
|
|
||||||
EXTERN_CVAR(Float, hud_scalefactor)
|
EXTERN_CVAR(Float, hud_scalefactor)
|
||||||
|
EXTERN_CVAR(Bool, hud_aspectscale)
|
||||||
|
|
||||||
void ST_LoadCrosshair(int num, bool alwaysload)
|
void ST_LoadCrosshair(int num, bool alwaysload)
|
||||||
{
|
{
|
||||||
|
@ -353,10 +354,12 @@ void DStatusBarCore::SetScale()
|
||||||
int vert = VerticalResolution;
|
int vert = VerticalResolution;
|
||||||
double refaspect = horz / double(vert);
|
double refaspect = horz / double(vert);
|
||||||
double screenaspect = w / double(h);
|
double screenaspect = w / double(h);
|
||||||
|
double aspectscale = 1.0;
|
||||||
|
|
||||||
if ((horz == 320 && vert == 200) || (horz == 640 && vert == 400))
|
if ((horz == 320 && vert == 200) || (horz == 640 && vert == 400))
|
||||||
{
|
{
|
||||||
refaspect = 1.333;
|
refaspect = 1.333;
|
||||||
|
if (!hud_aspectscale) aspectscale = 1 / 1.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (screenaspect < refaspect)
|
if (screenaspect < refaspect)
|
||||||
|
@ -370,14 +373,14 @@ void DStatusBarCore::SetScale()
|
||||||
refw = h * refaspect;
|
refw = h * refaspect;
|
||||||
}
|
}
|
||||||
refw *= hud_scalefactor;
|
refw *= hud_scalefactor;
|
||||||
refh *= hud_scalefactor;
|
refh *= hud_scalefactor * aspectscale;
|
||||||
|
|
||||||
int sby = VerticalResolution - RelTop;
|
int sby = vert - int(RelTop * hud_scalefactor * aspectscale);
|
||||||
// Use full pixels for destination size.
|
// Use full pixels for destination size.
|
||||||
|
|
||||||
ST_X = xs_CRoundToInt((w - refw) / 2);
|
ST_X = xs_CRoundToInt((w - refw) / 2);
|
||||||
ST_Y = xs_CRoundToInt(h - refh);
|
ST_Y = xs_CRoundToInt(h - refh);
|
||||||
SBarTop = Scale(sby, h, VerticalResolution);
|
SBarTop = Scale(sby, h, vert);
|
||||||
SBarScale.X = refw / horz;
|
SBarScale.X = refw / horz;
|
||||||
SBarScale.Y = refh / vert;
|
SBarScale.Y = refh / vert;
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,6 +120,7 @@
|
||||||
#include "doomfont.h"
|
#include "doomfont.h"
|
||||||
#include "screenjob.h"
|
#include "screenjob.h"
|
||||||
#include "startscreen.h"
|
#include "startscreen.h"
|
||||||
|
#include "shiftstate.h"
|
||||||
|
|
||||||
#ifdef __unix__
|
#ifdef __unix__
|
||||||
#include "i_system.h" // for SHARE_DIR
|
#include "i_system.h" // for SHARE_DIR
|
||||||
|
@ -2630,6 +2631,8 @@ bool System_WantLeftButton()
|
||||||
|
|
||||||
static bool System_DispatchEvent(event_t* ev)
|
static bool System_DispatchEvent(event_t* ev)
|
||||||
{
|
{
|
||||||
|
shiftState.AddEvent(ev);
|
||||||
|
|
||||||
if (ev->type == EV_Mouse && menuactive == MENU_Off && ConsoleState != c_down && ConsoleState != c_falling && !primaryLevel->localEventManager->Responder(ev) && !paused)
|
if (ev->type == EV_Mouse && menuactive == MENU_Off && ConsoleState != c_down && ConsoleState != c_falling && !primaryLevel->localEventManager->Responder(ev) && !paused)
|
||||||
{
|
{
|
||||||
if (buttonMap.ButtonDown(Button_Mlook) || freelook)
|
if (buttonMap.ButtonDown(Button_Mlook) || freelook)
|
||||||
|
|
|
@ -160,15 +160,30 @@ void DBaseStatusBar::CreateAltHUD()
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
EXTERN_CVAR(Bool, hud_aspectscale)
|
EXTERN_CVAR(Bool, hud_aspectscale)
|
||||||
|
EXTERN_CVAR(Bool, hud_oldscale)
|
||||||
|
EXTERN_CVAR(Float, hud_scalefactor)
|
||||||
|
|
||||||
void DBaseStatusBar::DrawAltHUD()
|
void DBaseStatusBar::DrawAltHUD()
|
||||||
{
|
{
|
||||||
player_t * CPlayer = StatusBar->CPlayer;
|
player_t * CPlayer = StatusBar->CPlayer;
|
||||||
|
|
||||||
players[consoleplayer].inventorytics = 0;
|
players[consoleplayer].inventorytics = 0;
|
||||||
int scale = GetUIScale(twod, hud_althudscale);
|
int hudwidth;
|
||||||
int hudwidth = twod->GetWidth() / scale;
|
int hudheight;
|
||||||
int hudheight = hud_aspectscale ? int(twod->GetHeight() / (scale*1.2)) : twod->GetHeight() / scale;
|
|
||||||
|
if (hud_oldscale)
|
||||||
|
{
|
||||||
|
int scale = GetUIScale(twod, hud_althudscale);
|
||||||
|
hudwidth = twod->GetWidth() / scale;
|
||||||
|
hudheight = twod->GetHeight() / scale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hudwidth = int(640 / hud_scalefactor);
|
||||||
|
hudheight = hudwidth * twod->GetHeight() / twod->GetWidth();
|
||||||
|
}
|
||||||
|
if (hud_aspectscale) hudheight = hudheight * 5 / 6;
|
||||||
|
|
||||||
|
|
||||||
IFVIRTUALPTRNAME(AltHud, "AltHud", Draw)
|
IFVIRTUALPTRNAME(AltHud, "AltHud", Draw)
|
||||||
{
|
{
|
||||||
|
|
33
src/g_statusbar/shiftstate.h
Normal file
33
src/g_statusbar/shiftstate.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "d_event.h"
|
||||||
|
|
||||||
|
class ShiftState
|
||||||
|
{
|
||||||
|
bool ShiftStatus = false;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
bool ShiftPressed()
|
||||||
|
{
|
||||||
|
return ShiftStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddEvent(const event_t *ev)
|
||||||
|
{
|
||||||
|
if ((ev->type == EV_KeyDown || ev->type == EV_KeyUp) && (ev->data1 == KEY_LSHIFT || ev->data1 == KEY_RSHIFT))
|
||||||
|
{
|
||||||
|
ShiftStatus = ev->type == EV_KeyDown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Clear()
|
||||||
|
{
|
||||||
|
ShiftStatus = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
inline ShiftState shiftState;
|
|
@ -65,6 +65,7 @@
|
||||||
#include "d_player.h"
|
#include "d_player.h"
|
||||||
#include "teaminfo.h"
|
#include "teaminfo.h"
|
||||||
#include "i_time.h"
|
#include "i_time.h"
|
||||||
|
#include "shiftstate.h"
|
||||||
#include "hwrenderer/scene/hw_drawinfo.h"
|
#include "hwrenderer/scene/hw_drawinfo.h"
|
||||||
|
|
||||||
EXTERN_CVAR(Int, cl_gfxlocalization)
|
EXTERN_CVAR(Int, cl_gfxlocalization)
|
||||||
|
@ -72,6 +73,7 @@ EXTERN_CVAR(Bool, m_quickexit)
|
||||||
EXTERN_CVAR(Bool, saveloadconfirmation) // [mxd]
|
EXTERN_CVAR(Bool, saveloadconfirmation) // [mxd]
|
||||||
EXTERN_CVAR(Bool, quicksaverotation)
|
EXTERN_CVAR(Bool, quicksaverotation)
|
||||||
EXTERN_CVAR(Bool, show_messages)
|
EXTERN_CVAR(Bool, show_messages)
|
||||||
|
EXTERN_CVAR(Float, hud_scalefactor)
|
||||||
|
|
||||||
CVAR(Bool, m_simpleoptions, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR(Bool, m_simpleoptions, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
|
@ -504,14 +506,28 @@ EXTERN_CVAR (Int, screenblocks)
|
||||||
|
|
||||||
CCMD (sizedown)
|
CCMD (sizedown)
|
||||||
{
|
{
|
||||||
screenblocks = screenblocks - 1;
|
if (shiftState.ShiftPressed())
|
||||||
|
{
|
||||||
|
hud_scalefactor = hud_scalefactor - 0.04f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
screenblocks = screenblocks - 1;
|
||||||
|
}
|
||||||
S_Sound (CHAN_VOICE, CHANF_UI, "menu/change", snd_menuvolume, ATTN_NONE);
|
S_Sound (CHAN_VOICE, CHANF_UI, "menu/change", snd_menuvolume, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD (sizeup)
|
CCMD (sizeup)
|
||||||
{
|
{
|
||||||
screenblocks = screenblocks + 1;
|
if (shiftState.ShiftPressed())
|
||||||
S_Sound (CHAN_VOICE, CHANF_UI, "menu/change", snd_menuvolume, ATTN_NONE);
|
{
|
||||||
|
hud_scalefactor = hud_scalefactor + 0.04f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
screenblocks = screenblocks + 1;
|
||||||
|
}
|
||||||
|
S_Sound(CHAN_VOICE, CHANF_UI, "menu/change", snd_menuvolume, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD(reset2defaults)
|
CCMD(reset2defaults)
|
||||||
|
|
Loading…
Reference in a new issue