Browse Source

Merge pull request #25971 from akien-mga/version-hex

Add hex-encoded version number to Engine singleton for easy comparisons
Rémi Verschelde 6 years ago
parent
commit
7c8fbd892c
3 changed files with 14 additions and 0 deletions
  1. 1 0
      core/engine.cpp
  2. 5 0
      core/version.h
  3. 8 0
      doc/classes/Engine.xml

+ 1 - 0
core/engine.cpp

@@ -98,6 +98,7 @@ Dictionary Engine::get_version_info() const {
 #else
 	dict["patch"] = 0;
 #endif
+	dict["hex"] = VERSION_HEX;
 	dict["status"] = VERSION_STATUS;
 	dict["build"] = VERSION_BUILD;
 	dict["year"] = VERSION_YEAR;

+ 5 - 0
core/version.h

@@ -41,9 +41,14 @@
 #ifdef VERSION_PATCH
 // Example: "3.1.4"
 #define VERSION_NUMBER "" VERSION_BRANCH "." _MKSTR(VERSION_PATCH)
+// Version number encoded as hexadecimal int with one byte for each number,
+// for easy comparison from code.
+// Example: 3.1.4 will be 0x030104, making comparison easy from script.
+#define VERSION_HEX 0x10000 * VERSION_MAJOR + 0x100 * VERSION_MINOR + VERSION_PATCH
 #else
 // Example: "3.1"
 #define VERSION_NUMBER "" VERSION_BRANCH
+#define VERSION_HEX 0x10000 * VERSION_MAJOR + 0x100 * VERSION_MINOR
 #endif // VERSION_PATCH
 
 // Describes the full configuration of that Godot version, including the version number,

+ 8 - 0
doc/classes/Engine.xml

@@ -90,9 +90,17 @@
 				"major"    - Holds the major version number as an int
 				"minor"    - Holds the minor version number as an int
 				"patch"    - Holds the patch version number as an int
+				"hex"      - Holds the full version number encoded as an hexadecimal int with one byte (2 places) per number (see example below)
 				"status"   - Holds the status (e.g. "beta", "rc1", "rc2", ... "stable") as a String
 				"build"    - Holds the build name (e.g. "custom-build") as a String
 				"string"   - major + minor + patch + status + build in a single String
+				The "hex" value is encoded as follows, from left to right: one byte for the major, one byte for the minor, one byte for the patch version. For example, "3.1.12" would be [code]0x03010C[/code]. Note that it's still an int internally, and printing it will give you its decimal representation, which is not particularly meaningful. Use hexadecimal literals for easy version comparisons from code:
+				[codeblock]
+				if Engine.get_version_info().hex >= 0x030200:
+				    # do things specific to version 3.2 or later
+				else:
+				    # do things specific to versions before 3.2
+				[/codeblock]
 			</description>
 		</method>
 		<method name="has_singleton" qualifiers="const">