fix: controllable physics prediction

This commit is contained in:
David Markowitz 2023-11-16 04:28:54 -08:00
parent 0ddd20e2b5
commit 1e9d7a20e6

View File

@ -68,7 +68,10 @@ ControllablePhysicsComponent::~ControllablePhysicsComponent() {
} }
void ControllablePhysicsComponent::Update(float deltaTime) { void ControllablePhysicsComponent::Update(float deltaTime) {
if (m_Static || m_Velocity == NiPoint3::ZERO) return;
m_Position += m_Velocity * deltaTime;
m_DirtyPosition = true;
Game::entityManager->SerializeEntity(m_Parent);
} }
void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) { void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) {
@ -101,14 +104,14 @@ void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bo
outBitStream->Write(m_GravityScale); outBitStream->Write(m_GravityScale);
outBitStream->Write(m_SpeedMultiplier); outBitStream->Write(m_SpeedMultiplier);
m_DirtyCheats = false; if (!bIsInitialUpdate) m_DirtyCheats = false;
} }
outBitStream->Write(m_DirtyEquippedItemInfo); outBitStream->Write(m_DirtyEquippedItemInfo);
if (m_DirtyEquippedItemInfo) { if (m_DirtyEquippedItemInfo) {
outBitStream->Write(m_PickupRadius); outBitStream->Write(m_PickupRadius);
outBitStream->Write(m_InJetpackMode); outBitStream->Write(m_InJetpackMode);
m_DirtyEquippedItemInfo = false; if (!bIsInitialUpdate) m_DirtyEquippedItemInfo = false;
} }
outBitStream->Write(m_DirtyBubble); outBitStream->Write(m_DirtyBubble);
@ -118,7 +121,7 @@ void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bo
outBitStream->Write(m_BubbleType); outBitStream->Write(m_BubbleType);
outBitStream->Write(m_SpecialAnims); outBitStream->Write(m_SpecialAnims);
} }
m_DirtyBubble = false; if (!bIsInitialUpdate) m_DirtyBubble = false;
} }
outBitStream->Write(m_DirtyPosition || bIsInitialUpdate); outBitStream->Write(m_DirtyPosition || bIsInitialUpdate);
@ -150,13 +153,14 @@ void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bo
} }
outBitStream->Write0(); outBitStream->Write0();
}
if (!bIsInitialUpdate) { if (!bIsInitialUpdate) {
m_DirtyPosition = false;
outBitStream->Write(m_IsTeleporting); outBitStream->Write(m_IsTeleporting);
m_IsTeleporting = false; m_IsTeleporting = false;
} }
} }
}
void ControllablePhysicsComponent::LoadFromXml(tinyxml2::XMLDocument* doc) { void ControllablePhysicsComponent::LoadFromXml(tinyxml2::XMLDocument* doc) {
tinyxml2::XMLElement* character = doc->FirstChildElement("obj")->FirstChildElement("char"); tinyxml2::XMLElement* character = doc->FirstChildElement("obj")->FirstChildElement("char");