From 0c4975837805b4482822e289868d506d41d529a6 Mon Sep 17 00:00:00 2001 From: Mert Cayir Date: Tue, 4 Jun 2024 07:22:38 -0700 Subject: [PATCH] play area canvas created its ready for scripts example playArea implemented --- Assets/Scripts/Dragger.cs | 48 ++++++++++++++++++++++++--------- Assets/Scripts/PlayArea.cs | 34 +++++++++++++++++++++++ Assets/Scripts/PlayArea.cs.meta | 11 ++++++++ 3 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 Assets/Scripts/PlayArea.cs create mode 100644 Assets/Scripts/PlayArea.cs.meta diff --git a/Assets/Scripts/Dragger.cs b/Assets/Scripts/Dragger.cs index 316bf25..ae250d9 100644 --- a/Assets/Scripts/Dragger.cs +++ b/Assets/Scripts/Dragger.cs @@ -1,29 +1,51 @@ -using System.Collections; -using System.Collections.Generic; using UnityEngine; +using UnityEngine.EventSystems; -public class Dragger : MonoBehaviour +public class Dragger : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { - private Vector3 _dragOffset; - private Camera _cam; + private RectTransform rectTransform; + private CanvasGroup canvasGroup; + private Vector2 originalPosition; + + [SerializeField] private Canvas canvas; private void Awake() { - _cam = Camera.main; + rectTransform = GetComponent(); + canvasGroup = GetComponent(); } - void OnMouseDown() + public void OnBeginDrag(PointerEventData eventData) { - _dragOffset = transform.position - GetMausePos(); + originalPosition = rectTransform.anchoredPosition; + canvasGroup.alpha = 0.6f; + canvasGroup.blocksRaycasts = false; } - private void OnMouseDrag() + public void OnDrag(PointerEventData eventData) { - transform.position = GetMausePos() + _dragOffset; + rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor; } - Vector3 GetMausePos() { - var mousePos = _cam.ScreenToWorldPoint(Input.mousePosition); - return mousePos; + public void OnEndDrag(PointerEventData eventData) + { + canvasGroup.alpha = 1f; + canvasGroup.blocksRaycasts = true; + + // Check if the card is over the play area + if (RectTransformUtility.RectangleContainsScreenPoint( + PlayArea.Instance.playAreaRectTransform, + Input.mousePosition, + Camera.main)) + { + PlayArea.Instance.AddCardToPlayArea(GetComponent()); + } + else + { + // Return to original position if not dropped in play area + rectTransform.anchoredPosition = originalPosition; + } } } + + diff --git a/Assets/Scripts/PlayArea.cs b/Assets/Scripts/PlayArea.cs new file mode 100644 index 0000000..5cab9a5 --- /dev/null +++ b/Assets/Scripts/PlayArea.cs @@ -0,0 +1,34 @@ +// PlayArea.cs +using UnityEngine; +using System.Collections.Generic; + +public class PlayArea : MonoBehaviour +{ + public RectTransform playAreaRectTransform; + public List cardsInPlayArea = new List(); + + // Singleton instance + public static PlayArea Instance; + + private void Awake() + { + if (Instance == null) + { + Instance = this; + } + else + { + Destroy(gameObject); + } + } + + public void AddCardToPlayArea(Card card) + { + if (!cardsInPlayArea.Contains(card)) + { + cardsInPlayArea.Add(card); + card.transform.SetParent(playAreaRectTransform, false); + } + } +} + diff --git a/Assets/Scripts/PlayArea.cs.meta b/Assets/Scripts/PlayArea.cs.meta new file mode 100644 index 0000000..dfef105 --- /dev/null +++ b/Assets/Scripts/PlayArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0b005e6488ca2848803c8fc76d99389 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: