DarkflameServer/dGame/dComponents/SimplePhysicsComponent.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

67 lines
2.0 KiB
C++
Raw Permalink Normal View History

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