75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Globalization;
 | |
| using System.Linq;
 | |
| using AmazonInternal.ThirdParty;
 | |
| using UnityEngine;
 | |
| public class AmazonUtils {
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Compares two versions to see which is greater.
 | |
|     /// </summary>
 | |
|     /// <param name="a">Version to compare against second param</param>
 | |
|     /// <param name="b">Version to compare against first param</param>
 | |
|     /// <returns>-1 if the first version is smaller, 1 if the first version is greater, 0 if they are equal</returns>
 | |
|     public static int CompareVersions (string a, string b) {
 | |
|         var versionA = VersionStringToInts (a);
 | |
|         var versionB = VersionStringToInts (b);
 | |
|         for (var i = 0; i < Mathf.Max (versionA.Length, versionB.Length); i++) {
 | |
|             if (VersionPiece (versionA, i) < VersionPiece (versionB, i))
 | |
|                 return -1;
 | |
|             if (VersionPiece (versionA, i) > VersionPiece (versionB, i))
 | |
|                 return 1;
 | |
|         }
 | |
| 
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     private static int VersionPiece (IList<int> versionInts, int pieceIndex) {
 | |
|         return pieceIndex < versionInts.Count ? versionInts[pieceIndex] : 0;
 | |
|     }
 | |
| 
 | |
|     private static int[] VersionStringToInts (string version) {
 | |
|         if( version == null )
 | |
|         return new int[] { 0,0,0 };
 | |
|         int piece;
 | |
|         string[] split = version.Split ('.');
 | |
|         return split.Select (v => int.TryParse (v, NumberStyles.Any, CultureInfo.InvariantCulture, out piece) ? piece : 0).ToArray ();
 | |
|     }
 | |
| 
 | |
|     public static Uri UrlFromString (string url) {
 | |
|         if (string.IsNullOrEmpty (url)) return null;
 | |
|         try {
 | |
|             return new Uri (url);
 | |
|         } catch {
 | |
|             Debug.LogError ("Invalid URL: " + url);
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static string EncodeArgs (params string[] args) {
 | |
|         return Json.Serialize (args);
 | |
|     }
 | |
| 
 | |
|     // Will return a non-null array of strings with at least 'min' non-null string values at the front.
 | |
|     public static string[] DecodeArgs (string argsJson, int min) {
 | |
|         var err = false;
 | |
|         var args = Json.Deserialize (argsJson) as List<object>;
 | |
|         if (args == null) {
 | |
|             Debug.LogError ("Invalid JSON data: " + argsJson);
 | |
|             args = new List<object> ();
 | |
|             err = true;
 | |
|         }
 | |
|         if (args.Count < min) {
 | |
|             if (!err) // Don't double up the error messages for invalid JSON
 | |
|                 Debug.LogError ("Missing one or more values: " + argsJson + " (expected " + min + ")");
 | |
|             while (args.Count < min)
 | |
|                 args.Add ("");
 | |
|         }
 | |
|         return args.Select (v => v.ToString ()).ToArray ();
 | |
|     }
 | |
| 
 | |
|     public static string InvariantCultureToString (object obj) {
 | |
|         return string.Format (CultureInfo.InvariantCulture, "{0}", obj);
 | |
|     }
 | |
| } |