72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
#ifndef _ANCHORHELPER_H_
|
|
#define _ANCHORHELPER_H_
|
|
|
|
// RAGE headers:
|
|
#include "vector/vector3.h"
|
|
|
|
// Game headers:
|
|
|
|
|
|
// Forward declarations:
|
|
class CVehicle;
|
|
|
|
|
|
// This is a separate class because at least submarines need to anchor too and they aren't derived from CBoat.
|
|
class CAnchorHelper
|
|
{
|
|
public:
|
|
CAnchorHelper(CVehicle* pParent=NULL);
|
|
|
|
static bool IsVehicleAnchorable(const CVehicle* pVehicle);
|
|
// Used to simplify getting the anchor helper on arbitrary vehicles. Use after checking if this vehicle is of
|
|
// anchorable type. Asserts and returns NULL otherwise.
|
|
static CAnchorHelper* GetAnchorHelperPtr(CVehicle* pVehicle);
|
|
static const CAnchorHelper* GetAnchorHelperPtr(const CVehicle* pVehicle) { return const_cast<const CAnchorHelper*>(GetAnchorHelperPtr(const_cast<CVehicle*>(pVehicle))); }
|
|
|
|
void SetParent(CVehicle* pParent) { m_pParent = pParent; }
|
|
|
|
void Anchor(bool bAnchor, bool bForceConstraints=false);
|
|
bool IsAnchored() const { return m_nFlags.bLockedToXY==1; }
|
|
bool CanAnchorHere( bool excludeAllPedsStandingOnParent = false ) const;
|
|
bool UsingLowLodMode() const { return m_nFlags.bLowLodAnchorMode==1; }
|
|
bool ShouldForcePlayerBoatToRemainAnchored() const { return m_nFlags.bForcePlayerBoatAnchor==1; }
|
|
void ForcePlayerBoatToRemainAnchored(bool bValue) { m_nFlags.bForcePlayerBoatAnchor = bValue ? 1 : 0; }
|
|
bool ShouldAlwaysUseLowLodMode() const { return m_nFlags.bForceLowLodMode==1; }
|
|
void ForceLowLodModeAlways(bool bValue) { m_nFlags.bForceLowLodMode = bValue ? 1: 0; }
|
|
|
|
void SetLowLodMode(bool bValue) { m_nFlags.bLowLodAnchorMode = bValue ? 1 : 0; }
|
|
|
|
// Return the horizontal angular difference between orientation of the boat when physically constrained and the
|
|
// current orientation when switching back from low-LOD buoyancy mode.
|
|
float GetYawOffsetFromConstrainedOrientation() const;
|
|
|
|
//private: // TODO - Would be nice to make this private, but first we need to move the Low LOD anchor stuff in here.
|
|
void CreateAnchorConstraints();
|
|
|
|
#if __BANK
|
|
public:
|
|
void RenderDebug() const;
|
|
|
|
static bool ms_bDebugModeEnabled;
|
|
#endif // __BANK
|
|
|
|
private:
|
|
Vector3 m_vAnchorPosProw;
|
|
Vector3 m_vAnchorPosStern;
|
|
Vector3 m_vAnchorFwdVec;
|
|
Vector3 m_vAnchorSideVec;
|
|
|
|
CVehicle* m_pParent;
|
|
|
|
struct AnchorFlags
|
|
{
|
|
u8 bLockedToXY : 1;
|
|
u8 bLowLodAnchorMode : 1;
|
|
u8 bForcePlayerBoatAnchor : 1;
|
|
u8 bForceLowLodMode : 1;
|
|
};
|
|
AnchorFlags m_nFlags;
|
|
};
|
|
|
|
#endif //_ANCHORHELPER_H_
|