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

summaryrefslogtreecommitdiff
path: root/source/core/StarNetElement.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarNetElement.hpp')
-rw-r--r--source/core/StarNetElement.hpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/source/core/StarNetElement.hpp b/source/core/StarNetElement.hpp
index dd909b8..7d73b85 100644
--- a/source/core/StarNetElement.hpp
+++ b/source/core/StarNetElement.hpp
@@ -9,7 +9,7 @@ namespace Star {
class NetElementVersion {
public:
uint64_t current() const;
- void increment();
+ uint64_t increment();
private:
uint64_t m_version = 0;
@@ -20,15 +20,15 @@ class NetElement {
public:
virtual ~NetElement() = default;
- // A network of NetElements will have a shared monotinically increasing
+ // A network of NetElements will have a shared monotonically increasing
// NetElementVersion. When elements are updated, they will mark the version
// number at the time they are updated so that a delta can be constructed
// that contains only changes since any past version.
virtual void initNetVersion(NetElementVersion const* version = nullptr) = 0;
// Full store / load of the entire element.
- virtual void netStore(DataStream& ds) const = 0;
- virtual void netLoad(DataStream& ds) = 0;
+ virtual void netStore(DataStream& ds, NetCompatibilityRules rules) const = 0;
+ virtual void netLoad(DataStream& ds, NetCompatibilityRules rules) = 0;
// Enables interpolation mode. If interpolation mode is enabled, then
// NetElements will delay presenting incoming delta data for the
@@ -46,14 +46,34 @@ public:
// the version at the time of the *last* call to writeDelta, + 1. If
// fromVersion is 0, this will always write the full state. Should return
// true if a delta was needed and was written to DataStream, false otherwise.
- virtual bool writeNetDelta(DataStream& ds, uint64_t fromVersion) const = 0;
+ virtual bool writeNetDelta(DataStream& ds, uint64_t fromVersion, NetCompatibilityRules rules) const = 0;
// Read a delta written by writeNetDelta. 'interpolationTime' is the time in
// the future that data from this delta should be delayed and smoothed into,
// if interpolation is enabled.
- virtual void readNetDelta(DataStream& ds, float interpolationTime = 0.0) = 0;
+ virtual void readNetDelta(DataStream& ds, float interpolationTime = 0.0f, NetCompatibilityRules rules = {}) = 0;
// When extrapolating, it is important to notify when a delta WOULD have been
// received even if no deltas are produced, so no extrapolation takes place.
virtual void blankNetDelta(float interpolationTime);
+
+ VersionNumber compatibilityVersion() const;
+ void setCompatibilityVersion(VersionNumber version);
+ bool checkWithRules(NetCompatibilityRules const& rules) const;
+private:
+ VersionNumber m_netCompatibilityVersion = AnyVersion;
};
+inline VersionNumber NetElement::compatibilityVersion() const {
+ return m_netCompatibilityVersion;
+}
+
+inline void NetElement::setCompatibilityVersion(VersionNumber version) {
+ m_netCompatibilityVersion = version;
+}
+
+inline bool NetElement::checkWithRules(NetCompatibilityRules const& rules) const {
+ if (m_netCompatibilityVersion != AnyVersion)
+ return rules.version() >= m_netCompatibilityVersion;
+ return true;
+}
+
}