| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System; | 
|   | 
| public static class VesselExtension | 
| { | 
|   | 
|     public static System.Random rng = new System.Random(); | 
|   | 
|     public static bool IsNullOrEmpty<T>(this List<T> vessel) | 
|     { | 
|         return vessel == null || vessel.Count == 0; | 
|     } | 
|   | 
|     public static bool IsNullOrEmpty<T>(this T[] vessel) | 
|     { | 
|         return vessel == null || vessel.Length == 0; | 
|     } | 
|   | 
|     public static bool IsNullOrEmpty<T0, T1>(this Dictionary<T0, T1> dictionary) | 
|     { | 
|         return dictionary == null || dictionary.Count == 0; | 
|     } | 
|   | 
|     public static T GetFirst<T>(this List<T> list) | 
|     { | 
|         if (list == null) | 
|         { | 
|             throw new ArgumentNullException("List is null."); | 
|         } | 
|   | 
|         if (list.Count == 0) | 
|         { | 
|             Debug.Log("List count can't be zero."); | 
|             return default(T); | 
|         } | 
|   | 
|         return list[0]; | 
|     } | 
|   | 
|     public static T GetLast<T>(this List<T> list) | 
|     { | 
|         if (list == null) | 
|         { | 
|             throw new ArgumentNullException("List is null."); | 
|         } | 
|   | 
|         if (list.Count == 0) | 
|         { | 
|             Debug.Log("List count can't be zero."); | 
|             return default(T); | 
|         } | 
|   | 
|         return list[list.Count - 1]; | 
|     } | 
|   | 
|     public static T GetFirst<T>(this T[] list) | 
|     { | 
|         if (list == null) | 
|         { | 
|             throw new ArgumentNullException("Array is null."); | 
|         } | 
|   | 
|         if (list.Length == 0) | 
|         { | 
|             Debug.Log("Array count can't be zero."); | 
|             return default(T); | 
|         } | 
|   | 
|         return list[0]; | 
|     } | 
|   | 
|     public static T GetLast<T>(this T[] list) | 
|     { | 
|         if (list == null) | 
|         { | 
|             throw new ArgumentNullException("Array is null."); | 
|         } | 
|   | 
|         if (list.Length == 0) | 
|         { | 
|             Debug.Log("Array count can't be zero."); | 
|             return default(T); | 
|         } | 
|   | 
|         return list[list.Length - 1]; | 
|     } | 
|   | 
|     public static T GetRandom<T>(this List<T> list) | 
|     { | 
|         if (list == null) | 
|         { | 
|             throw new ArgumentNullException("List is null."); | 
|         } | 
|   | 
|         if (list.Count == 0) | 
|         { | 
|             Debug.Log("List count can't be zero."); | 
|             return default(T); | 
|         } | 
|   | 
|         var randomIndex = UnityEngine.Random.Range(0, list.Count); | 
|         return list[randomIndex]; | 
|     } | 
|   | 
|     public static List<T> Shuffle<T>(this IList<T> list) | 
|     { | 
|         var shuffled = new List<T>(list); // 创建副本 | 
|         for (int i = shuffled.Count - 1; i > 0; i--) | 
|         { | 
|             int j = rng.Next(i + 1); | 
|             (shuffled[i], shuffled[j]) = (shuffled[j], shuffled[i]); | 
|         } | 
|         return shuffled; | 
|     } | 
| } |