Skip to content
Snippets Groups Projects
RenderedScrollFact.cs 2.97 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 REST_JSON_API;
    
    using static CommunicationEvents;
    
    Richard Marcus's avatar
    Richard Marcus committed
    
    
    MaZiFAU's avatar
    MaZiFAU committed
    public class RenderedScrollFact : FactObjectUI, IDropHandler
    
    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;
    
    
    MaZiFAU's avatar
    MaZiFAU committed
        public bool IsSet
            => ScrollFactURI != URI;
    
    
    MaZiFAU's avatar
    MaZiFAU committed
        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
            _URI ??= ScrollFactURI;
    
    MaZiFAU's avatar
    MaZiFAU committed
            Destroy(_Payload);
    
    MaZiFAU's avatar
    MaZiFAU committed
            NewAssignmentEvent.Invoke();
    
    
            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
        public FactObjectUI Payload 
            => _Payload == null ? null : _Payload.GetComponent<FactObjectUI>();
    
        private GameObject _Payload;
    
    MaZiFAU's avatar
    MaZiFAU committed
    
        public void OnDrop(PointerEventData eventData)
        {
    
    MaZiFAU's avatar
    MaZiFAU committed
            if (eventData.pointerDrag.TryGetComponent(out FactObjectUI factObject))
                SetByFactObject(factObject);
        }
    
        public void SetByFactObject(FactObjectUI fOUI)
        {
            Fact = fOUI.Fact;
    
    MaZiFAU's avatar
    MaZiFAU committed
    
    
            if (VerboseURI)
    
                Debug.Log(Fact.GetLabel(StageStatic.stage.factState) + " was dropped on "
    
    MaZiFAU's avatar
    MaZiFAU committed
                    + gameObject.name + " " + (ID + 1) + "/" +
                    ScrollDetails.ParameterDisplays.Count + " label: " + ScrollFactLabel);
    
    
    MaZiFAU's avatar
    MaZiFAU committed
            _Payload = // has to be: ..., Vector3.zero, Quaternion.identity => SetParent
                Instantiate(fOUI.gameObject, Vector3.zero, Quaternion.identity);
    
    MaZiFAU's avatar
    MaZiFAU committed
    
    
    MaZiFAU's avatar
    MaZiFAU committed
            _Payload.transform.SetParent(gameObject.transform, worldPositionStays: false);
            _Payload.GetComponent<CanvasGroup>().blocksRaycasts = true; // Reverse drag effect
    
    MaZiFAU's avatar
    MaZiFAU committed
        }
        #endregion DropHandling 
    
    Richard Marcus's avatar
    Richard Marcus committed
    }