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

summaryrefslogtreecommitdiff
path: root/source/core/StarNetElement.hpp
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/StarNetElement.hpp
parent90db1e0fbadaeb625691d3d0d13f5ae6ef057109 (diff)
Network compatibility changes
Diffstat (limited to 'source/core/StarNetElement.hpp')
-rw-r--r--source/core/StarNetElement.hpp30
1 files changed, 24 insertions, 6 deletions
diff --git a/source/core/StarNetElement.hpp b/source/core/StarNetElement.hpp
index dd909b8..393dd3d 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,32 @@ 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);
+
+ NetCompatibilityFilter netCompatibilityFilter() const;
+ void setNetCompatibilityFilter(NetCompatibilityFilter netFilter);
+ bool checkWithRules(NetCompatibilityRules const& rules) const;
+private:
+ NetCompatibilityFilter m_netCompatibilityFilter = NetCompatibilityFilter::None;
};
+inline NetCompatibilityFilter NetElement::netCompatibilityFilter() const {
+ return m_netCompatibilityFilter;
+}
+
+inline void NetElement::setNetCompatibilityFilter(NetCompatibilityFilter netFilter) {
+ m_netCompatibilityFilter = netFilter;
+}
+
+inline bool NetElement::checkWithRules(NetCompatibilityRules const& rules) const {
+ return rules.checkFilter(m_netCompatibilityFilter);
+}
+
}