2021-12-05 17:54:36 +00:00
|
|
|
/*
|
|
|
|
* Darkflame Universe
|
|
|
|
* Copyright 2018
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "SimplePhysicsComponent.h"
|
|
|
|
#include "BitStream.h"
|
|
|
|
#include "Game.h"
|
2023-10-21 23:31:55 +00:00
|
|
|
#include "Logger.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
#include "dpWorld.h"
|
|
|
|
#include "CDClientManager.h"
|
|
|
|
#include "CDPhysicsComponentTable.h"
|
|
|
|
|
|
|
|
#include "Entity.h"
|
|
|
|
|
2024-12-16 05:44:57 +00:00
|
|
|
SimplePhysicsComponent::SimplePhysicsComponent(Entity* parent, int32_t componentID) : PhysicsComponent(parent, componentID) {
|
2022-07-28 13:39:57 +00:00
|
|
|
m_Position = m_Parent->GetDefaultPosition();
|
|
|
|
m_Rotation = m_Parent->GetDefaultRotation();
|
2022-05-18 02:27:08 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
const auto& climbable_type = m_Parent->GetVar<std::u16string>(u"climbable");
|
|
|
|
if (climbable_type == u"wall") {
|
|
|
|
SetClimbableType(eClimbableType::CLIMBABLE_TYPE_WALL);
|
|
|
|
} else if (climbable_type == u"ladder") {
|
|
|
|
SetClimbableType(eClimbableType::CLIMBABLE_TYPE_LADDER);
|
|
|
|
} else if (climbable_type == u"wallstick") {
|
|
|
|
SetClimbableType(eClimbableType::CLIMBABLE_TYPE_WALL_STICK);
|
|
|
|
} else {
|
|
|
|
SetClimbableType(eClimbableType::CLIMBABLE_TYPE_NOT);
|
|
|
|
}
|
2024-11-18 02:44:35 +00:00
|
|
|
m_PhysicsMotionState = m_Parent->GetVarAs<uint32_t>(u"motionType");
|
2021-12-05 17:54:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SimplePhysicsComponent::~SimplePhysicsComponent() {
|
|
|
|
}
|
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
void SimplePhysicsComponent::Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) {
|
2022-07-28 13:39:57 +00:00
|
|
|
if (bIsInitialUpdate) {
|
2024-02-27 07:25:44 +00:00
|
|
|
outBitStream.Write(m_ClimbableType != eClimbableType::CLIMBABLE_TYPE_NOT);
|
|
|
|
outBitStream.Write(m_ClimbableType);
|
2022-07-28 13:39:57 +00:00
|
|
|
}
|
2022-05-18 02:27:08 +00:00
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
outBitStream.Write(m_DirtyVelocity || bIsInitialUpdate);
|
2022-07-28 13:39:57 +00:00
|
|
|
if (m_DirtyVelocity || bIsInitialUpdate) {
|
2024-02-27 07:25:44 +00:00
|
|
|
outBitStream.Write(m_Velocity);
|
|
|
|
outBitStream.Write(m_AngularVelocity);
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
m_DirtyVelocity = false;
|
|
|
|
}
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
// Physics motion state
|
2024-11-18 02:44:35 +00:00
|
|
|
outBitStream.Write(m_DirtyPhysicsMotionState || bIsInitialUpdate);
|
|
|
|
if (m_DirtyPhysicsMotionState || bIsInitialUpdate) {
|
2024-02-27 07:25:44 +00:00
|
|
|
outBitStream.Write<uint32_t>(m_PhysicsMotionState);
|
2024-11-18 02:44:35 +00:00
|
|
|
m_DirtyPhysicsMotionState = false;
|
2022-07-28 13:39:57 +00:00
|
|
|
}
|
2023-10-09 20:19:38 +00:00
|
|
|
PhysicsComponent::Serialize(outBitStream, bIsInitialUpdate);
|
2021-12-05 17:54:36 +00:00
|
|
|
}
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
uint32_t SimplePhysicsComponent::GetPhysicsMotionState() const {
|
|
|
|
return m_PhysicsMotionState;
|
2021-12-05 17:54:36 +00:00
|
|
|
}
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
void SimplePhysicsComponent::SetPhysicsMotionState(uint32_t value) {
|
2024-11-18 02:44:35 +00:00
|
|
|
m_DirtyPhysicsMotionState = m_PhysicsMotionState != value;
|
2022-07-28 13:39:57 +00:00
|
|
|
m_PhysicsMotionState = value;
|
2021-12-05 17:54:36 +00:00
|
|
|
}
|