// This code is part of the Fungus library (https://github.com/snozbot/fungus) // It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) using System.Collections.Generic; using UnityEngine; namespace Fungus { /// /// The block will execute when the player starts dragging an object. /// [EventHandlerInfo("Sprite", "Drag Started", "The block will execute when the player starts dragging an object.")] [AddComponentMenu("")] public class DragStarted : EventHandler, ISerializationCallbackReceiver { public class DragStartedEvent { public Draggable2D DraggableObject; public DragStartedEvent(Draggable2D draggableObject) { DraggableObject = draggableObject; } } [VariableProperty(typeof(GameObjectVariable))] [SerializeField] protected GameObjectVariable draggableRef; [SerializeField] protected List draggableObjects; [HideInInspector] [SerializeField] protected Draggable2D draggableObject; protected EventDispatcher eventDispatcher; protected virtual void OnEnable() { eventDispatcher = FungusManager.Instance.EventDispatcher; eventDispatcher.AddListener(OnDragStartedEvent); } protected virtual void OnDisable() { eventDispatcher.RemoveListener(OnDragStartedEvent); eventDispatcher = null; } private void OnDragStartedEvent(DragStartedEvent evt) { OnDragStarted(evt.DraggableObject); } #region Compatibility void ISerializationCallbackReceiver.OnAfterDeserialize() { //add any dragableobject already present to list for backwards compatability if (draggableObject != null) { if (!draggableObjects.Contains(draggableObject)) { draggableObjects.Add(draggableObject); } draggableObject = null; } } void ISerializationCallbackReceiver.OnBeforeSerialize() { } #endregion Compatibility #region Public members /// /// Called by the Draggable2D object when the drag starts. /// public virtual void OnDragStarted(Draggable2D draggableObject) { if (draggableObjects.Contains(draggableObject)) { if (draggableRef != null) { draggableRef.Value = draggableObject.gameObject; } ExecuteBlock(); } } public override string GetSummary() { string summary = "Draggable: "; if (this.draggableObjects != null && this.draggableObjects.Count != 0) { for (int i = 0; i < this.draggableObjects.Count; i++) { if (draggableObjects[i] != null) { summary += draggableObjects[i].name + ","; } } } if (summary.Length == 0) { return "None"; } return summary; } #endregion Public members } }