BITKit/Packages/Runtime~/Unity/Common/Scripts/Mono/MonoAction.cs

109 lines
2.6 KiB
C#

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<IAction> 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<MonoAction>
{
public override VisualElement CreateInspectorGUI()
{
CreateSubTitle("Settings");
var actions = root.Create<PropertyField>();
var button = root.Create<Button>();
actions.bindingPath = nameof(MonoAction.actions);
button.text = "Excute";
button.clicked += agent.Execute;
return root;
}
}
#endif
}