mirror of
https://github.com/DarkflameUniverse/DarkflameServer
synced 2024-08-30 18:43:58 +00:00
Merge pull request #559 Properly implement climbable setting for climbables
This shouldn't change anything that was available in live but anything that can be spawned in as climbable is able to be done so now.
This commit is contained in:
commit
44e17eabca
@ -17,6 +17,17 @@ SimplePhysicsComponent::SimplePhysicsComponent(uint32_t componentID, Entity* par
|
|||||||
m_Position = m_Parent->GetDefaultPosition();
|
m_Position = m_Parent->GetDefaultPosition();
|
||||||
m_Rotation = m_Parent->GetDefaultRotation();
|
m_Rotation = m_Parent->GetDefaultRotation();
|
||||||
m_IsDirty = true;
|
m_IsDirty = true;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SimplePhysicsComponent::~SimplePhysicsComponent() {
|
SimplePhysicsComponent::~SimplePhysicsComponent() {
|
||||||
@ -24,10 +35,10 @@ SimplePhysicsComponent::~SimplePhysicsComponent() {
|
|||||||
|
|
||||||
void SimplePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
|
void SimplePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
|
||||||
if (bIsInitialUpdate) {
|
if (bIsInitialUpdate) {
|
||||||
outBitStream->Write0(); // climbable
|
outBitStream->Write(m_ClimbableType != eClimbableType::CLIMBABLE_TYPE_NOT);
|
||||||
outBitStream->Write<int32_t>(0); // climbableType
|
outBitStream->Write(m_ClimbableType);
|
||||||
}
|
}
|
||||||
|
|
||||||
outBitStream->Write(m_DirtyVelocity || bIsInitialUpdate);
|
outBitStream->Write(m_DirtyVelocity || bIsInitialUpdate);
|
||||||
if (m_DirtyVelocity || bIsInitialUpdate) {
|
if (m_DirtyVelocity || bIsInitialUpdate) {
|
||||||
outBitStream->Write(m_Velocity);
|
outBitStream->Write(m_Velocity);
|
||||||
@ -46,7 +57,7 @@ void SimplePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIs
|
|||||||
{
|
{
|
||||||
outBitStream->Write0();
|
outBitStream->Write0();
|
||||||
}
|
}
|
||||||
|
|
||||||
outBitStream->Write(m_IsDirty || bIsInitialUpdate);
|
outBitStream->Write(m_IsDirty || bIsInitialUpdate);
|
||||||
if (m_IsDirty || bIsInitialUpdate) {
|
if (m_IsDirty || bIsInitialUpdate) {
|
||||||
outBitStream->Write(m_Position.x);
|
outBitStream->Write(m_Position.x);
|
||||||
@ -66,7 +77,7 @@ uint32_t SimplePhysicsComponent::GetPhysicsMotionState() const
|
|||||||
return m_PhysicsMotionState;
|
return m_PhysicsMotionState;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimplePhysicsComponent::SetPhysicsMotionState(uint32_t value)
|
void SimplePhysicsComponent::SetPhysicsMotionState(uint32_t value)
|
||||||
{
|
{
|
||||||
m_PhysicsMotionState = value;
|
m_PhysicsMotionState = value;
|
||||||
}
|
}
|
||||||
|
@ -14,16 +14,24 @@
|
|||||||
|
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
|
enum class eClimbableType : int32_t {
|
||||||
|
CLIMBABLE_TYPE_NOT = 0,
|
||||||
|
CLIMBABLE_TYPE_LADDER,
|
||||||
|
CLIMBABLE_TYPE_WALL,
|
||||||
|
CLIMBABLE_TYPE_WALL_STICK
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component that serializes locations of entities to the client
|
* Component that serializes locations of entities to the client
|
||||||
*/
|
*/
|
||||||
class SimplePhysicsComponent : public Component {
|
class SimplePhysicsComponent : public Component {
|
||||||
public:
|
public:
|
||||||
static const uint32_t ComponentType = COMPONENT_TYPE_SIMPLE_PHYSICS;
|
static const uint32_t ComponentType = COMPONENT_TYPE_SIMPLE_PHYSICS;
|
||||||
|
|
||||||
SimplePhysicsComponent(uint32_t componentID, Entity* parent);
|
SimplePhysicsComponent(uint32_t componentID, Entity* parent);
|
||||||
~SimplePhysicsComponent() override;
|
~SimplePhysicsComponent() override;
|
||||||
|
|
||||||
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags);
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,6 +94,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
void SetPhysicsMotionState(uint32_t value);
|
void SetPhysicsMotionState(uint32_t value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ClimbableType of this entity
|
||||||
|
* @return the ClimbableType of this entity
|
||||||
|
*/
|
||||||
|
const eClimbableType& GetClimabbleType() { return m_ClimbableType; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the ClimbableType of this entity
|
||||||
|
* @param value the ClimbableType to set
|
||||||
|
*/
|
||||||
|
void SetClimbableType(const eClimbableType& value) { m_ClimbableType = value; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,6 +142,11 @@ private:
|
|||||||
* The current physics motion state
|
* The current physics motion state
|
||||||
*/
|
*/
|
||||||
uint32_t m_PhysicsMotionState = 0;
|
uint32_t m_PhysicsMotionState = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether or not the entity is climbable
|
||||||
|
*/
|
||||||
|
eClimbableType m_ClimbableType = eClimbableType::CLIMBABLE_TYPE_NOT;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SIMPLEPHYSICSCOMPONENT_H
|
#endif // SIMPLEPHYSICSCOMPONENT_H
|
||||||
|
Loading…
Reference in New Issue
Block a user