summaryrefslogtreecommitdiff
path: root/src/core/User.cpp
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
committerclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
commit9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686 (patch)
treea84756b82513739a2672db3a1f0ec579db6d18ff /src/core/User.cpp
downloadre3-9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686.tar.gz
re3-9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686.zip
Import Cai1Hsu/re3 @ miami (reVC / GTA:VC decompilation)HEADmiami
Snapshot import (no upstream history) into git.ancap.in.ua/claude, per @lzcnt. Source: https://github.com/Cai1Hsu/re3 branch miami.
Diffstat (limited to 'src/core/User.cpp')
-rw-r--r--src/core/User.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/core/User.cpp b/src/core/User.cpp
new file mode 100644
index 0000000..53196d0
--- /dev/null
+++ b/src/core/User.cpp
@@ -0,0 +1,135 @@
+#include "common.h"
+
+#include "GameLogic.h"
+#include "Hud.h"
+#include "PlayerPed.h"
+#include "Replay.h"
+#include "Text.h"
+#include "User.h"
+#include "Vehicle.h"
+#include "World.h"
+#include "Zones.h"
+
+CPlaceName CUserDisplay::PlaceName;
+COnscreenTimer CUserDisplay::OnscnTimer;
+CPager CUserDisplay::Pager;
+CCurrentVehicle CUserDisplay::CurrentVehicle;
+
+CPlaceName::CPlaceName()
+{
+ Init();
+}
+
+void
+CPlaceName::Init()
+{
+ m_pZone = nil;
+ m_pZone2 = nil;
+ m_nAdditionalTimer = 0;
+}
+
+void
+CPlaceName::Process()
+{
+ CVector pos = CWorld::Players[CWorld::PlayerInFocus].GetPos();
+ CZone *navigZone = CTheZones::FindSmallestNavigationZoneForPosition(&pos, false, true);
+ CZone *defaultZone = CTheZones::FindSmallestNavigationZoneForPosition(&pos, true, false);
+
+ if (navigZone == nil) m_pZone = nil;
+ if (defaultZone == nil) m_pZone2 = nil;
+
+ if (navigZone == m_pZone) {
+ if (defaultZone == m_pZone2 || m_pZone != nil) {
+ if (navigZone != nil || defaultZone != nil) {
+ if (m_nAdditionalTimer != 0)
+ m_nAdditionalTimer--;
+ } else {
+ m_nAdditionalTimer = 0;
+ m_pZone = nil;
+ m_pZone2 = nil;
+ }
+ } else {
+ m_pZone2 = defaultZone;
+ m_nAdditionalTimer = 250;
+ }
+ } else {
+ m_pZone = navigZone;
+ m_nAdditionalTimer = 250;
+ }
+ Display();
+}
+
+void
+CPlaceName::Display()
+{
+ wchar *text;
+ if (m_pZone != nil)
+ text = m_pZone->GetTranslatedName();
+ else if (m_pZone2 != nil)
+ text = m_pZone2->GetTranslatedName();
+#ifdef FIX_BUGS
+ else
+ text = nil;
+#endif
+ CHud::SetZoneName(text);
+}
+
+void
+CPlaceName::ProcessAfterFrontEndShutDown(void)
+{
+ CHud::m_pLastZoneName = nil;
+ CHud::m_ZoneState = 0;
+ m_nAdditionalTimer = 250;
+}
+
+CCurrentVehicle::CCurrentVehicle()
+{
+ Init();
+}
+
+void
+CCurrentVehicle::Init()
+{
+ m_pCurrentVehicle = nil;
+}
+
+void
+CCurrentVehicle::Process()
+{
+ if (CWorld::Players[CWorld::PlayerInFocus].m_pPed->InVehicle())
+ m_pCurrentVehicle = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pMyVehicle;
+ else
+ m_pCurrentVehicle = nil;
+ Display();
+}
+
+void
+CCurrentVehicle::Display()
+{
+ wchar *text = nil;
+ if (m_pCurrentVehicle != nil && m_pCurrentVehicle != CGameLogic::pShortCutTaxi)
+ text = TheText.Get(((CVehicleModelInfo*)CModelInfo::GetModelInfo(m_pCurrentVehicle->GetModelIndex()))->m_gameName);
+ CHud::SetVehicleName(text);
+}
+
+void
+CUserDisplay::Init()
+{
+ PlaceName.Init();
+ OnscnTimer.Init();
+ Pager.Init();
+ CurrentVehicle.Init();
+}
+
+void
+CUserDisplay::Process()
+{
+#ifdef FIX_BUGS
+ if (CReplay::IsPlayingBack())
+ return;
+#endif
+ PlaceName.Process();
+ OnscnTimer.Process();
+ Pager.Process();
+ CurrentVehicle.Process();
+}