Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarNetElementGroup.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-09-05 19:15:47 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-09-11 15:19:17 +1000
commit37f3178d33ab77de064bcbf10b4b03ddb47cc979 (patch)
tree76e3b3ce2d8716577af98e2bbbc4a41021db5107 /source/core/StarNetElementGroup.cpp
parent90db1e0fbadaeb625691d3d0d13f5ae6ef057109 (diff)
Network compatibility changes
Diffstat (limited to 'source/core/StarNetElementGroup.cpp')
-rw-r--r--source/core/StarNetElementGroup.cpp41
1 files changed, 28 insertions, 13 deletions
diff --git a/source/core/StarNetElementGroup.cpp b/source/core/StarNetElementGroup.cpp
index 249c978..6626e2b 100644
--- a/source/core/StarNetElementGroup.cpp
+++ b/source/core/StarNetElementGroup.cpp
@@ -21,14 +21,18 @@ void NetElementGroup::initNetVersion(NetElementVersion const* version) {
p.first->initNetVersion(m_version);
}
-void NetElementGroup::netStore(DataStream& ds) const {
+void NetElementGroup::netStore(DataStream& ds, NetCompatibilityRules rules) const {
+ if (!checkWithRules(rules)) return;
for (auto& p : m_elements)
- p.first->netStore(ds);
+ if (p.first->checkWithRules(rules))
+ p.first->netStore(ds, rules);
}
-void NetElementGroup::netLoad(DataStream& ds) {
+void NetElementGroup::netLoad(DataStream& ds, NetCompatibilityRules rules) {
+ if (!checkWithRules(rules)) return;
for (auto& p : m_elements)
- p.first->netLoad(ds);
+ if (p.first->checkWithRules(rules))
+ p.first->netLoad(ds, rules);
}
void NetElementGroup::enableNetInterpolation(float extrapolationHint) {
@@ -56,17 +60,23 @@ void NetElementGroup::tickNetInterpolation(float dt) {
}
}
-bool NetElementGroup::writeNetDelta(DataStream& ds, uint64_t fromStep) const {
+bool NetElementGroup::writeNetDelta(DataStream& ds, uint64_t fromVersion, NetCompatibilityRules rules) const {
+ if (!checkWithRules(rules)) return false;
if (m_elements.size() == 0) {
return false;
} else if (m_elements.size() == 1) {
- return m_elements[0].first->writeNetDelta(ds, fromStep);
+ return m_elements[0].first->writeNetDelta(ds, fromVersion, rules);
} else {
bool deltaWritten = false;
- for (uint64_t i = 0; i < m_elements.size(); ++i) {
- if (m_elements[i].first->writeNetDelta(m_buffer, fromStep)) {
+ uint64_t i = 0;
+ m_buffer.setStreamCompatibilityVersion(rules);
+ for (auto& element : m_elements) {
+ if (!element.first->checkWithRules(rules))
+ continue;
+ ++i;
+ if (element.first->writeNetDelta(m_buffer, fromVersion, rules)) {
deltaWritten = true;
- ds.writeVlqU(i + 1);
+ ds.writeVlqU(i);
ds.writeBytes(m_buffer.data());
m_buffer.clear();
}
@@ -77,23 +87,28 @@ bool NetElementGroup::writeNetDelta(DataStream& ds, uint64_t fromStep) const {
}
}
-void NetElementGroup::readNetDelta(DataStream& ds, float interpolationTime) {
+void NetElementGroup::readNetDelta(DataStream& ds, float interpolationTime, NetCompatibilityRules rules) {
+ if (!checkWithRules(rules)) return;
if (m_elements.size() == 0) {
throw IOException("readNetDelta called on empty NetElementGroup");
} else if (m_elements.size() == 1) {
- m_elements[0].first->readNetDelta(ds, interpolationTime);
+ m_elements[0].first->readNetDelta(ds, interpolationTime, rules);
} else {
uint64_t readIndex = ds.readVlqU();
- for (uint64_t i = 0; i < m_elements.size(); ++i) {
+ uint64_t i = 0;
+ for (auto& element : m_elements) {
+ if (!element.first->checkWithRules(rules))
+ continue;
if (readIndex == 0 || readIndex - 1 > i) {
if (m_interpolationEnabled)
m_elements[i].first->blankNetDelta(interpolationTime);
} else if (readIndex - 1 == i) {
- m_elements[i].first->readNetDelta(ds, interpolationTime);
+ m_elements[i].first->readNetDelta(ds, interpolationTime, rules);
readIndex = ds.readVlqU();
} else {
throw IOException("group indexes out of order in NetElementGroup::readNetDelta");
}
+ ++i;
}
}
}