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