climbable server side settings

This commit is contained in:
Aaron Kimbre 2022-05-17 21:27:08 -05:00
parent cc23538244
commit 03a5aa4da0
2 changed files with 43 additions and 7 deletions

View File

@ -17,6 +17,17 @@ SimplePhysicsComponent::SimplePhysicsComponent(uint32_t componentID, Entity* par
m_Position = m_Parent->GetDefaultPosition();
m_Rotation = m_Parent->GetDefaultRotation();
m_IsDirty = true;
std::u16string climbable_type = m_Parent->GetVar<std::u16string>(u"climbable");
if (climbable_type == u"wall") {
SetClimbableType(CLIMBABLE_TYPE_WALL);
} else if (climbable_type == u"ladder") {
SetClimbableType(CLIMBABLE_TYPE_LADDER);
} else if (climbable_type == u"wallstick") {
SetClimbableType(CLIMBABLE_TYPE_WALL_STICK);
} else {
SetClimbableType(CLIMBABLE_TYPE_NOT);
}
}
SimplePhysicsComponent::~SimplePhysicsComponent() {
@ -24,10 +35,10 @@ SimplePhysicsComponent::~SimplePhysicsComponent() {
void SimplePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
if (bIsInitialUpdate) {
outBitStream->Write0(); // climbable
outBitStream->Write<int32_t>(0); // climbableType
outBitStream->Write(m_ClimbableType > 0);
outBitStream->Write<int32_t>(m_ClimbableType);
}
outBitStream->Write(m_DirtyVelocity || bIsInitialUpdate);
if (m_DirtyVelocity || bIsInitialUpdate) {
outBitStream->Write(m_Velocity);
@ -46,7 +57,7 @@ void SimplePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIs
{
outBitStream->Write0();
}
outBitStream->Write(m_IsDirty || bIsInitialUpdate);
if (m_IsDirty || bIsInitialUpdate) {
outBitStream->Write(m_Position.x);
@ -66,7 +77,7 @@ uint32_t SimplePhysicsComponent::GetPhysicsMotionState() const
return m_PhysicsMotionState;
}
void SimplePhysicsComponent::SetPhysicsMotionState(uint32_t value)
void SimplePhysicsComponent::SetPhysicsMotionState(uint32_t value)
{
m_PhysicsMotionState = value;
}

View File

@ -14,16 +14,24 @@
class Entity;
enum eClimbableType : int32_t {
CLIMBABLE_TYPE_NOT,
CLIMBABLE_TYPE_LADDER,
CLIMBABLE_TYPE_WALL,
CLIMBABLE_TYPE_WALL_STICK
};
/**
* Component that serializes locations of entities to the client
*/
class SimplePhysicsComponent : public Component {
public:
static const uint32_t ComponentType = COMPONENT_TYPE_SIMPLE_PHYSICS;
SimplePhysicsComponent(uint32_t componentID, Entity* parent);
~SimplePhysicsComponent() override;
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags);
/**
@ -86,6 +94,18 @@ public:
*/
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:
/**
@ -122,6 +142,11 @@ private:
* The current physics motion state
*/
uint32_t m_PhysicsMotionState = 0;
/**
* Whether or not the entity is climbable
*/
eClimbableType m_ClimbableType = CLIMBABLE_TYPE_NOT;
};
#endif // SIMPLEPHYSICSCOMPONENT_H