public void OnEndDrag(PointerEventData eventData) { if (!canDrag) { return; } canvasGroup.alpha = 1f; canvasGroup.blocksRaycasts = true; OnEndDragHandler?.Invoke(eventData, false); leftBeingHeld = false; var results = new List <RaycastResult>(); EventSystem.current.RaycastAll(eventData, results); CandiArea dropArea = null; foreach (var result in results) { dropArea = result.gameObject.GetComponent <CandiArea>(); if (dropArea != null) { break; } } if (dropArea != null && dropArea.Accepts(this)) { int TransformX = (int)rigidbody2D.rotation; if (TransformX < 0) { TransformX = (TransformX - 45) / 90 * 90; } else { TransformX = (TransformX + 45) / 90 * 90; } transform.SetPositionAndRotation(transform.position, Quaternion.Euler(0, 0, TransformX)); if (Mathf.Abs(TransformX) / 90 % 2 == 1) { horizontalState = false; } else { horizontalState = true; } int lastTotalCandi = GuideLine.totalCandi; dropArea.Drop(this); OnEndDragHandler?.Invoke(eventData, true); if (lastTotalCandi != GuideLine.totalCandi) { rigidbody2D.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Static; canDrag = false; StartCoroutine(CandiPlaced()); return; } } rigidbody2D.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic; rigidbody2D.gravityScale = 150f; }
protected virtual void Awake() { DropArea = GetComponent <CandiArea>() ?? gameObject.AddComponent <CandiArea>(); DropArea.OnDropHandler += OnItemDropped; }