using UnityEngine; using System.Collections; using DG.Tweening;
public class HoverPreview: MonoBehaviour { ? ? // PUBLIC FIELDS ? ? public GameObject TurnThisOffWhenPreviewing; ?// if this is null, will not turn off anything? ? ? public Vector3 TargetPosition; ? ? public float TargetScale; ? ? public GameObject previewGameObject; ? ? public bool ActivateInAwake = false;
? ? // PRIVATE FIELDS ? ? private static HoverPreview currentlyViewing = null;
? ? // PROPERTIES WITH UNDERLYING PRIVATE FIELDS ? ? private static bool _PreviewsAllowed = true; ? ? public static bool PreviewsAllowed ? ? { ? ? ? ? get { return _PreviewsAllowed;}
? ? ? ? set? ? ? ? ? {? ? ? ? ? ? ? //Debug.Log("Hover Previews Allowed is now: " + value); ? ? ? ? ? ? _PreviewsAllowed= value; ? ? ? ? ? ? if (!_PreviewsAllowed) ? ? ? ? ? ? ? ? StopAllPreviews(); ? ? ? ? } ? ? }
? ? private bool _thisPreviewEnabled = false; ? ? public bool ThisPreviewEnabled ? ? { ? ? ? ? get { return _thisPreviewEnabled;}
? ? ? ? set? ? ? ? ? {? ? ? ? ? ? ? _thisPreviewEnabled = value; ? ? ? ? ? ? if (!_thisPreviewEnabled) ? ? ? ? ? ? ? ? StopThisPreview(); ? ? ? ? } ? ? }
? ? public bool OverCollider { get; set;} ? ? ? // MONOBEHVIOUR METHODS ? ? void Awake() ? ? { ? ? ? ? ThisPreviewEnabled = ActivateInAwake; ? ? } ? ? ? ? ? ?? ? ? void OnMouseEnter() ? ? { ? ? ? ? OverCollider = true; ? ? ? ? if (PreviewsAllowed && ThisPreviewEnabled) ? ? ? ? ? ? PreviewThisObject(); ? ? } ? ? ? ?? ? ? void OnMouseExit() ? ? { ? ? ? ? OverCollider = false;
? ? ? ? if (!PreviewingSomeCard()) ? ? ? ? ? ? StopAllPreviews(); ? ? }
? ? // OTHER METHODS ? ? void PreviewThisObject() ? ? { ? ? ? ? // 1) clone this card? ? ? ? ? // first disable the previous preview if there is one already ? ? ? ? StopAllPreviews(); ? ? ? ? // 2) save this HoverPreview as curent ? ? ? ? currentlyViewing = this; ? ? ? ? // 3) enable Preview game object ? ? ? ? previewGameObject.SetActive(true); ? ? ? ? // 4) disable if we have what to disable ? ? ? ? if (TurnThisOffWhenPreviewing!=null) ? ? ? ? ? ? TurnThisOffWhenPreviewing.SetActive(false);? ? ? ? ? // 5) tween to target position ? ? ? ? previewGameObject.transform.localPosition = Vector3.zero; ? ? ? ? previewGameObject.transform.localScale = Vector3.one;
? ? ? ? previewGameObject.transform.DOLocalMove(TargetPosition, 1f).SetEase(Ease.OutQuint); ? ? ? ? previewGameObject.transform.DOScale(TargetScale, 1f).SetEase(Ease.OutQuint); ? ? }
? ? void StopThisPreview() ? ? { ? ? ? ? previewGameObject.SetActive(false); ? ? ? ? previewGameObject.transform.localScale = Vector3.one; ? ? ? ? previewGameObject.transform.localPosition = Vector3.zero; ? ? ? ? if (TurnThisOffWhenPreviewing!=null) ? ? ? ? ? ? TurnThisOffWhenPreviewing.SetActive(true);? ? ? }
? ? // STATIC METHODS ? ? private static void StopAllPreviews() ? ? { ? ? ? ? if (currentlyViewing != null) ? ? ? ? { ? ? ? ? ? ? currentlyViewing.previewGameObject.SetActive(false); ? ? ? ? ? ? currentlyViewing.previewGameObject.transform.localScale = Vector3.one; ? ? ? ? ? ? currentlyViewing.previewGameObject.transform.localPosition = Vector3.zero; ? ? ? ? ? ? if (currentlyViewing.TurnThisOffWhenPreviewing!=null) ? ? ? ? ? ? ? ? currentlyViewing.TurnThisOffWhenPreviewing.SetActive(true);? ? ? ? ? } ? ? ? ? ? ? ? }
? ? private static bool PreviewingSomeCard() ? ? { ? ? ? ? if (!PreviewsAllowed) ? ? ? ? ? ? return false;
? ? ? ? HoverPreview[] allHoverBlowups = GameObject.FindObjectsOfType<HoverPreview>();
? ? ? ? foreach (HoverPreview hb in allHoverBlowups) ? ? ? ? { ? ? ? ? ? ? if (hb.OverCollider && hb.ThisPreviewEnabled) ? ? ? ? ? ? ? ? return true; ? ? ? ? }
? ? ? ? return false; ? ? }
? ? }
?
|