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 { [SerializeField] private string mark; [SerializeReference, SubclassSelector] public List actions; public async void Execute() { BITAppForUnity.ThrowIfNotPlaying(); try { await UniTask.SwitchToMainThread(destroyCancellationToken); foreach (var x in actions) { x.Execute(); } } catch (OperationCanceledException) { } } } #if UNITY_EDITOR [CustomEditor(typeof(MonoAction))] public class MonoActinoInspector : BITInspector { public override VisualElement CreateInspectorGUI() { CreateSubTitle("Settings"); var actions = root.Create(); var button = root.Create