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);
 | 
						|
    }
 | 
						|
} |