You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.6 KiB
C#
124 lines
4.6 KiB
C#
2 months ago
|
// UltEvents // Copyright 2020 Kybernetik //
|
||
|
|
||
|
#if UNITY_EDITOR
|
||
|
|
||
|
using System;
|
||
|
using UnityEditor;
|
||
|
using Object = UnityEngine.Object;
|
||
|
|
||
|
namespace UltEvents.Editor
|
||
|
{
|
||
|
/// <summary>[Editor-Only]
|
||
|
/// Manages the copying and pasting of events and persistent calls.
|
||
|
/// </summary>
|
||
|
public static class Clipboard
|
||
|
{
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
private static UltEventBase _Event;
|
||
|
|
||
|
/// <summary>Indicates whether an event has been copied.</summary>
|
||
|
public static bool HasEvent { get { return _Event != null; } }
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>Stores the details of the specified event.</summary>
|
||
|
public static void CopyEvent(UltEventBase e)
|
||
|
{
|
||
|
var eventType = e.GetType();
|
||
|
|
||
|
if (_Event == null || _Event.GetType() != eventType)
|
||
|
_Event = (UltEventBase)Activator.CreateInstance(eventType);
|
||
|
|
||
|
_Event.CopyFrom(e);
|
||
|
}
|
||
|
|
||
|
/// <summary>Stores the details of the event contained in the specified property.</summary>
|
||
|
public static void CopyEvent(Serialization.PropertyAccessor accessor, Object target)
|
||
|
{
|
||
|
var e = (UltEventBase)accessor.GetValue(target);
|
||
|
CopyEvent(e);
|
||
|
}
|
||
|
|
||
|
/// <summary>Stores the details of the event contained in the specified property.</summary>
|
||
|
public static void CopyEvent(SerializedProperty property)
|
||
|
{
|
||
|
var accessor = property.GetAccessor();
|
||
|
if (accessor == null)
|
||
|
return;
|
||
|
|
||
|
CopyEvent(accessor, property.serializedObject.targetObject);
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>Overwrites the specified event with the previously copied details.</summary>
|
||
|
public static void Paste(UltEventBase e)
|
||
|
{
|
||
|
e.CopyFrom(_Event);
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
private static PersistentCall _Call;
|
||
|
|
||
|
/// <summary>Indicates whether a persistent call has been copied.</summary>
|
||
|
public static bool HasCall { get { return _Call != null; } }
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>Stores the details of the specified call.</summary>
|
||
|
public static void CopyCall(PersistentCall call)
|
||
|
{
|
||
|
if (_Call == null)
|
||
|
_Call = new PersistentCall();
|
||
|
|
||
|
_Call.CopyFrom(call);
|
||
|
}
|
||
|
|
||
|
/// <summary>Stores the details of the call contained in the specified property.</summary>
|
||
|
public static void CopyCall(Serialization.PropertyAccessor accessor, Object target)
|
||
|
{
|
||
|
var call = (PersistentCall)accessor.GetValue(target);
|
||
|
CopyCall(call);
|
||
|
}
|
||
|
|
||
|
/// <summary>Stores the details of the call contained in the specified property.</summary>
|
||
|
public static void CopyCall(SerializedProperty property)
|
||
|
{
|
||
|
var accessor = property.GetAccessor();
|
||
|
if (accessor == null)
|
||
|
return;
|
||
|
|
||
|
CopyCall(accessor, property.serializedObject.targetObject);
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
|
||
|
/// <summary>Overwrites the specified call with the previously copied details.</summary>
|
||
|
public static void PasteCall(PersistentCall call)
|
||
|
{
|
||
|
call.CopyFrom(_Call);
|
||
|
}
|
||
|
|
||
|
/// <summary>Overwrites the call contained in the specified property with the copied details.</summary>
|
||
|
public static void PasteCall(Serialization.PropertyAccessor accessor, Object target)
|
||
|
{
|
||
|
var call = (PersistentCall)accessor.GetValue(target);
|
||
|
PasteCall(call);
|
||
|
}
|
||
|
|
||
|
/// <summary>Overwrites the call contained in the specified property with the copied details.</summary>
|
||
|
public static void PasteCall(SerializedProperty property)
|
||
|
{
|
||
|
property.ModifyValues<PersistentCall>((call) =>
|
||
|
{
|
||
|
PasteCall(call);
|
||
|
}, "Paste PersistentCall");
|
||
|
}
|
||
|
|
||
|
/************************************************************************************************************************/
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|