From 6352e8e3196f78388b6c771073f9e03eaa612673 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Tue, 20 Jun 2023 14:33:09 +1000 Subject: everything everywhere all at once --- source/core/StarNetElementSyncGroup.cpp | 88 +++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 source/core/StarNetElementSyncGroup.cpp (limited to 'source/core/StarNetElementSyncGroup.cpp') diff --git a/source/core/StarNetElementSyncGroup.cpp b/source/core/StarNetElementSyncGroup.cpp new file mode 100644 index 0000000..4ead00f --- /dev/null +++ b/source/core/StarNetElementSyncGroup.cpp @@ -0,0 +1,88 @@ +#include "StarNetElementSyncGroup.hpp" + +namespace Star { + +void NetElementSyncGroup::enableNetInterpolation(float extrapolationHint) { + NetElementGroup::enableNetInterpolation(extrapolationHint); + if (m_hasRecentChanges) + netElementsNeedLoad(false); +} + +void NetElementSyncGroup::disableNetInterpolation() { + NetElementGroup::disableNetInterpolation(); + if (m_hasRecentChanges) + netElementsNeedLoad(false); +} + +void NetElementSyncGroup::tickNetInterpolation(float dt) { + NetElementGroup::tickNetInterpolation(dt); + if (m_hasRecentChanges) { + m_recentDeltaTime -= dt; + if (netInterpolationEnabled()) + netElementsNeedLoad(false); + + if (m_recentDeltaTime < 0.0f && m_recentDeltaWasBlank) + m_hasRecentChanges = false; + } +} + +void NetElementSyncGroup::netStore(DataStream& ds) const { + const_cast(this)->netElementsNeedStore(); + return NetElementGroup::netStore(ds); +} + +void NetElementSyncGroup::netLoad(DataStream& ds) { + NetElementGroup::netLoad(ds); + netElementsNeedLoad(true); +} + +bool NetElementSyncGroup::writeNetDelta(DataStream& ds, uint64_t fromVersion) const { + const_cast(this)->netElementsNeedStore(); + return NetElementGroup::writeNetDelta(ds, fromVersion); +} + +void NetElementSyncGroup::readNetDelta(DataStream& ds, float interpolationTime) { + NetElementGroup::readNetDelta(ds, interpolationTime); + + m_hasRecentChanges = true; + m_recentDeltaTime = interpolationTime; + m_recentDeltaWasBlank = false; + + netElementsNeedLoad(false); +} + +void NetElementSyncGroup::blankNetDelta(float interpolationTime) { + NetElementGroup::blankNetDelta(interpolationTime); + + if (!m_recentDeltaWasBlank) { + m_recentDeltaTime = interpolationTime; + m_recentDeltaWasBlank = true; + } + + if (m_hasRecentChanges && netInterpolationEnabled()) + netElementsNeedLoad(false); +} + +void NetElementSyncGroup::netElementsNeedLoad(bool) {} + +void NetElementSyncGroup::netElementsNeedStore() {} + +void NetElementCallbackGroup::setNeedsLoadCallback(function needsLoadCallback) { + m_netElementsNeedLoad = move(needsLoadCallback); +} + +void NetElementCallbackGroup::setNeedsStoreCallback(function needsStoreCallback) { + m_netElementsNeedStore = move(needsStoreCallback); +} + +void NetElementCallbackGroup::netElementsNeedLoad(bool load) { + if (m_netElementsNeedLoad) + m_netElementsNeedLoad(load); +} + +void NetElementCallbackGroup::netElementsNeedStore() { + if (m_netElementsNeedStore) + m_netElementsNeedStore(); +} + +} -- cgit v1.2.3