Skip to content

Commit 0b27210

Browse files
authored
Merge branch 'master' into 210523_NewConstants
2 parents 337d5c9 + cd7dd1a commit 0b27210

File tree

119 files changed

+3861
-2661
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+3861
-2661
lines changed

Client/core/CChat.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,11 @@ void CChat::SetCharacterLimit(int charLimit)
11171117
m_iCharacterLimit = charLimit;
11181118
}
11191119

1120+
float CChat::GetChatBottomPosition() const noexcept
1121+
{
1122+
return m_vecBackgroundSize.fY;
1123+
}
1124+
11201125
CChatLine::CChatLine()
11211126
{
11221127
m_bActive = false;

Client/core/CChat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ class CChat
207207
constexpr int GetDefaultCharacterLimit() const { return m_iDefaultCharacterLimit; }
208208
constexpr int GetMaxCharacterLimit() const { return m_iMaxCharacterLimit; }
209209

210+
float GetChatBottomPosition() const noexcept;
211+
210212
private:
211213
void LoadCVars();
212214

Client/core/CCommands.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool
125125

126126
// Grab the command
127127
tagCOMMANDENTRY* pEntry = Get(szCommand);
128+
bool wasHandled = false;
128129
if (pEntry)
129130
{
130131
// If its a core command, or if its enabled
@@ -133,14 +134,16 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool
133134
// Execute it
134135
if (!bIsScriptedBind || pEntry->bAllowScriptedBind)
135136
ExecuteHandler(pEntry->pfnCmdFunc, szParameters);
136-
return true;
137+
138+
wasHandled = true;
137139
}
138140
}
139141

140142
// Recompose the original command text
141143
std::string val = std::string(szCommand) + " " + std::string(szParameters ? szParameters : "");
142144

143145
// Is it a cvar? (syntax: cvar[ = value])
146+
if (!wasHandled)
144147
{
145148
// Check to see if '=' exists
146149
unsigned int nOpIndex = val.find('=');
@@ -188,7 +191,7 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool
188191

189192
// HACK: if its a 'nick' command, save it here
190193
bool bIsNickCommand = !stricmp(szCommand, "nick");
191-
if (bIsNickCommand && szParameters && !bIsScriptedBind)
194+
if (!wasHandled && bIsNickCommand && szParameters && !bIsScriptedBind)
192195
{
193196
if (CCore::GetSingleton().IsValidNick(szParameters))
194197
{
@@ -208,10 +211,14 @@ bool CCommands::Execute(const char* szCommand, const char* szParametersIn, bool
208211
// Try to execute the handler
209212
if (m_pfnExecuteHandler)
210213
{
211-
if (m_pfnExecuteHandler(szCommand, szParameters, bHandleRemotely, (pEntry != NULL), bIsScriptedBind))
214+
bool bAllowScriptedBind = (!pEntry || pEntry->bAllowScriptedBind);
215+
if (m_pfnExecuteHandler(szCommand, szParameters, bHandleRemotely, wasHandled, bIsScriptedBind, bAllowScriptedBind))
212216
return true;
213217
}
214218

219+
if (wasHandled)
220+
return true;
221+
215222
// Unknown command
216223
val = _("Unknown command or cvar: ") + szCommand;
217224
if (!bIsScriptedBind && !bIsNickCommand && pEntry == nullptr)

Client/core/CGUI.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,11 @@ CChat* CLocalGUI::GetChat()
449449
return m_pChat;
450450
}
451451

452+
float CLocalGUI::GetChatBottomPosition() const noexcept
453+
{
454+
return m_pChat->GetChatBottomPosition();
455+
}
456+
452457
CDebugView* CLocalGUI::GetDebugView()
453458
{
454459
return m_pDebugView;

Client/core/CGUI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class CLocalGUI : public CSingleton<CLocalGUI>
6868
bool IsMainMenuVisible();
6969

7070
CChat* GetChat();
71+
float GetChatBottomPosition() const noexcept;
7172
void SetChatBoxVisible(bool bVisible, bool bInputBlocked = true);
7273
bool IsChatBoxVisible();
7374
bool IsChatBoxInputBlocked();

Client/core/CGraphStats.cpp

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313
namespace
1414
{
15-
#define GRAPHSTAT_HISTORY_SIZE 256
16-
1715
struct SGraphStatLine
1816
{
1917
TIMEUS prevData;
@@ -113,6 +111,11 @@ void CGraphStats::AddTimingPoint(const char* szName)
113111
if (!IsEnabled())
114112
return;
115113

114+
CGraphicsInterface* pGraphics = g_pCore->GetGraphics();
115+
116+
std::uint32_t viewportWidth = pGraphics->GetViewportWidth();
117+
std::uint32_t sizeX = viewportWidth / 4; // one quarter of screen width
118+
116119
// Start of next frame?
117120
if (szName[0] == 0)
118121
{
@@ -133,7 +136,7 @@ void CGraphStats::AddTimingPoint(const char* szName)
133136
for (int i = 0; i < Dups; i++)
134137
{
135138
pLine->iDataPos++;
136-
if (pLine->iDataPos > GRAPHSTAT_HISTORY_SIZE - 1)
139+
if (pLine->iDataPos > sizeX - 1)
137140
pLine->iDataPos = 0;
138141
pLine->dataHistory[pLine->iDataPos] = Data;
139142
}
@@ -153,7 +156,7 @@ void CGraphStats::AddTimingPoint(const char* szName)
153156
// Add new line
154157
MapSet(m_LineList, szName, SGraphStatLine());
155158
pLine = MapFind(m_LineList, szName);
156-
pLine->dataHistory.resize(GRAPHSTAT_HISTORY_SIZE);
159+
pLine->dataHistory.resize(sizeX);
157160
memset(&pLine->dataHistory[0], 0, pLine->dataHistory.size());
158161
pLine->iDataPos = 0;
159162
pLine->prevData = 0;
@@ -179,7 +182,7 @@ void CGraphStats::AddTimingPoint(const char* szName)
179182

180183
// Inc position
181184
pLine->iDataPos++;
182-
if (pLine->iDataPos > GRAPHSTAT_HISTORY_SIZE - 1)
185+
if (pLine->iDataPos > sizeX - 1)
183186
pLine->iDataPos = 0;
184187

185188
// Insert data point
@@ -199,44 +202,49 @@ void CGraphStats::Draw()
199202
return;
200203

201204
CGraphicsInterface* pGraphics = g_pCore->GetGraphics();
205+
CLocalGUI* pLocalGUI = g_pCore->GetLocalGUI();
206+
207+
std::uint32_t viewportWidth = pGraphics->GetViewportWidth(); // get width of current resolution
208+
std::uint32_t viewportHeight = pGraphics->GetViewportHeight(); // get height of current resolution
209+
std::uint32_t originX = 10; // offset the graph by 10 pixels from left side of screen
210+
std::uint32_t originY = pLocalGUI->GetChatBottomPosition(); // get chat bottom screen position
211+
std::uint32_t sizeX = viewportWidth / 4; // set the width of graph to 1/4 of current resolution
212+
std::uint32_t sizeY = viewportHeight / 4; // set the height of graph to 1/4 of current resolution
213+
std::uint32_t rangeY = 100; // 100ms
214+
215+
originY = originY + sizeY + 30; // add graph height plus a little gap to the overall Y position
202216

203-
uint uiViewportHeight = pGraphics->GetViewportHeight();
204-
uint uiOriginX = 10;
205-
uint uiOriginY = std::min<int>(500, uiViewportHeight - 10);
206-
uint uiSizeX = GRAPHSTAT_HISTORY_SIZE;
207-
uint uiSizeY = 150;
208-
uint uiRangeY = 100; // 100ms
209-
float fLineScale = 1 / 1000.f / uiRangeY * uiSizeY;
217+
float fLineScale = 1 / 1000.f / rangeY * sizeY;
210218
float fLineHeight = pGraphics->GetDXFontHeight();
211219

212220
// Backgroung box
213-
pGraphics->DrawRectQueued(uiOriginX, uiOriginY - uiSizeY, uiSizeX, uiSizeY, SColorRGBA(0, 0, 0, 128), true);
221+
pGraphics->DrawRectQueued(originX, originY - sizeY, sizeX, sizeY, SColorRGBA(0, 0, 0, 128), true);
214222

215223
// Draw data lines
216-
float fLabelX = uiOriginX + uiSizeX + 22;
217-
float fLabelY = uiOriginY - m_LineList.size() * fLineHeight;
224+
float fLabelX = originX + sizeX + 22;
225+
float fLabelY = originY - m_LineList.size() * fLineHeight;
218226
for (const auto& dataLine : m_LineList)
219227
{
220228
const SGraphStatLine& line = dataLine.second;
221229
int iDataPos = line.iDataPos;
222230
int iDataPosPrev = iDataPos;
223231

224-
for (int i = uiSizeX - 1; i > 0; i--)
232+
for (int i = sizeX - 1; i > 0; i--)
225233
{
226234
float fY0 = line.dataHistory[iDataPos] * fLineScale;
227235
float fY1 = line.dataHistory[iDataPosPrev] * fLineScale;
228236

229237
iDataPosPrev = iDataPos;
230238
iDataPos--;
231239
if (iDataPos == -1)
232-
iDataPos = GRAPHSTAT_HISTORY_SIZE - 1;
240+
iDataPos = sizeX - 1;
233241

234-
pGraphics->DrawLineQueued(uiOriginX + i - 1, uiOriginY - fY0, uiOriginX + i, uiOriginY - fY1, 1, line.color, true);
242+
pGraphics->DrawLineQueued(originX + i - 1, originY - fY0, originX + i, originY - fY1, 1, line.color, true);
235243

236-
if (i == uiSizeX - 1)
244+
if (i == sizeX - 1)
237245
{
238246
// Line from graph to label
239-
pGraphics->DrawLineQueued(uiOriginX + i - 1, uiOriginY - fY0, fLabelX - 2, fLabelY + fLineHeight / 2, 1, line.color, true);
247+
pGraphics->DrawLineQueued(originX + i - 1, originY - fY0, fLabelX - 2, fLabelY + fLineHeight / 2, 1, line.color, true);
240248
}
241249
}
242250

Client/core/CKeyBinds.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,8 @@ CCommandBind* CKeyBinds::FindCommandMatch(const char* szKey, const char* szComma
841841
NullEmptyStrings(szKey, szArguments, szResource, szOriginalScriptKey);
842842

843843
std::string arguments = szArguments ? szArguments : "";
844-
szArguments = SharedUtil::Trim(arguments.data());
844+
if (!arguments.empty())
845+
szArguments = SharedUtil::Trim(arguments.data());
845846

846847
for (KeyBindPtr& bind : m_binds)
847848
{

Client/game_sa/CCameraSA.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,3 +443,18 @@ float CCameraSA::GetShakeForce()
443443
CCameraSAInterface* pCameraInterface = GetInterface();
444444
return pCameraInterface->m_fCamShakeForce;
445445
}
446+
447+
void CCameraSA::ShakeCamera(float radius, float x, float y, float z) noexcept
448+
{
449+
static CCameraSAInterface* cameraInterface = GetInterface();
450+
if (radius <= 0.0f)
451+
return ResetShakeCamera();
452+
453+
using ShakeCamera_t = void(__thiscall*)(CCameraSAInterface*, float radius, float x, float y, float z);
454+
((ShakeCamera_t)FUNC_ShakeCam)(cameraInterface, radius, x, y, z);
455+
}
456+
457+
void CCameraSA::ResetShakeCamera() noexcept
458+
{
459+
GetInterface()->m_fCamShakeForce = 0.0f;
460+
}

Client/game_sa/CCameraSA.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#define FUNC_GetFading 0x50ADE0
2828
#define FUNC_Fade 0x50AC20
2929
#define FUNC_SetFadeColour 0x50BF00
30+
#define FUNC_ShakeCam 0x50A9F0
3031

3132
#define VAR_CameraRotation 0xB6F178 // used for controling where the player faces
3233
#define VAR_VehicleCameraView 0xB6F0DC
@@ -426,4 +427,7 @@ class CCameraSA : public CCamera
426427
void RestoreLastGoodState();
427428
void SetShakeForce(float fShakeForce);
428429
float GetShakeForce();
430+
431+
void ShakeCamera(float radius, float x, float y, float z) noexcept override;
432+
void ResetShakeCamera() noexcept override;
429433
};

Client/game_sa/CCarEnterExitSA.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,19 @@ bool CCarEnterExitSA::GetNearestCarPassengerDoor(CPed* pPed, CVehicle* pVehicle,
7878
return bReturn;
7979
}
8080

81+
void CCarEnterExitSA::GetPositionToOpenCarDoor(CVector& position, CVehicle* vehicle, std::uint32_t door) const noexcept
82+
{
83+
CVehicleSA* vehicleSA = dynamic_cast<CVehicleSA*>(vehicle);
84+
85+
if (!vehicleSA)
86+
return;
87+
88+
CVehicleSAInterface* vehicleInterface = vehicleSA->GetVehicleInterface();
89+
90+
auto CCarEnterExit_GetPositionToOpenCarDoor = (void(__cdecl*)(CVector&, CVehicleSAInterface*, int))FUNC_GetPositionToOpenCarDoor;
91+
CCarEnterExit_GetPositionToOpenCarDoor(position, vehicleInterface, door);
92+
}
93+
8194
int CCarEnterExitSA::ComputeTargetDoorToExit(CPed* pPed, CVehicle* pVehicle)
8295
{
8396
DWORD dwFunc = FUNC_ComputeTargetDoorToExit;

0 commit comments

Comments
 (0)