Extend UnityVersion class to compare build numbers

This commit is contained in:
VaDiM
2026-02-27 16:09:51 +03:00
parent 006e5adcf2
commit 6bdf6fa80b
6 changed files with 132 additions and 6 deletions
+1 -1
View File
@@ -753,7 +753,7 @@ namespace AssetStudio
{
m_Binding = new ValueArrayConstant(reader);
}
if (version.IsTuanjie && (version > (2022, 3, 48) || (version == (2022, 3, 48) && version.Build >= 3))) //2022.3.48t3(1.4.0) and up
if (version.IsTuanjie && version >= (2022, 3, 48, 3)) //2022.3.48t3(1.4.0) and up
{
m_ACLClip = new ACLClip(reader);
}
+1 -1
View File
@@ -17,7 +17,7 @@
var m_UpdateMode = reader.ReadInt32();
}
if (version.IsTuanjie && (version > (2022, 3, 48) || version == (2022, 3, 48) && version.Build >= 7)) //2022.3.48t7(1.4.4) and up
if (version.IsTuanjie && version >= (2022, 3, 48, 7)) //2022.3.48t7(1.4.4) and up
{
var m_UpdateFrequencyMode = reader.ReadInt32();
var m_UpdateFrequency = reader.ReadSingle();
+1 -1
View File
@@ -32,7 +32,7 @@ namespace AssetStudio
}
var m_Layer = reader.ReadInt32();
if (version.IsTuanjie && (version > (2022, 3, 2) || (version == (2022, 3, 2) && version.Build >= 11))) //2022.3.2t11(1.1.3) and up
if (version.IsTuanjie && version >= (2022, 3, 2, 11)) //2022.3.2t11(1.1.3) and up
{
var m_HasEditorInfo = reader.ReadBoolean();
reader.AlignStream();
+1 -1
View File
@@ -805,7 +805,7 @@ namespace AssetStudio
m_StreamData = new StreamingInfo(reader);
}
if (version.IsTuanjie && (version > (2022, 3, 2) || (version == (2022, 3, 2) && version.Build >= 13))) //2022.3.2t13(1.2.0) and up
if (version.IsTuanjie && version >= (2022, 3, 2, 13)) //2022.3.2t13(1.2.0) and up
{
var m_GenerateGeometryBuffer = reader.ReadBoolean();
m_HasVirtualGeometryMesh = reader.ReadBoolean();
+1 -1
View File
@@ -83,7 +83,7 @@ namespace AssetStudio
{
var m_MipsStripped = reader.ReadInt32();
}
if (version.IsTuanjie && (version > (2022, 3, 2) || version.Build >= 8)) //2022.3.2t8(1.1.0) and up
if (version.IsTuanjie && version >= (2022, 3, 2, 8)) //2022.3.2t8(1.1.0) and up
{
var m_WebStreaming = reader.ReadBoolean();
reader.AlignStream();
+127 -1
View File
@@ -210,6 +210,38 @@ namespace AssetStudio
}
#endregion
#region UnityVer, (int, int, int, int)
public static bool operator ==(UnityVersion left, (int, int, int, int) right)
{
return (left?.Major, left?.Minor, left?.Patch, left?.Build) == (right.Item1, right.Item2, right.Item3, right.Item4);
}
public static bool operator !=(UnityVersion left, (int, int, int, int) right)
{
return (left?.Major, left?.Minor, left?.Patch, left?.Build) != (right.Item1, right.Item2, right.Item3, right.Item4);
}
public static bool operator >(UnityVersion left, (int, int, int, int) right)
{
return left?.CompareTo(right) > 0;
}
public static bool operator <(UnityVersion left, (int, int, int, int) right)
{
return left?.CompareTo(right) < 0;
}
public static bool operator >=(UnityVersion left, (int, int, int, int) right)
{
return left == right || left > right;
}
public static bool operator <=(UnityVersion left, (int, int, int, int) right)
{
return left == right || left < right;
}
#endregion
#region int, UnityVer
public static bool operator ==(int left, UnityVersion right)
{
@@ -305,7 +337,39 @@ namespace AssetStudio
return left == right || left < right;
}
#endregion
#region (int, int, int, int), UnityVer
public static bool operator ==((int, int, int, int) left, UnityVersion right)
{
return (left.Item1, left.Item2, left.Item3, left.Item4) == (right?.Major, right?.Minor, right?.Patch, right?.Build);
}
public static bool operator !=((int, int, int, int) left, UnityVersion right)
{
return (left.Item1, left.Item2, left.Item3, left.Item4) != (right?.Major, right?.Minor, right?.Patch, right?.Build);
}
public static bool operator >((int, int, int, int) left, UnityVersion right)
{
return right?.CompareTo(left) < 0;
}
public static bool operator <((int, int, int, int) left, UnityVersion right)
{
return right?.CompareTo(left) > 0;
}
public static bool operator >=((int, int, int, int) left, UnityVersion right)
{
return left == right || left > right;
}
public static bool operator <=((int, int, int, int) left, UnityVersion right)
{
return left == right || left < right;
}
#endregion
private int CompareTo((int, int) other)
{
var result = Major.CompareTo(other.Item1);
@@ -340,6 +404,23 @@ namespace AssetStudio
return 0;
}
private int CompareTo((int, int, int, int) other)
{
var result = CompareTo((other.Item1, other.Item2, other.Item3));
if (result != 0)
{
return result;
}
result = Build.CompareTo(other.Item4);
if (result != 0)
{
return result;
}
return 0;
}
private int CompareTo(UnityVersion other)
{
return CompareTo((other.Major, other.Minor, other.Patch));
@@ -416,6 +497,11 @@ namespace AssetStudio
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, UnityVersion upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, int upperLimit)
{
return ver >= lowerLimit && ver.Major < upperLimit;
@@ -431,6 +517,11 @@ namespace AssetStudio
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, (int, int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, int lowerLimit, int upperLimit)
{
return ver.Major >= lowerLimit && ver.Major < upperLimit;
@@ -446,6 +537,11 @@ namespace AssetStudio
return ver.Major >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, int lowerLimit, (int, int, int, int) upperLimit)
{
return ver.Major >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, int upperLimit)
{
return ver >= lowerLimit && ver.Major < upperLimit;
@@ -456,6 +552,11 @@ namespace AssetStudio
return ver >= lowerLimit && ver.Major < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, int upperLimit)
{
return ver >= lowerLimit && ver.Major < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, (int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
@@ -466,6 +567,11 @@ namespace AssetStudio
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, (int, int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, (int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
@@ -475,5 +581,25 @@ namespace AssetStudio
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, (int, int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, (int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, (int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, (int, int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
}
}