123 lines
3.9 KiB
GDScript
123 lines
3.9 KiB
GDScript
# ##############################################################################
|
|
#
|
|
# ##############################################################################
|
|
class VerNumTools:
|
|
|
|
static func _make_version_array_from_string(v):
|
|
var parts = Array(v.split('.'))
|
|
for i in range(parts.size()):
|
|
var int_val = parts[i].to_int()
|
|
if(str(int_val) == parts[i]):
|
|
parts[i] = parts[i].to_int()
|
|
return parts
|
|
|
|
|
|
static func make_version_array(v):
|
|
var to_return = []
|
|
if(typeof(v) == TYPE_STRING):
|
|
to_return = _make_version_array_from_string(v)
|
|
elif(typeof(v) == TYPE_DICTIONARY):
|
|
return [v.major, v.minor, v.patch]
|
|
elif(typeof(v) == TYPE_ARRAY):
|
|
to_return = v
|
|
return to_return
|
|
|
|
|
|
static func make_version_string(version_parts):
|
|
var to_return = 'x.x.x'
|
|
if(typeof(version_parts) == TYPE_ARRAY):
|
|
to_return = ".".join(version_parts)
|
|
elif(typeof(version_parts) == TYPE_DICTIONARY):
|
|
to_return = str(version_parts.major, '.', version_parts.minor, '.', version_parts.patch)
|
|
elif(typeof(version_parts) == TYPE_STRING):
|
|
to_return = version_parts
|
|
return to_return
|
|
|
|
|
|
static func is_version_gte(version, required):
|
|
var is_ok = null
|
|
var v = make_version_array(version)
|
|
var r = make_version_array(required)
|
|
|
|
var idx = 0
|
|
while(is_ok == null and idx < v.size() and idx < r.size()):
|
|
if(v[idx] > r[idx]):
|
|
is_ok = true
|
|
elif(v[idx] < r[idx]):
|
|
is_ok = false
|
|
|
|
idx += 1
|
|
|
|
# still null means each index was the same.
|
|
return GutUtils.nvl(is_ok, true)
|
|
|
|
|
|
static func is_version_eq(version, expected):
|
|
var version_array = make_version_array(version)
|
|
var expected_array = make_version_array(expected)
|
|
|
|
if(expected_array.size() > version_array.size()):
|
|
return false
|
|
|
|
var is_version = true
|
|
var i = 0
|
|
while(i < expected_array.size() and i < version_array.size() and is_version):
|
|
if(expected_array[i] == version_array[i]):
|
|
i += 1
|
|
else:
|
|
is_version = false
|
|
|
|
return is_version
|
|
|
|
|
|
static func is_godot_version_eq(expected):
|
|
return VerNumTools.is_version_eq(Engine.get_version_info(), expected)
|
|
|
|
|
|
static func is_godot_version_gte(expected):
|
|
return VerNumTools.is_version_gte(Engine.get_version_info(), expected)
|
|
|
|
|
|
|
|
|
|
# ##############################################################################
|
|
#
|
|
# ##############################################################################
|
|
var gut_version = '0.0.0'
|
|
var required_godot_version = '0.0.0'
|
|
|
|
func _init(gut_v = gut_version, required_godot_v = required_godot_version):
|
|
gut_version = gut_v
|
|
required_godot_version = required_godot_v
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Blurb of text with GUT and Godot versions.
|
|
# ------------------------------------------------------------------------------
|
|
func get_version_text():
|
|
var v_info = Engine.get_version_info()
|
|
var gut_version_info = str('GUT version: ', gut_version)
|
|
var godot_version_info = str('Godot version: ', v_info.major, '.', v_info.minor, '.', v_info.patch)
|
|
return godot_version_info + "\n" + gut_version_info
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Returns a nice string for erroring out when we have a bad Godot version.
|
|
# ------------------------------------------------------------------------------
|
|
func get_bad_version_text():
|
|
var info = Engine.get_version_info()
|
|
var gd_version = str(info.major, '.', info.minor, '.', info.patch)
|
|
return 'GUT ' + gut_version + ' requires Godot ' + required_godot_version + \
|
|
' or greater. Godot version is ' + gd_version
|
|
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Checks the Godot version against required_godot_version.
|
|
# ------------------------------------------------------------------------------
|
|
func is_godot_version_valid():
|
|
return VerNumTools.is_version_gte(Engine.get_version_info(), required_godot_version)
|
|
|
|
|
|
func make_godot_version_string():
|
|
return VerNumTools.make_version_string(Engine.get_version_info())
|