using System.Collections; using System.Collections.Generic; using UnityEngine; using Cysharp.Threading.Tasks; using System; using System.Threading; using UnityEngine.Events; using UnityEngine.UIElements; #if UNITY_EDITOR using UnityEditor; using UnityEditor.UIElements; #endif namespace BITKit { [System.Serializable] public struct InvokeMonoAction : IAction { public MonoBehaviour monoBehaviour; public void Execute() { (monoBehaviour as IAction).Execute(); } } [System.Serializable] public struct InvokeUnityEvent : IAction { public UnityEvent unityEvent; public void Execute() { unityEvent.Invoke(); } } [System.Serializable] public struct ExitApplation : IAction { public void Execute() { BITAppForUnity.Exit(); } } [System.Serializable] public struct DebugText : IAction { [SerializeReference, SubclassSelector] public References text; public void Execute() { Debug.Log(text); } } [System.Serializable] public class MonoActionProxy : IAction { [SerializeField]private MonoBehaviour monoBehaviour; public void Execute() { ((IAction)monoBehaviour).Execute(); } } public class MonoAction : MonoBehaviour, IAction { [SerializeReference, SubclassSelector] public List actions; CancellationToken cancellationToken; void Start() { cancellationToken = gameObject.GetCancellationTokenOnDestroy(); } public async void Execute() { try { await UniTask.SwitchToMainThread(cancellationToken); foreach (var x in actions) { x.Execute(); } } catch (OperationCanceledException) { } catch (System.Exception) { throw; } } } #if UNITY_EDITOR [CustomEditor(typeof(MonoAction))] public class MonoActinoInspector : BITInspector { public override VisualElement CreateInspectorGUI() { CreateSubTitle("Settings"); var actions = root.Create(); var button = root.Create