using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace Convention.WindowsUI
{
public interface IBehaviourOperator { }
///
/// 禁止在Awake时刻使用BehaviourContext
///
public class BehaviourContextManager : MonoBehaviour, ICanvasRaycastFilter
{
public static UnityEvent InitializeContextSingleEvent(UnityEvent Event, params UnityAction[] calls)
{
Event ??= new();
foreach (var call in calls)
Event.RemoveListener(call);
foreach (var call in calls)
Event.AddListener(call);
return Event;
}
public static UnityEvent InitializeContextSingleEvent(UnityEvent Event, params UnityAction[] calls)
{
Event ??= new();
foreach (var call in calls)
Event.RemoveListener(call);
foreach (var call in calls)
Event.AddListener(call);
return Event;
}
public static UnityEvent InitializeContextSingleEvent(UnityEvent Event, params UnityAction[] calls)
{
Event ??= new();
foreach (var call in calls)
Event.RemoveListener(call);
foreach (var call in calls)
Event.AddListener(call);
return Event;
}
public static void InitializeContextSingleEvent(ref UnityEvent Event, params UnityAction[] calls)
{
Event ??= new();
foreach (var call in calls)
Event.RemoveListener(call);
foreach (var call in calls)
Event.AddListener(call);
}
public static void InitializeContextSingleEvent(ref UnityEvent Event, params UnityAction[] calls)
{
Event ??= new();
foreach (var call in calls)
Event.RemoveListener(call);
foreach (var call in calls)
Event.AddListener(call);
}
public static void InitializeContextSingleEvent(ref UnityEvent Event, params UnityAction[] calls)
{
Event ??= new();
foreach (var call in calls)
Event.RemoveListener(call);
foreach (var call in calls)
Event.AddListener(call);
}
[Setting]
public UnityEvent OnBeginDragEvent
{
get
{
if (!TryGetComponent(out var cat)) return null;
return cat.OnBeginDragEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnBeginDragEvent = value;
}
}
[Setting]
public UnityEvent OnDragEvent
{
get
{
if (!this.TryGetComponent(out var cat)) return null;
return cat.OnDragEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnDragEvent = value;
}
}
[Setting]
public UnityEvent OnDropEvent
{
get
{
if (!this.TryGetComponent(out var cat)) return null;
return cat.OnDropEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnDropEvent = value;
}
}
[Setting]
public UnityEvent OnEndDragEvent
{
get
{
if (!this.TryGetComponent(out var cat)) return null;
return cat.OnEndDragEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnEndDragEvent = value;
}
}
[Setting]
public UnityEvent OnInitializePotentialDragEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnInitializePotentialDragEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnInitializePotentialDragEvent = value;
}
}
[Setting]
public UnityEvent OnPointerClickEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnPointerClickEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnPointerClickEvent = value;
}
}
[Setting]
public UnityEvent OnPointerDownEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnPointerDownEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnPointerDownEvent = value;
}
}
[Setting]
public UnityEvent OnPointerEnterEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnPointerEnterEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnPointerEnterEvent = value;
}
}
[Setting]
public UnityEvent OnPointerExitEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnPointerExitEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnPointerExitEvent = value;
}
}
[Setting]
public UnityEvent OnPointerUpEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnPointerUpEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnPointerUpEvent = value;
}
}
[Setting]
public UnityEvent OnScrollEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnScrollEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnScrollEvent = value;
}
}
[Setting]
public UnityEvent OnCancelEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnCancelEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnCancelEvent = value;
}
}
[Setting]
public UnityEvent OnDeselectEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnDeselectEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnDeselectEvent = value;
}
}
[Setting]
public UnityEvent OnSelectEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnSelectEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnSelectEvent = value;
}
}
[Setting]
public UnityEvent OnSubmitEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnSubmitEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnSubmitEvent = value;
}
}
[Setting]
public UnityEvent OnUpdateSelectedEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnUpdateSelectedEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnUpdateSelectedEvent = value;
}
}
[Setting]
public UnityEvent OnMoveEvent
{
get
{
if (!this.TryGetComponent(out var cat))
return null;
return cat.OnMoveEvent;
}
set
{
var cat = this.GetOrAddComponent();
cat.OnMoveEvent = value;
}
}
public delegate bool HowSetupRaycastLocationValid(Vector2 sp, Camera eventCamera);
[Ignore]public HowSetupRaycastLocationValid locationValid;
public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
{
return locationValid?.Invoke(sp, eventCamera) ?? true;
}
private void Awake()
{
foreach (var item in GetComponents())
{
Destroy(item as MonoBehaviour);
}
}
private void OnDestroy()
{
foreach (var item in GetComponents())
{
Destroy(item as MonoBehaviour);
}
}
}
}