Skip to content
Snippets Groups Projects
RenderedScrollFact.cs 2.69 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System.Collections.Generic;
    using TMPro;
    
    Richard Marcus's avatar
    Richard Marcus committed
    using UnityEngine;
    
    MaZiFAU's avatar
    MaZiFAU committed
    using UnityEngine.EventSystems;
    
    using static CommunicationEvents;
    
    Richard Marcus's avatar
    Richard Marcus committed
    
    
    MaZiFAU's avatar
    MaZiFAU committed
    public class RenderedScrollFact : FactObjectUI, IDropHandler, IPointerClickHandler
    
    Richard Marcus's avatar
    Richard Marcus committed
    {
    
    MaZiFAU's avatar
    MaZiFAU committed
        #region Serializable
    
    Richard Marcus's avatar
    Richard Marcus committed
        public TextMeshProUGUI LabelMesh;
    
        public GameObject HintButton;
    
    MaZiFAU's avatar
    MaZiFAU committed
        #endregion Serializable
    
        #region Properties
        public int ID
        {
            get => _ID;
            private set
            {
                _ID = value;
                SetLabel(null);
            }
        }
        private int _ID;
    
    MaZiFAU's avatar
    MaZiFAU committed
        public Scroll Scroll
    
    Richard Marcus's avatar
    Richard Marcus committed
        {
    
    MaZiFAU's avatar
    MaZiFAU committed
            get => _Scroll;
    
    Richard Marcus's avatar
    Richard Marcus committed
            set
            {
    
    MaZiFAU's avatar
    MaZiFAU committed
                _Scroll = value;
                SetLabel(null);
    
    Richard Marcus's avatar
    Richard Marcus committed
            }
        }
    
    MaZiFAU's avatar
    MaZiFAU committed
        private Scroll _Scroll;
    
        public string ScrollFactURI
            => Scroll.requiredFacts[ID].@ref.uri;
    
        public string ScrollFactLabel
            => LabelMesh.text;
        #endregion Properties
    
    
        protected override void FactUpdated()
    
    MaZiFAU's avatar
    MaZiFAU committed
        {
    
    MaZiFAU's avatar
    MaZiFAU committed
            Destroy(RenderedFactObject);
    
    MaZiFAU's avatar
    MaZiFAU committed
            NewAssignmentEvent.Invoke();
    
    
            _URI ??= ScrollFactURI;
    
            if (VerboseURI)
                Debug.Log(nameof(RenderedScrollFact) + " recieved Fact: " + URI);
    
    MaZiFAU's avatar
    MaZiFAU committed
        }
    
    
        protected override void _DeleteFactEvent(Fact fact)
            => Fact = null;
    
        protected override void _OnEnable()
    
        {
            HintAvailableEvent.AddListener(OnHintAvailable);
        }
    
    
        protected override void _OnDisable()
    
    MaZiFAU's avatar
    MaZiFAU committed
        {
            HintAvailableEvent.RemoveListener(OnHintAvailable);
        }
    
    
        public void Populate(Scroll scroll, int Nr)
        {
            Scroll = scroll;
            ID = Nr;
    
    MaZiFAU's avatar
    MaZiFAU committed
            _URI = ScrollFactURI;
    
        }
    
        private void SetLabel(string label)
        {
            LabelMesh.text = label ?? Scroll?.requiredFacts[ID].label ?? "Err";
        }
    
    
        public void OnClickHintButton()
        {
    
    MaZiFAU's avatar
    MaZiFAU committed
            ScrollFactHintEvent.Invoke(URI);
    
        public void OnHintAvailable(List<string> uris)
        {
    
    MaZiFAU's avatar
    MaZiFAU committed
            HintButton.SetActive(uris.Contains(ScrollFactURI));
    
    MaZiFAU's avatar
    MaZiFAU committed
    
        #region DropHandling 
    
    MaZiFAU's avatar
    MaZiFAU committed
        private GameObject RenderedFactObject;
    
    MaZiFAU's avatar
    MaZiFAU committed
    
        public void OnDrop(PointerEventData eventData)
        {
            Fact = eventData.pointerDrag.GetComponent<FactObject>().Fact;
    
    
            if (VerboseURI)
    
    MaZiFAU's avatar
    MaZiFAU committed
                Debug.Log(Fact.Label + " was dropped on "
                    + gameObject.name + " " + (ID + 1) + "/" +
                    ScrollDetails.ParameterDisplays.Count + " label: " + ScrollFactLabel);
    
    
            RenderedFactObject = // has to be: ..., Vector3.zero, Quaternion.identity => SetParent
    
    MaZiFAU's avatar
    MaZiFAU committed
                Instantiate(eventData.pointerDrag, Vector3.zero, Quaternion.identity);
    
    MaZiFAU's avatar
    MaZiFAU committed
    
    
    MaZiFAU's avatar
    MaZiFAU committed
            RenderedFactObject.transform.SetParent(gameObject.transform, worldPositionStays: false);
    
    MaZiFAU's avatar
    MaZiFAU committed
        }
    
        public void OnPointerClick(PointerEventData eventData)
    
            => _DeleteFactEvent(null);
    
    MaZiFAU's avatar
    MaZiFAU committed
        #endregion DropHandling 
    
    Richard Marcus's avatar
    Richard Marcus committed
    }