Files
GTASource/game/modelinfo/VehicleModelInfoExtensions.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

146 lines
4.2 KiB
C++

// VEHICLE MODEL EXTENSIONS:
// Classes describing extra information about vehicles which is not needed for all vehicles.
#ifndef VEHICLE_MODEL_INFO_DOORS_H_
#define VEHICLE_MODEL_INFO_DOORS_H_
#if !__SPU // This file gets pulled in by the wheel SPU job.
// Rage headers.
#include "atl/array.h"
// Game headers.
#include "Vehicles/vehicle.h"
// Framework headers.
#include "entity/extensionlist.h"
// Forward declarations.
enum eDoorId;
const u8 MAX_NUM_DOORS = (u8)CVehicle::MAX_NUM_DOOR_COMPONENTS;
class CVehicleModelInfoDoors : public fwExtension
{
friend class CVehicleModelInfo;
public:
EXTENSIONID_DECL(CVehicleModelInfoDoors, fwExtension);
CVehicleModelInfoDoors();
~CVehicleModelInfoDoors() {}
eHierarchyId ConvertExtensionIdToHierarchyId(eDoorId doorId);
u32 AddDoorWithCollisionId(eHierarchyId doorId);
bool ContainsThisDoorWithCollision(eHierarchyId doorId);
u32 AddDriveableDoorId(eHierarchyId doorId);
bool ContainsThisDriveableDoor(eHierarchyId doorId);
u32 AddStiffnessMultForThisDoorId(eHierarchyId doorId, float fStiffnessMult);
float GetStiffnessMultForThisDoor(eHierarchyId doorId);
private:
eHierarchyId m_doorsWithCollisionWhenClosed[MAX_NUM_DOORS];
u8 m_nNumDoorsWithCollisionWhenClosed;
eHierarchyId m_driveableDoors[MAX_NUM_DOORS];
u8 m_nNumDriveableDoors;
eHierarchyId m_DoorWithStiffnessMults[MAX_NUM_DOORS];
float m_DoorStiffnessMults[MAX_NUM_DOORS];
u8 m_nNumDoorStiffnessMults;
};
class CVehicleModelInfoBuoyancy : public fwExtension
{
friend class CVehicleModelInfo;
public:
EXTENSIONID_DECL(CVehicleModelInfoBuoyancy, fwExtension);
CVehicleModelInfoBuoyancy();
~CVehicleModelInfoBuoyancy() {}
void SetBuoyancySphereOffset(const Vector3& vOffset) { m_vBuoyancySphereOffset = vOffset; }
const Vector3& GetBuoyancySphereOffset() const { return m_vBuoyancySphereOffset; }
void SetBuoyancySphereSizeScale(float fValue) { m_fBuoyancySphereSizeScale = fValue; }
float GetBuoyancySphereSizeScale() const { return m_fBuoyancySphereSizeScale; }
void SetAdditionalVfxWaterSamples(const atArray<CAdditionalVfxWaterSample>& sampleArray) { m_additionalVfxWaterSamples = sampleArray; }
int GetNumAdditionalVfxSamples() const { return m_additionalVfxWaterSamples.GetCount(); }
const CAdditionalVfxWaterSample* GetAdditionalVfxSamples() const { return m_additionalVfxWaterSamples.GetElements(); }
private:
Vector3 m_vBuoyancySphereOffset;
float m_fBuoyancySphereSizeScale;
atArray<CAdditionalVfxWaterSample> m_additionalVfxWaterSamples;
};
class CConvertibleRoofWindowInfo : public fwExtension
{
friend class CVehicleModelInfo;
public:
EXTENSIONID_DECL(CConvertibleRoofWindowInfo, fwExtension);
CConvertibleRoofWindowInfo();
~CConvertibleRoofWindowInfo() {}
eHierarchyId ConvertExtensionIdToHierarchyId(eWindowId nWindowId);
u32 AddWindowId(eHierarchyId nWindowId);
bool ContainsThisWindowId(eHierarchyId nWindowId) const;
atArray<eHierarchyId>& GetWindowList() { return m_WindowsAffected; }
private:
atArray<eHierarchyId> m_WindowsAffected;
};
class CVehicleModelInfoBumperCollision : public fwExtension
{
friend class CVehicleModelInfo;
public:
EXTENSIONID_DECL(CVehicleModelInfoBumperCollision, fwExtension);
CVehicleModelInfoBumperCollision() {};
~CVehicleModelInfoBumperCollision() {}
void SetBumpersNeedMapCollision(bool bValue) { m_bBumpersNeedToCollideWithMap = bValue; }
bool GetBumpersNeedMapCollision() const { return m_bBumpersNeedToCollideWithMap; }
private:
bool m_bBumpersNeedToCollideWithMap;
};
class CVehicleModelInfoRagdollActivation : public fwExtension
{
friend class CVehicleModelInfo;
public:
EXTENSIONID_DECL(CVehicleModelInfoRagdollActivation, fwExtension);
CVehicleModelInfoRagdollActivation(s32 minComponent, s32 maxComponent, float modifier)
: m_iMinComponentIndex(minComponent)
, m_iMaxComponentIndex(maxComponent)
, m_fActivationModifier(modifier)
{};
~CVehicleModelInfoRagdollActivation() {};
float GetRagdollActivationModifier(s32 sComponent) const { return sComponent>=m_iMinComponentIndex && sComponent<= m_iMaxComponentIndex ? m_fActivationModifier : 1.0f; }
private:
s32 m_iMinComponentIndex;
s32 m_iMaxComponentIndex;
float m_fActivationModifier;
};
#endif // !__SPU
#endif // VEHICLE_MODEL_INFO_DOORS_H_