From 37f3178d33ab77de064bcbf10b4b03ddb47cc979 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Thu, 5 Sep 2024 19:15:47 +1000 Subject: Network compatibility changes --- source/game/StarToolUser.cpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'source/game/StarToolUser.cpp') diff --git a/source/game/StarToolUser.cpp b/source/game/StarToolUser.cpp index 4135dd0..be239c1 100644 --- a/source/game/StarToolUser.cpp +++ b/source/game/StarToolUser.cpp @@ -612,15 +612,17 @@ void ToolUser::NetItem::initNetVersion(NetElementVersion const* version) { netItem->initNetVersion(m_netVersion); } -void ToolUser::NetItem::netStore(DataStream& ds) const { +void ToolUser::NetItem::netStore(DataStream& ds, NetCompatibilityRules rules) const { + if (!checkWithRules(rules)) return; const_cast(this)->updateItemDescriptor(); - m_itemDescriptor.netStore(ds); + m_itemDescriptor.netStore(ds, rules); if (auto netItem = as(m_item.get())) - netItem->netStore(ds); + netItem->netStore(ds, rules); } -void ToolUser::NetItem::netLoad(DataStream& ds) { - m_itemDescriptor.netLoad(ds); +void ToolUser::NetItem::netLoad(DataStream& ds, NetCompatibilityRules rules) { + if (!checkWithRules(rules)) return; + m_itemDescriptor.netLoad(ds, rules); auto itemDatabase = Root::singleton().itemDatabase(); if (itemDatabase->loadItem(m_itemDescriptor.get(), m_item)) { @@ -633,7 +635,7 @@ void ToolUser::NetItem::netLoad(DataStream& ds) { } if (auto netItem = as(m_item.get())) - netItem->netLoad(ds); + netItem->netLoad(ds, rules); } void ToolUser::NetItem::enableNetInterpolation(float extrapolationHint) { @@ -657,23 +659,24 @@ void ToolUser::NetItem::tickNetInterpolation(float dt) { } } -bool ToolUser::NetItem::writeNetDelta(DataStream& ds, uint64_t fromVersion) const { +bool ToolUser::NetItem::writeNetDelta(DataStream& ds, uint64_t fromVersion, NetCompatibilityRules rules) const { + if (!checkWithRules(rules)) return false; bool deltaWritten = false; const_cast(this)->updateItemDescriptor(); m_buffer.clear(); - if (m_itemDescriptor.writeNetDelta(m_buffer, fromVersion)) { + if (m_itemDescriptor.writeNetDelta(m_buffer, fromVersion, rules)) { deltaWritten = true; ds.write(1); ds.writeBytes(m_buffer.data()); if (auto netItem = as(m_item.get())) { ds.write(2); - netItem->netStore(ds); + netItem->netStore(ds, rules); } } if (auto netItem = as(m_item.get())) { m_buffer.clear(); - if (netItem->writeNetDelta(m_buffer, fromVersion)) { + if (netItem->writeNetDelta(m_buffer, fromVersion, rules)) { deltaWritten = true; ds.write(3); ds.writeBytes(m_buffer.data()); @@ -685,13 +688,14 @@ bool ToolUser::NetItem::writeNetDelta(DataStream& ds, uint64_t fromVersion) cons return deltaWritten; } -void ToolUser::NetItem::readNetDelta(DataStream& ds, float interpolationTime) { +void ToolUser::NetItem::readNetDelta(DataStream& ds, float interpolationTime, NetCompatibilityRules rules) { + if (!checkWithRules(rules)) return; while (true) { uint8_t code = ds.read(); if (code == 0) { break; } else if (code == 1) { - m_itemDescriptor.readNetDelta(ds); + m_itemDescriptor.readNetDelta(ds, 0.0f, rules); if (!m_item || !m_item->matches(m_itemDescriptor.get(), true)) { auto itemDatabase = Root::singleton().itemDatabase(); if (itemDatabase->loadItem(m_itemDescriptor.get(), m_item)) { @@ -705,12 +709,12 @@ void ToolUser::NetItem::readNetDelta(DataStream& ds, float interpolationTime) { } } else if (code == 2) { if (auto netItem = as(m_item.get())) - netItem->netLoad(ds); + netItem->netLoad(ds, rules); else throw IOException("Server/Client disagreement about whether an Item is a NetElement in NetItem::readNetDelta"); } else if (code == 3) { if (auto netItem = as(m_item.get())) - netItem->readNetDelta(ds, interpolationTime); + netItem->readNetDelta(ds, interpolationTime, rules); else throw IOException("Server/Client disagreement about whether an Item is a NetElement in NetItem::readNetDelta"); } else { -- cgit v1.2.3