diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-09-11 18:22:44 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-09-11 18:22:44 +1000 |
commit | 7408981e131f7cdd897a3c5924ea14b272986e88 (patch) | |
tree | 4e99c67e587aa7c1e9b4dbd046177efbc4ba4011 /source/core | |
parent | 5a75473e16afb8152aab943fd316d9820835f465 (diff) |
use a version number rather than a bool
more flexible, allows for backwards compat with older OpenSB versions & not just vanilla Starbound
Diffstat (limited to 'source/core')
-rw-r--r-- | source/core/CMakeLists.txt | 5 | ||||
-rw-r--r-- | source/core/StarDataStream.cpp | 5 | ||||
-rw-r--r-- | source/core/StarNetCompatibility.cpp | 7 | ||||
-rw-r--r-- | source/core/StarNetCompatibility.hpp | 54 | ||||
-rw-r--r-- | source/core/StarNetElement.hpp | 18 | ||||
-rw-r--r-- | source/core/StarVersion.cpp.in | 9 | ||||
-rw-r--r-- | source/core/StarVersion.hpp | 13 |
7 files changed, 78 insertions, 33 deletions
diff --git a/source/core/CMakeLists.txt b/source/core/CMakeLists.txt index bb8bd22..2f0c858 100644 --- a/source/core/CMakeLists.txt +++ b/source/core/CMakeLists.txt @@ -124,6 +124,7 @@ SET (star_core_HEADERS StarUnicode.hpp StarUuid.hpp StarVector.hpp + StarVersion.hpp StarVlqEncoding.hpp StarWeightedPool.hpp StarWorkerPool.hpp @@ -164,6 +165,7 @@ SET (star_core_SOURCES StarLua.cpp StarLuaConverters.cpp StarMemory.cpp + StarNetCompatibility.cpp StarNetElement.cpp StarNetElementBasicFields.cpp StarNetElementGroup.cpp @@ -219,7 +221,8 @@ ELSEIF (STAR_SYSTEM_FAMILY_WINDOWS) ENDIF () -ADD_LIBRARY (star_core OBJECT ${star_core_SOURCES} ${star_core_HEADERS}) +CONFIGURE_FILE (StarVersion.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/StarVersion.cpp) +ADD_LIBRARY (star_core OBJECT ${star_core_SOURCES} ${star_core_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/StarVersion.cpp) IF(STAR_PRECOMPILED_HEADERS) TARGET_PRECOMPILE_HEADERS (star_core PUBLIC StarPch.hpp) diff --git a/source/core/StarDataStream.cpp b/source/core/StarDataStream.cpp index 1224f54..3a4ed0c 100644 --- a/source/core/StarDataStream.cpp +++ b/source/core/StarDataStream.cpp @@ -36,10 +36,7 @@ void DataStream::setStreamCompatibilityVersion(unsigned streamCompatibilityVersi } void DataStream::setStreamCompatibilityVersion(NetCompatibilityRules const& rules) { - if (rules.isLegacy) - m_streamCompatibilityVersion = 1; - else - m_streamCompatibilityVersion = CurrentStreamVersion; + m_streamCompatibilityVersion = rules.version(); } ByteArray DataStream::readBytes(size_t len) { diff --git a/source/core/StarNetCompatibility.cpp b/source/core/StarNetCompatibility.cpp new file mode 100644 index 0000000..fdd53fb --- /dev/null +++ b/source/core/StarNetCompatibility.cpp @@ -0,0 +1,7 @@ +#include "StarNetCompatibility.hpp" + +namespace Star { + +VersionNumber const OpenProtocolVersion = 2; + +}
\ No newline at end of file diff --git a/source/core/StarNetCompatibility.hpp b/source/core/StarNetCompatibility.hpp index 730546e..4b950ab 100644 --- a/source/core/StarNetCompatibility.hpp +++ b/source/core/StarNetCompatibility.hpp @@ -1,40 +1,54 @@ #pragma once -#include "StarDataStream.hpp" +#include "StarVersion.hpp" +#include "StarHash.hpp" namespace Star { +extern VersionNumber const OpenProtocolVersion; -enum class NetCompatibilityFilter { - None = 0, - Old = 1, - New = 2 -}; +constexpr VersionNumber AnyVersion = 0xFFFFFFFF; +constexpr VersionNumber LegacyVersion = 0; -struct NetCompatibilityRules { - NetCompatibilityRules() = default; +class NetCompatibilityRules { +public: + NetCompatibilityRules(); NetCompatibilityRules(uint64_t) = delete; - NetCompatibilityRules(bool legacy); + NetCompatibilityRules(VersionNumber version); + + VersionNumber version() const; + void setVersion(VersionNumber version); + bool isLegacy() const; - bool checkFilter(NetCompatibilityFilter const& filter) const; + bool operator==(NetCompatibilityRules const& a) const; - bool isLegacy = false; +private: + VersionNumber m_version = OpenProtocolVersion; }; -inline NetCompatibilityRules::NetCompatibilityRules(bool legacy) : isLegacy(legacy) {} +inline NetCompatibilityRules::NetCompatibilityRules() : m_version(OpenProtocolVersion) {} + +inline NetCompatibilityRules::NetCompatibilityRules(VersionNumber v) : m_version(v) {} + +inline VersionNumber NetCompatibilityRules::version() const { + return m_version; +} + +inline void NetCompatibilityRules::setVersion(VersionNumber version) { + m_version = version; +} + +inline bool NetCompatibilityRules::isLegacy() const { + return m_version == LegacyVersion; +} -inline bool NetCompatibilityRules::checkFilter(NetCompatibilityFilter const& filter) const { - if (filter == NetCompatibilityFilter::None) - return true; - else if (isLegacy) - return filter == NetCompatibilityFilter::Old; - else - return filter == NetCompatibilityFilter::New; +inline bool NetCompatibilityRules::operator==(NetCompatibilityRules const& a) const { + return m_version == a.m_version; } template <> struct hash<NetCompatibilityRules> { size_t operator()(NetCompatibilityRules const& s) const { - return s.isLegacy; + return s.version(); } }; diff --git a/source/core/StarNetElement.hpp b/source/core/StarNetElement.hpp index 393dd3d..7d73b85 100644 --- a/source/core/StarNetElement.hpp +++ b/source/core/StarNetElement.hpp @@ -55,23 +55,25 @@ public: // received even if no deltas are produced, so no extrapolation takes place. virtual void blankNetDelta(float interpolationTime); - NetCompatibilityFilter netCompatibilityFilter() const; - void setNetCompatibilityFilter(NetCompatibilityFilter netFilter); + VersionNumber compatibilityVersion() const; + void setCompatibilityVersion(VersionNumber version); bool checkWithRules(NetCompatibilityRules const& rules) const; private: - NetCompatibilityFilter m_netCompatibilityFilter = NetCompatibilityFilter::None; + VersionNumber m_netCompatibilityVersion = AnyVersion; }; -inline NetCompatibilityFilter NetElement::netCompatibilityFilter() const { - return m_netCompatibilityFilter; +inline VersionNumber NetElement::compatibilityVersion() const { + return m_netCompatibilityVersion; } -inline void NetElement::setNetCompatibilityFilter(NetCompatibilityFilter netFilter) { - m_netCompatibilityFilter = netFilter; +inline void NetElement::setCompatibilityVersion(VersionNumber version) { + m_netCompatibilityVersion = version; } inline bool NetElement::checkWithRules(NetCompatibilityRules const& rules) const { - return rules.checkFilter(m_netCompatibilityFilter); + if (m_netCompatibilityVersion != AnyVersion) + return rules.version() >= m_netCompatibilityVersion; + return true; } } diff --git a/source/core/StarVersion.cpp.in b/source/core/StarVersion.cpp.in new file mode 100644 index 0000000..0529c19 --- /dev/null +++ b/source/core/StarVersion.cpp.in @@ -0,0 +1,9 @@ +#include "StarVersion.hpp" + +namespace Star { + +char const* const StarVersionString = "1.4.4"; +char const* const StarSourceIdentifierString = "${STAR_SOURCE_IDENTIFIER}"; +char const* const StarArchitectureString = "${STAR_SYSTEM} ${STAR_ARCHITECTURE}"; + +} diff --git a/source/core/StarVersion.hpp b/source/core/StarVersion.hpp new file mode 100644 index 0000000..ad65875 --- /dev/null +++ b/source/core/StarVersion.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "StarConfig.hpp" + +namespace Star { + +extern char const* const StarVersionString; +extern char const* const StarSourceIdentifierString; +extern char const* const StarArchitectureString; + +typedef uint32_t VersionNumber; + +} |