Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.EventSystems;
- using UnityEngine.InputSystem;
- using Dogfight;
- public class CardInteraction : MonoBehaviour, IDragHandler, IPointerDownHandler, IPointerEnterHandler,IPointerExitHandler
- {
- private RectTransform rectTransform;
- private Canvas canvas;
- private Vector2 originalLocalPointerPosition;
- private Vector3 originalPanelLocalPosition;
- private Vector3 originalScale;
- private Vector3 originalPosition;
- private Quaternion originalRotation;
- private int currentState = 0;
- [Range(0.1f, 2f)] public float movementSensitivity = 1.0f;
- [SerializeField] private float selectScale = 1.1f;
- [SerializeField] private Vector2 cardPlay;
- [SerializeField] private Vector3 playPosition;
- [SerializeField] private GameObject highlight;
- [SerializeField] private GameObject playArrow;
- void Awake()
- {
- rectTransform = GetComponent<RectTransform>();
- canvas = GetComponentInParent<Canvas>();
- originalScale = rectTransform.localScale;
- originalPosition = rectTransform.localPosition;
- originalRotation = rectTransform.localRotation;
- }
- void Update()
- {
- switch (currentState)
- {
- case 1:
- HandleHoverState();
- break;
- case 2:
- HandleDragState();
- if (!Mouse.current.leftButton.isPressed) ResetState();
- break;
- case 3:
- HandlePlayState();
- if (!Mouse.current.leftButton.isPressed) ResetState();
- break;
- }
- }
- private void ResetState()
- {
- currentState = 0;
- rectTransform.localPosition = originalPosition;//Vector3.Lerp(rectTransform.localPosition, originalPosition, 1f);
- rectTransform.localRotation = originalRotation;
- rectTransform.localScale = originalScale;
- highlight.SetActive(false);
- playArrow.SetActive(false);
- }
- public void OnPointerEnter(PointerEventData eventData)
- {
- if (currentState == 0)
- {
- originalPosition = rectTransform.localPosition;
- originalRotation = rectTransform.localRotation;
- originalScale = rectTransform.localScale;
- currentState = 1;
- }
- }
- public void OnPointerExit(PointerEventData eventData)
- {
- if (currentState == 1)
- {
- ResetState();
- // MORE TO COME
- }
- }
- public void OnPointerDown(PointerEventData eventData)
- {
- if (currentState == 1)
- {
- currentState = 2;
- RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out originalLocalPointerPosition);
- originalPanelLocalPosition = rectTransform.localPosition;
- // MORE TO COME
- }
- }
- public void OnDrag(PointerEventData eventData)
- {
- if (currentState == 2)
- {
- Vector2 localPointerPosition;
- if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out localPointerPosition))
- {
- rectTransform.localPosition = localPointerPosition;
- if (localPointerPosition.y > cardPlay.y)
- {
- currentState = 3;
- playArrow.SetActive(true);
- rectTransform.localPosition = playPosition;
- }
- }
- }
- }
- public void HandleHoverState()
- {
- highlight.SetActive(true);
- rectTransform.localScale = originalScale * selectScale;
- rectTransform.localPosition = new Vector3 (rectTransform.localPosition.x, rectTransform.localPosition.y+100, rectTransform.localPosition.z);
- }
- private void HandleDragState()
- {
- rectTransform.localRotation = Quaternion.identity;
- }
- private void HandlePlayState()
- {
- rectTransform.localPosition = playPosition;
- rectTransform.localRotation = Quaternion.identity;
- if (Mouse.current.position.ReadValue().y < cardPlay.y)
- {
- currentState = 2;
- playArrow.SetActive(false);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment