summaryrefslogtreecommitdiff
path: root/src/vehicles/Boat.h
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/vehicles/Boat.h
downloadre3-miami.tar.gz
re3-miami.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/vehicles/Boat.h')
-rw-r--r--src/vehicles/Boat.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/vehicles/Boat.h b/src/vehicles/Boat.h
new file mode 100644
index 0000000..5d866c4
--- /dev/null
+++ b/src/vehicles/Boat.h
@@ -0,0 +1,85 @@
+#pragma once
+
+#include "Vehicle.h"
+#include "Door.h"
+
+enum eBoatNodes
+{
+ BOAT_MOVING = 1,
+ BOAT_WINDSCREEN,
+ BOAT_RUDDER,
+ BOAT_FLAP_LEFT,
+ BOAT_FLAP_RIGHT,
+ BOAT_REARFLAP_LEFT,
+ BOAT_REARFLAP_RIGHT,
+ NUM_BOAT_NODES
+};
+
+class CBoat : public CVehicle
+{
+public:
+ float m_fMovingRotation;
+ float m_fMovingSpeed;
+ int32 m_boat_unused1;
+ RwFrame *m_aBoatNodes[NUM_BOAT_NODES];
+ CDoor m_boom;
+ tBoatHandlingData *pBoatHandling;
+ uint8 bBoatInWater : 1;
+ uint8 bPropellerInWater : 1;
+ bool m_bIsAnchored;
+ float m_fOrientation;
+ uint32 m_nPoliceShoutTimer;
+ int32 m_boat_unused2;
+ float m_fDamage;
+ CEntity *m_pSetOnFireEntity;
+ float m_skimmerThingTimer;
+ bool m_boat_unused3;
+ float m_fAccelerate;
+ float m_fBrake;
+ float m_fSteeringLeftRight;
+ uint8 m_nPadID;
+ int32 m_boat_unused4;
+ float m_fVolumeUnderWater;
+ CVector m_vecBuoyancePoint;
+ float m_fPrevVolumeUnderWater;
+ int16 m_nDeltaVolumeUnderWater;
+ uint16 m_nNumWakePoints;
+ CVector2D m_avec2dWakePoints[32];
+ float m_afWakePointLifeTime[32];
+
+ static float MAX_WAKE_LENGTH;
+ static float MIN_WAKE_INTERVAL;
+ static float WAKE_LIFETIME;
+
+ CBoat(int, uint8);
+
+ virtual void SetModelIndex(uint32 id);
+ virtual void ProcessControl();
+ virtual void Teleport(CVector v);
+ virtual void PreRender(void);
+ virtual void Render(void);
+ virtual void ProcessControlInputs(uint8);
+ virtual void GetComponentWorldPosition(int32 component, CVector &pos);
+ virtual bool IsComponentPresent(int32 component) { return true; }
+ virtual void BlowUpCar(CEntity *ent);
+
+ void RenderWaterOutPolys(void);
+ void ApplyWaterResistance(void);
+ void SetupModelNodes();
+ void PruneWakeTrail(void);
+ void AddWakePoint(CVector point);
+ void DoDriveByShootings(void);
+
+ static CBoat *apFrameWakeGeneratingBoats[4];
+
+ static bool IsSectorAffectedByWake(CVector2D sector, float fSize, CBoat **apBoats);
+ static float IsVertexAffectedByWake(CVector vecVertex, CBoat *pBoat);
+ static void FillBoatList(void);
+
+#ifdef COMPATIBLE_SAVES
+ virtual void Save(uint8*& buf);
+ virtual void Load(uint8*& buf);
+#endif
+ static const uint32 nSaveStructSize;
+
+}; \ No newline at end of file