2021-12-05 17:54:36 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "BitStream.h"
|
|
|
|
#include "Entity.h"
|
2023-10-09 20:19:38 +00:00
|
|
|
#include "PhysicsComponent.h"
|
2023-03-04 07:16:37 +00:00
|
|
|
#include "eReplicaComponentType.h"
|
2024-01-07 07:05:57 +00:00
|
|
|
#include "PositionUpdate.h"
|
2023-06-20 14:19:21 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Physics component for vehicles.
|
|
|
|
*/
|
2023-12-04 15:20:41 +00:00
|
|
|
class HavokVehiclePhysicsComponent : public PhysicsComponent {
|
2021-12-05 17:54:36 +00:00
|
|
|
public:
|
2024-01-24 05:13:23 +00:00
|
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::HAVOK_VEHICLE_PHYSICS;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2023-12-04 15:20:41 +00:00
|
|
|
HavokVehiclePhysicsComponent(Entity* parentEntity);
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2023-08-10 21:33:15 +00:00
|
|
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
2021-12-05 17:54:36 +00:00
|
|
|
|
|
|
|
void Update(float deltaTime) override;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Sets the velocity
|
|
|
|
* @param vel the new velocity
|
|
|
|
*/
|
|
|
|
void SetVelocity(const NiPoint3& vel);
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Gets the velocity
|
|
|
|
* @return the velocity
|
|
|
|
*/
|
|
|
|
const NiPoint3& GetVelocity() const { return m_Velocity; }
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Sets the angular velocity
|
|
|
|
* @param vel the new angular velocity
|
|
|
|
*/
|
|
|
|
void SetAngularVelocity(const NiPoint3& vel);
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Gets the angular velocity
|
|
|
|
* @return the angular velocity
|
|
|
|
*/
|
|
|
|
const NiPoint3& GetAngularVelocity() const { return m_AngularVelocity; }
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Sets whether the vehicle is on the ground
|
|
|
|
* @param val whether the vehicle is on the ground
|
|
|
|
*/
|
|
|
|
void SetIsOnGround(bool val);
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Gets whether the vehicle is on the ground
|
|
|
|
* @return whether the vehicle is on the ground
|
|
|
|
*/
|
|
|
|
const bool GetIsOnGround() const { return m_IsOnGround; }
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Gets whether the vehicle is on rail
|
|
|
|
* @return whether the vehicle is on rail
|
|
|
|
*/
|
|
|
|
void SetIsOnRail(bool val);
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
/**
|
|
|
|
* Gets whether the vehicle is on rail
|
|
|
|
* @return whether the vehicle is on rail
|
|
|
|
*/
|
|
|
|
const bool GetIsOnRail() const { return m_IsOnRail; }
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
void SetDirtyPosition(bool val);
|
|
|
|
void SetDirtyVelocity(bool val);
|
|
|
|
void SetDirtyAngularVelocity(bool val);
|
2023-06-20 14:19:21 +00:00
|
|
|
void SetRemoteInputInfo(const RemoteInputInfo&);
|
2021-12-05 17:54:36 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
bool m_DirtyVelocity;
|
|
|
|
NiPoint3 m_Velocity;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
bool m_DirtyAngularVelocity;
|
|
|
|
NiPoint3 m_AngularVelocity;
|
|
|
|
bool m_IsOnGround;
|
|
|
|
bool m_IsOnRail;
|
2022-07-28 13:39:57 +00:00
|
|
|
|
2021-12-05 17:54:36 +00:00
|
|
|
float m_SoftUpdate = 0;
|
2023-04-18 06:40:20 +00:00
|
|
|
uint32_t m_EndBehavior;
|
2023-06-20 14:19:21 +00:00
|
|
|
RemoteInputInfo m_RemoteInputInfo;
|
|
|
|
bool m_DirtyRemoteInput;
|
2021-12-05 17:54:36 +00:00
|
|
|
};
|