using Cysharp.Threading.Tasks; using PMaker.DependencyInjection; using Sirenix.OdinInspector; using System.Collections.Generic; using System.Linq; using System.Threading; using UnityEngine; namespace PMaker.Set { public class ObjectSet : SingletonMonobehaviour { public List objects; [ReadOnly] public HashSet> subObjectSetMapper; [ReadOnly] public Dictionary nameMapper; public GameObject this[string name] { get { if (nameMapper.TryGetValue(name, out var newName)) { } else { newName = name; } var go = objects.FirstOrDefault(o => o.name == newName); if (go == default) { foreach (var item in subObjectSetMapper) { if (item.TryGetValue(newName, out go) == true) { break; } } } return go; } } protected override void Awake() { base.Awake(); subObjectSetMapper = new HashSet>(); nameMapper = new Dictionary(); } } public static class BaseBehaviourExtension { public static async UniTask WaitHighlightClick(this BaseBehaviour baseBehaviour, string name, CancellationToken cancellationToken) { if (IoC.TryGetSingleton(out var set)) { var go = set[name]; if (go == true) { await go.WaitClickHighlightAsync(cancellationToken); return; } } await UniTask.Yield(cancellationToken); } } }