Browse Source

fixed execute in main thread issue using awake()[ExecuteAlways]

master
SarveshBajaj 5 years ago
parent
commit
ef98eaaeb7
  1. 82
      Assets/Fungus/Scripts/EventHandlers/DragCompleted.cs
  2. 57
      Assets/Fungus/Scripts/EventHandlers/DragEntered.cs
  3. 55
      Assets/Fungus/Scripts/EventHandlers/DragExited.cs

82
Assets/Fungus/Scripts/EventHandlers/DragCompleted.cs

@ -14,6 +14,7 @@ namespace Fungus
"Drag Completed", "Drag Completed",
"The block will execute when the player drags an object and successfully drops it on a target object.")] "The block will execute when the player drags an object and successfully drops it on a target object.")]
[AddComponentMenu("")] [AddComponentMenu("")]
[ExecuteAlways]
public class DragCompleted : EventHandler, ISerializationCallbackReceiver public class DragCompleted : EventHandler, ISerializationCallbackReceiver
{ {
public class DragCompletedEvent public class DragCompletedEvent
@ -55,32 +56,65 @@ namespace Fungus
protected EventDispatcher eventDispatcher; protected EventDispatcher eventDispatcher;
/// <summary>
/// Awake is called when the script instance is being loaded.
/// </summary>
void Awake()
{
//add any dragableobject already present to list for backwards compatability
if (draggableObject != null)
{
if (!draggableObjects.Contains(draggableObject))
{
draggableObjects.Add(draggableObject);
}
}
if (targetObject != null)
{
if (!targetObjects.Contains(targetObject))
{
targetObjects.Add(targetObject);
}
}
draggableObject = null;
targetObject = null;
}
protected virtual void OnEnable() protected virtual void OnEnable()
{ {
eventDispatcher = FungusManager.Instance.EventDispatcher; if(Application.IsPlaying(this)){
eventDispatcher = FungusManager.Instance.EventDispatcher;
eventDispatcher.AddListener<DragCompletedEvent>(OnDragCompletedEvent); eventDispatcher.AddListener<DragCompletedEvent>(OnDragCompletedEvent);
eventDispatcher.AddListener<DragEntered.DragEnteredEvent>(OnDragEnteredEvent); eventDispatcher.AddListener<DragEntered.DragEnteredEvent>(OnDragEnteredEvent);
eventDispatcher.AddListener<DragExited.DragExitedEvent>(OnDragExitedEvent); eventDispatcher.AddListener<DragExited.DragExitedEvent>(OnDragExitedEvent);
foreach(Draggable2D dragObj in draggableObjects) foreach(Draggable2D dragObj in draggableObjects)
{ {
dragObj.RegisterHandler(this); dragObj.RegisterHandler(this);
}
} }
} }
protected virtual void OnDisable() protected virtual void OnDisable()
{ {
eventDispatcher.RemoveListener<DragCompletedEvent>(OnDragCompletedEvent); if(Application.IsPlaying(this))
eventDispatcher.RemoveListener<DragEntered.DragEnteredEvent>(OnDragEnteredEvent);
eventDispatcher.RemoveListener<DragExited.DragExitedEvent>(OnDragExitedEvent);
foreach(Draggable2D dragObj in draggableObjects)
{ {
dragObj.UnregisterHandler(this); eventDispatcher.RemoveListener<DragCompletedEvent>(OnDragCompletedEvent);
} eventDispatcher.RemoveListener<DragEntered.DragEnteredEvent>(OnDragEnteredEvent);
eventDispatcher.RemoveListener<DragExited.DragExitedEvent>(OnDragExitedEvent);
eventDispatcher = null; foreach(Draggable2D dragObj in draggableObjects)
{
dragObj.UnregisterHandler(this);
}
eventDispatcher = null;
}
} }
void OnDragCompletedEvent(DragCompletedEvent evt) void OnDragCompletedEvent(DragCompletedEvent evt)
@ -100,24 +134,6 @@ namespace Fungus
void ISerializationCallbackReceiver.OnAfterDeserialize() void ISerializationCallbackReceiver.OnAfterDeserialize()
{ {
//add any dragableobject already present to list for backwards compatability
if (draggableObject != null)
{
if (!draggableObjects.Contains(draggableObject))
{
draggableObjects.Add(draggableObject);
}
}
if (targetObject != null)
{
if (!targetObjects.Contains(targetObject))
{
targetObjects.Add(targetObject);
}
}
draggableObject = null;
targetObject = null;
} }
void ISerializationCallbackReceiver.OnBeforeSerialize() void ISerializationCallbackReceiver.OnBeforeSerialize()

57
Assets/Fungus/Scripts/EventHandlers/DragEntered.cs

@ -15,6 +15,8 @@ namespace Fungus
"Drag Entered", "Drag Entered",
"The block will execute when the player is dragging an object which starts touching the target object.")] "The block will execute when the player is dragging an object which starts touching the target object.")]
[AddComponentMenu("")] [AddComponentMenu("")]
[ExecuteAlways]
public class DragEntered : EventHandler, ISerializationCallbackReceiver public class DragEntered : EventHandler, ISerializationCallbackReceiver
{ {
public class DragEnteredEvent public class DragEnteredEvent
@ -45,18 +47,46 @@ namespace Fungus
protected EventDispatcher eventDispatcher; protected EventDispatcher eventDispatcher;
void Awake()
{
//add any dragableobject already present to list for backwards compatability
if (draggableObject != null)
{
if (!draggableObjects.Contains(draggableObject))
{
draggableObjects.Add(draggableObject);
}
}
if (targetObject != null)
{
if (!targetObjects.Contains(targetObject))
{
targetObjects.Add(targetObject);
}
}
draggableObject = null;
targetObject = null;
}
protected virtual void OnEnable() protected virtual void OnEnable()
{ {
eventDispatcher = FungusManager.Instance.EventDispatcher; if(Application.IsPlaying(this)){
eventDispatcher = FungusManager.Instance.EventDispatcher;
eventDispatcher.AddListener<DragEnteredEvent>(OnDragEnteredEvent); eventDispatcher.AddListener<DragEnteredEvent>(OnDragEnteredEvent);
}
} }
protected virtual void OnDisable() protected virtual void OnDisable()
{ {
eventDispatcher.RemoveListener<DragEnteredEvent>(OnDragEnteredEvent); if(Application.IsPlaying(this)){
eventDispatcher.RemoveListener<DragEnteredEvent>(OnDragEnteredEvent);
eventDispatcher = null; eventDispatcher = null;
}
} }
void OnDragEnteredEvent(DragEnteredEvent evt) void OnDragEnteredEvent(DragEnteredEvent evt)
@ -88,24 +118,7 @@ namespace Fungus
void ISerializationCallbackReceiver.OnAfterDeserialize() void ISerializationCallbackReceiver.OnAfterDeserialize()
{ {
//add any dragableobject already present to list for backwards compatability
if (draggableObject != null)
{
if (!draggableObjects.Contains(draggableObject))
{
draggableObjects.Add(draggableObject);
}
}
if (targetObject != null)
{
if (!targetObjects.Contains(targetObject))
{
targetObjects.Add(targetObject);
}
}
draggableObject = null;
targetObject = null;
} }
void ISerializationCallbackReceiver.OnBeforeSerialize() void ISerializationCallbackReceiver.OnBeforeSerialize()

55
Assets/Fungus/Scripts/EventHandlers/DragExited.cs

@ -14,6 +14,8 @@ namespace Fungus
"Drag Exited", "Drag Exited",
"The block will execute when the player is dragging an object which stops touching the target object.")] "The block will execute when the player is dragging an object which stops touching the target object.")]
[AddComponentMenu("")] [AddComponentMenu("")]
[ExecuteAlways]
public class DragExited : EventHandler, ISerializationCallbackReceiver public class DragExited : EventHandler, ISerializationCallbackReceiver
{ {
public class DragExitedEvent public class DragExitedEvent
@ -47,26 +49,11 @@ namespace Fungus
protected EventDispatcher eventDispatcher; protected EventDispatcher eventDispatcher;
protected virtual void OnEnable()
{
eventDispatcher = FungusManager.Instance.EventDispatcher;
eventDispatcher.AddListener<DragExitedEvent>(OnDragEnteredEvent);
}
protected virtual void OnDisable()
{
eventDispatcher.RemoveListener<DragExitedEvent>(OnDragEnteredEvent);
eventDispatcher = null;
}
void OnDragEnteredEvent(DragExitedEvent evt)
{
OnDragExited(evt.DraggableObject, evt.TargetCollider);
}
void ISerializationCallbackReceiver.OnAfterDeserialize() /// <summary>
/// Awake is called when the script instance is being loaded.
/// </summary>
void Awake()
{ {
//add any dragableobject already present to list for backwards compatability //add any dragableobject already present to list for backwards compatability
if (draggableObject != null) if (draggableObject != null)
@ -88,6 +75,36 @@ namespace Fungus
targetObject = null; targetObject = null;
} }
protected virtual void OnEnable()
{
if(Application.IsPlaying(this)){
eventDispatcher = FungusManager.Instance.EventDispatcher;
eventDispatcher.AddListener<DragExitedEvent>(OnDragEnteredEvent);
}
}
protected virtual void OnDisable()
{
if(Application.IsPlaying(this)){
eventDispatcher.RemoveListener<DragExitedEvent>(OnDragEnteredEvent);
eventDispatcher = null;
}
}
void OnDragEnteredEvent(DragExitedEvent evt)
{
OnDragExited(evt.DraggableObject, evt.TargetCollider);
}
void ISerializationCallbackReceiver.OnAfterDeserialize()
{
}
void ISerializationCallbackReceiver.OnBeforeSerialize() void ISerializationCallbackReceiver.OnBeforeSerialize()
{ {

Loading…
Cancel
Save