Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using UnityEditor;
- using UnityEngine;
- public class CachedArray<T> : IEnumerable<T> where T : UnityEngine.Object
- {
- public static T[] GetAll(string query,
- params string[] locations) =>
- AssetDatabase.FindAssets(query, locations)
- .Select(AssetDatabase.GUIDToAssetPath)
- .Select(AssetDatabase.LoadAssetAtPath<T>)
- .Where(x => x != null)
- .ToArray();
- public static CachedArray<T> From(string query, params string[] locations) =>
- new CachedArray<T>(() => GetAll(query, locations));
- public static CachedArray<T> From(Func<T[]> getter) => new CachedArray<T>(getter);
- public T[] All => _items;
- public bool HasItems { get; private set; }
- public CachedArray(Func<T[]> getter) => _getter = getter;
- void LoadItems() => _items = _getter.Invoke();
- public T[] GetItems()
- {
- if (HasItems) return _items;
- LoadItems();
- return _items;
- }
- public T this[int index]
- {
- get => GetItems()[index];
- set => GetItems()[index] = value;
- }
- public static implicit operator T[](CachedArray<T> cached) => cached.GetItems();
- T[] _items;
- readonly Func<T[]> _getter;
- public IEnumerator<T> GetEnumerator() => (IEnumerator<T>) _items.GetEnumerator();
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement