diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/core/StarNetElementSyncGroup.cpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/core/StarNetElementSyncGroup.cpp')
-rw-r--r-- | source/core/StarNetElementSyncGroup.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
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<NetElementSyncGroup*>(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<NetElementSyncGroup*>(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<void(bool)> needsLoadCallback) { + m_netElementsNeedLoad = move(needsLoadCallback); +} + +void NetElementCallbackGroup::setNeedsStoreCallback(function<void()> needsStoreCallback) { + m_netElementsNeedStore = move(needsStoreCallback); +} + +void NetElementCallbackGroup::netElementsNeedLoad(bool load) { + if (m_netElementsNeedLoad) + m_netElementsNeedLoad(load); +} + +void NetElementCallbackGroup::netElementsNeedStore() { + if (m_netElementsNeedStore) + m_netElementsNeedStore(); +} + +} |