From ef98eaaeb7ee58c01e347eff22de0542559d00a1 Mon Sep 17 00:00:00 2001 From: SarveshBajaj Date: Sat, 15 Feb 2020 14:10:57 +0530 Subject: [PATCH] fixed execute in main thread issue using awake()[ExecuteAlways] --- .../Scripts/EventHandlers/DragCompleted.cs | 82 +++++++++++-------- .../Scripts/EventHandlers/DragEntered.cs | 57 ++++++++----- .../Scripts/EventHandlers/DragExited.cs | 55 ++++++++----- 3 files changed, 120 insertions(+), 74 deletions(-) diff --git a/Assets/Fungus/Scripts/EventHandlers/DragCompleted.cs b/Assets/Fungus/Scripts/EventHandlers/DragCompleted.cs index 5e2047cc..4307d839 100644 --- a/Assets/Fungus/Scripts/EventHandlers/DragCompleted.cs +++ b/Assets/Fungus/Scripts/EventHandlers/DragCompleted.cs @@ -14,6 +14,7 @@ namespace Fungus "Drag Completed", "The block will execute when the player drags an object and successfully drops it on a target object.")] [AddComponentMenu("")] + [ExecuteAlways] public class DragCompleted : EventHandler, ISerializationCallbackReceiver { public class DragCompletedEvent @@ -55,32 +56,65 @@ namespace Fungus protected EventDispatcher eventDispatcher; + /// + /// Awake is called when the script instance is being loaded. + /// + 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() { - eventDispatcher = FungusManager.Instance.EventDispatcher; + if(Application.IsPlaying(this)){ + eventDispatcher = FungusManager.Instance.EventDispatcher; - eventDispatcher.AddListener(OnDragCompletedEvent); - eventDispatcher.AddListener(OnDragEnteredEvent); - eventDispatcher.AddListener(OnDragExitedEvent); + eventDispatcher.AddListener(OnDragCompletedEvent); + eventDispatcher.AddListener(OnDragEnteredEvent); + eventDispatcher.AddListener(OnDragExitedEvent); - foreach(Draggable2D dragObj in draggableObjects) - { - dragObj.RegisterHandler(this); + foreach(Draggable2D dragObj in draggableObjects) + { + dragObj.RegisterHandler(this); + } } + } protected virtual void OnDisable() { - eventDispatcher.RemoveListener(OnDragCompletedEvent); - eventDispatcher.RemoveListener(OnDragEnteredEvent); - eventDispatcher.RemoveListener(OnDragExitedEvent); - - foreach(Draggable2D dragObj in draggableObjects) + if(Application.IsPlaying(this)) { - dragObj.UnregisterHandler(this); - } + eventDispatcher.RemoveListener(OnDragCompletedEvent); + eventDispatcher.RemoveListener(OnDragEnteredEvent); + eventDispatcher.RemoveListener(OnDragExitedEvent); - eventDispatcher = null; + foreach(Draggable2D dragObj in draggableObjects) + { + dragObj.UnregisterHandler(this); + } + + eventDispatcher = null; + } } void OnDragCompletedEvent(DragCompletedEvent evt) @@ -100,24 +134,6 @@ namespace Fungus 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() diff --git a/Assets/Fungus/Scripts/EventHandlers/DragEntered.cs b/Assets/Fungus/Scripts/EventHandlers/DragEntered.cs index 09217ac8..0ca5a15a 100644 --- a/Assets/Fungus/Scripts/EventHandlers/DragEntered.cs +++ b/Assets/Fungus/Scripts/EventHandlers/DragEntered.cs @@ -15,6 +15,8 @@ namespace Fungus "Drag Entered", "The block will execute when the player is dragging an object which starts touching the target object.")] [AddComponentMenu("")] + + [ExecuteAlways] public class DragEntered : EventHandler, ISerializationCallbackReceiver { public class DragEnteredEvent @@ -45,18 +47,46 @@ namespace Fungus 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() { - eventDispatcher = FungusManager.Instance.EventDispatcher; + if(Application.IsPlaying(this)){ + eventDispatcher = FungusManager.Instance.EventDispatcher; - eventDispatcher.AddListener(OnDragEnteredEvent); + eventDispatcher.AddListener(OnDragEnteredEvent); + } } protected virtual void OnDisable() { - eventDispatcher.RemoveListener(OnDragEnteredEvent); + if(Application.IsPlaying(this)){ + eventDispatcher.RemoveListener(OnDragEnteredEvent); - eventDispatcher = null; + eventDispatcher = null; + } } void OnDragEnteredEvent(DragEnteredEvent evt) @@ -88,24 +118,7 @@ namespace Fungus 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() diff --git a/Assets/Fungus/Scripts/EventHandlers/DragExited.cs b/Assets/Fungus/Scripts/EventHandlers/DragExited.cs index a875c430..cd9092f4 100644 --- a/Assets/Fungus/Scripts/EventHandlers/DragExited.cs +++ b/Assets/Fungus/Scripts/EventHandlers/DragExited.cs @@ -14,6 +14,8 @@ namespace Fungus "Drag Exited", "The block will execute when the player is dragging an object which stops touching the target object.")] [AddComponentMenu("")] + + [ExecuteAlways] public class DragExited : EventHandler, ISerializationCallbackReceiver { public class DragExitedEvent @@ -47,26 +49,11 @@ namespace Fungus protected EventDispatcher eventDispatcher; - protected virtual void OnEnable() - { - eventDispatcher = FungusManager.Instance.EventDispatcher; - - eventDispatcher.AddListener(OnDragEnteredEvent); - } - - protected virtual void OnDisable() - { - eventDispatcher.RemoveListener(OnDragEnteredEvent); - - eventDispatcher = null; - } - - void OnDragEnteredEvent(DragExitedEvent evt) - { - OnDragExited(evt.DraggableObject, evt.TargetCollider); - } - void ISerializationCallbackReceiver.OnAfterDeserialize() + /// + /// Awake is called when the script instance is being loaded. + /// + void Awake() { //add any dragableobject already present to list for backwards compatability if (draggableObject != null) @@ -88,6 +75,36 @@ namespace Fungus targetObject = null; } + protected virtual void OnEnable() + { + if(Application.IsPlaying(this)){ + eventDispatcher = FungusManager.Instance.EventDispatcher; + + eventDispatcher.AddListener(OnDragEnteredEvent); + } + + } + + protected virtual void OnDisable() + { + if(Application.IsPlaying(this)){ + eventDispatcher.RemoveListener(OnDragEnteredEvent); + + eventDispatcher = null; + } + + } + + void OnDragEnteredEvent(DragExitedEvent evt) + { + OnDragExited(evt.DraggableObject, evt.TargetCollider); + } + + void ISerializationCallbackReceiver.OnAfterDeserialize() + { + + } + void ISerializationCallbackReceiver.OnBeforeSerialize() {