using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.U2D;
using UnityEngine.EventSystems;

public class UIRelicDirector : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public Image[] imgRelic;
    [SerializeField]
    private SpriteAtlas sa;
    private int relicCnt;
    [SerializeField]
    private RectTransform[] rects;
    [SerializeField]
    private GameObject[] relicDescPopups;
    [SerializeField]
    private Text[] txtName;
    [SerializeField]
    private Text[] txtDesc;

    private bool[] isPopupActive;

    public void Init() 
    {
        EventDispatcher.Instance.AddListener<string, bool>(EventDispatcher.EventName.UIRelicDirectorTakeRelic, this.TakeRelic);

        this.isPopupActive = new bool[relicDescPopups.Length];
    }

    public bool TakeRelic(string relicName)
    {
        bool isRelicNotFull = true;
        if (this.relicCnt >= 3) isRelicNotFull = false;
        if (isRelicNotFull)
        {
            this.imgRelic[this.relicCnt].gameObject.SetActive(true);
            this.imgRelic[this.relicCnt].sprite = this.sa.GetSprite(relicName);

            var relicData = DataManager.Instance.GetRelicDataFromPrefabName(relicName);

            this.txtName[this.relicCnt].text = relicData.name;
            this.txtDesc[this.relicCnt].text = relicData.disc;
            this.rects[this.relicCnt].gameObject.SetActive(true);
        }

        this.relicCnt++;

        return isRelicNotFull;
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        for (int i = 0; i < this.rects.Length; i++)
        {
            if (RectTransformUtility.RectangleContainsScreenPoint(this.rects[i], eventData.position))
                this.isPopupActive[i] = true;
            else
                this.isPopupActive[i] = false;
        }

        for (int i = 0; i < this.relicDescPopups.Length; i++)
        {
            if (this.isPopupActive[i] && this.rects[i].gameObject.activeSelf)
                this.relicDescPopups[i].SetActive(true);
            else
                this.relicDescPopups[i].SetActive(false);
        }

    }

    public void OnPointerUp(PointerEventData eventData)
    {
        for(int i = 0; i < this.relicDescPopups.Length; i++)
        {
            this.relicDescPopups[i].SetActive(false);
        }
        
    }    
}

 

 유니티의 이벤트시스템을 활용하여 터치하면 팝업이 생성되고 터치를 떼었을 때 팝업이 꺼지도록 기능을 구현하였습니다. 팝업 내용은 데이터테이블에 의해 내용이 정해지도록 구현하였으며 터치되는 위치를 인식하여 해당 위치에 터치되면 특정 인덱스의 팝업이 켜지도록 구현하였습니다.

 

+ Recent posts