using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public enum e_CardPosition // 현재 카드가 가운데인지 왼쪽,오른쪽인지 나타는 enum
{
Center,
Left,
Right,
}
public class CS_UI_Card : MonoBehaviour, IPointerDownHandler, IDragHandler, IEndDragHandler
{
private RectTransform cardRectTransform;
private Vector2 dragStartPosition;
private Vector2 previousDragPosition;
//Vector2 targetLocation;
float targetLocationX;
public float rotationSpeed = -0.1f;
public float maxRotationAngle = 45f;
public Animator anim_Selection
TextSlide;
public e_CardPosition current_CardPosition;
public Animator anim;
private void Awake()
{
cardRectTransform = GetComponent<RectTransform>();
}
private void Update()
{
// 카드 위치와 회전
targetLocationX = Mathf.Clamp(targetLocationX, -120f, 120f); // 최소, 최대 값 지정
cardRectTransform.anchoredPosition = new Vector2(Mathf.Lerp(cardRectTransform.anchoredPosition.x , targetLocationX, Time.deltaTime * 10.0f) , 0f); // lerp로 해야 손떨림이 안 느껴짐
cardRectTransform.rotation = Quaternion.Euler(0f, 0f, cardRectTransform.anchoredPosition.x * rotationSpeed); // 카드가 좌,우로 이동한 만큼 z축 기준으로 기울여서 줌
}
public void OnPointerDown(PointerEventData eventData)
{
dragStartPosition = eventData.position;
previousDragPosition = eventData.position;
}
public void OnDrag(PointerEventData eventData)
{
Vector2 currentDragPosition = eventData.position;
Vector2 dragDelta = currentDragPosition - previousDragPosition;
// 카드 이동
float movementX = dragDelta.x;
float movementZ = dragDelta.y;
targetLocationX += movementX; // 타겟 로케이션만 드래그에서 계산하고 실제 움직임은 업데이트에서 처리
previousDragPosition = currentDragPosition;
e_CardPosition new_CardPosition;
if(targetLocationX < -50)
{
new_CardPosition = e_CardPosition.Left;
}
else if (targetLocationX > 50)
{
new_CardPosition = e_CardPosition.Right;
}
else
{
new_CardPosition = e_CardPosition.Center;
}
if(new_CardPosition != current_CardPosition) // 카드 위치가 변경 되었다면
{
if(!CS_Card_Controller.Card_Controller.choice_L.isDefaultChoice)
{
switch (new_CardPosition)
{
case e_CardPosition.Center:
// anim_SelectionTextSlide.Play("Idle", -1, 0f); // 선택지 숨김 애니메이션
break;
case e_CardPosition.Left:
// anim_SelectionTextSlide.Play("Right", -1, 0f); // 오른쪽 선택지 표시 애니메이션
break;
case e_CardPosition.Right:
// anim_SelectionTextSlide.Play("Left", -1, 0f); // 왼쪽 선택지 표시 애니메이션
break;
}
}
current_CardPosition = new_CardPosition;
}
}
public void OnEndDrag(PointerEventData eventData)
{
// 드래그 종료 시 필요한 작업을 수행할 수 있습니다.
switch (current_CardPosition)
{
case e_CardPosition.Center:
// 가운데 선택되었을 때 처리
targetLocationX = 0f;
anim_SelectionTextSlide.Play("Idle", -1, 0f);
break;
case e_CardPosition.Left:
// 왼쪽 선택 되었을 때 처리
cardRectTransform.anchoredPosition = Vector2.zero;
cardRectTransform.rotation = Quaternion.Euler(0f, 0f, 0f);
break;
case e_CardPosition.Right:
// 오른쪽 선택 되었을 때 처리
cardRectTransform.anchoredPosition = Vector2.zero;
cardRectTransform.rotation = Quaternion.Euler(0f, 0f, 0f);
break;
}
}
}