mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-04 09:44:10 +00:00
Fix Model Component Serialization (#655)
* Fix model component serialization * Update ModelComponent.h
This commit is contained in:
@@ -1,42 +1,32 @@
|
||||
#include "ModelComponent.h"
|
||||
#include "Entity.h"
|
||||
|
||||
ModelComponent::ModelComponent(uint32_t componentID, Entity* parent) : Component(parent)
|
||||
ModelComponent::ModelComponent(Entity* parent) : Component(parent)
|
||||
{
|
||||
m_Position = m_Parent->GetDefaultPosition();
|
||||
m_Rotation = m_Parent->GetDefaultRotation();
|
||||
m_OriginalPosition = m_Parent->GetDefaultPosition();
|
||||
m_OriginalRotation = m_Parent->GetDefaultRotation();
|
||||
|
||||
m_userModelID = m_Parent->GetVarAs<LWOOBJID>(u"userModelID");
|
||||
|
||||
/*
|
||||
for (auto set : m_Parent->GetInfo().settings) {
|
||||
if (set && set->GetKey() == u"userModelID") {
|
||||
m_userModelID = std::stoull(set->GetValueAsString());
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
ModelComponent::~ModelComponent() {
|
||||
}
|
||||
|
||||
void ModelComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
|
||||
//item component:
|
||||
outBitStream->Write1();
|
||||
outBitStream->Write<LWOOBJID>(m_userModelID);
|
||||
outBitStream->Write<int>(0);
|
||||
outBitStream->Write0();
|
||||
// ItemComponent Serialization. Pets do not get this serialization.
|
||||
if (!m_Parent->HasComponent(COMPONENT_TYPE_PET)) {
|
||||
outBitStream->Write1();
|
||||
outBitStream->Write<LWOOBJID>(m_userModelID != LWOOBJID_EMPTY ? m_userModelID : m_Parent->GetObjectID());
|
||||
outBitStream->Write<int>(0);
|
||||
outBitStream->Write0();
|
||||
}
|
||||
|
||||
//actual model component:
|
||||
outBitStream->Write1(); //yes we are writing model info
|
||||
outBitStream->Write0(); //??
|
||||
outBitStream->Write<int>(2); //model type, always 2 for BBB
|
||||
outBitStream->Write1(); // Yes we are writing model info
|
||||
outBitStream->Write0(); // Is pickable
|
||||
outBitStream->Write<uint32_t>(2); // Physics type
|
||||
outBitStream->Write(m_OriginalPosition); // Original position
|
||||
outBitStream->Write(m_OriginalRotation); // Original rotation
|
||||
|
||||
outBitStream->Write(m_Position);
|
||||
outBitStream->Write(m_Rotation);
|
||||
|
||||
outBitStream->Write1(); //second data flag, all unknown. Maybe skip?
|
||||
outBitStream->Write<int>(0);
|
||||
outBitStream->Write1();
|
||||
outBitStream->Write0();
|
||||
outBitStream->Write1(); // We are writing behavior info
|
||||
outBitStream->Write<uint32_t>(0); // Number of behaviors
|
||||
outBitStream->Write1(); // Is this model paused
|
||||
if (bIsInitialUpdate) outBitStream->Write0(); // We are not writing model editing info
|
||||
}
|
||||
|
Reference in New Issue
Block a user