Skip to content
Snippets Groups Projects
RenderedScrollFact.cs 4.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • using REST_JSON_API;
    
    MaZiFAU's avatar
    MaZiFAU committed
    using System.Collections.Generic;
    
    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
    
    
    [RequireComponent(typeof(TMP_InputField))]
    
    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
    
            => Scroll.requiredFacts.FindIndex(f => f.@ref.uri == ScrollFactURI);
    
    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
    
        {
            get => _ScrollFactURI;
            set
            {
                _ScrollFactURI = value;
                SetLabel(null);
            }
        }
        private string _ScrollFactURI;
    
    MaZiFAU's avatar
    MaZiFAU committed
    
        public string ScrollFactLabel
            => LabelMesh.text;
    
    
        private TMP_InputField _InputField;
    
        public string RequiredType
            => Scroll.requiredFacts[ID].getType();
    
    MaZiFAU's avatar
    MaZiFAU committed
        #endregion Properties
    
    
        protected override void _Awake()
    
    MaZiFAU's avatar
    MaZiFAU committed
        {
    
            _InputField = gameObject.GetComponent<TMP_InputField>();
            _InputField.textComponent.gameObject.SetActive(true);
        }
    
        protected override void FactUpdated()
        {
            _URI ??= ScrollFactURI;
    
            if (VerboseURI)
                Debug.Log(nameof(RenderedScrollFact) + " recieved Fact: " + URI);
    
            NewAssignmentEvent.Invoke();
            ResetPayload();
    
            base.FactUpdated();
    
    MaZiFAU's avatar
    MaZiFAU committed
        }
    
    
        private void ResetPayload()
        {
            Destroy(_Payload);
    
            _InputField.enabled = _InputField.textComponent.enabled =
                  !IsSet
                && (RequiredType == MMTConstants.RealLit
                 || string.IsNullOrEmpty(RequiredType));
    
            _InputField.SetTextWithoutNotify("R");
    
            if (DisplayFacts.displayedFacts.TryGetValue(URI, out GameObject fact_display))
            {
                _Payload = // has to be: ..., Vector3.zero, Quaternion.identity => SetParent
                    Instantiate(fact_display, Vector3.zero, Quaternion.identity);
    
                _Payload.transform.SetParent(gameObject.transform, worldPositionStays: false);
                _Payload.GetComponent<CanvasGroup>().blocksRaycasts = true; // Reverse drag effect, if any
            }
        }
    
        protected override void _DeleteFactEvent(Fact fact)
    
            => Fact = null; // calls NewAssignmentEvent.Invoke();
    
    
        protected override void _OnEnable()
    
        {
            HintAvailableEvent.AddListener(OnHintAvailable);
    
        protected override void _OnDisable()
    
    MaZiFAU's avatar
    MaZiFAU committed
        {
            HintAvailableEvent.RemoveListener(OnHintAvailable);
        }
    
    
        public void Populate(Scroll scroll, string scroll_fact_uri)
    
            _Scroll = scroll;
            _ScrollFactURI = scroll_fact_uri;
    
    MaZiFAU's avatar
    MaZiFAU committed
            _URI = ScrollFactURI;
    
        }
    
        private void SetLabel(string label)
        {
            LabelMesh.text = label ?? Scroll?.requiredFacts[ID].label ?? "Err";
        }
    
    
    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
    
    
        public void OnTextChange()
        {
            if (!float.TryParse(_InputField.text, out float input))
                return;
    
            Fact = FactAdder.AddFactIfNotFound(new RealLitFact(input), out _, false, null, "Manual User Input");
        }
    
    
    MaZiFAU's avatar
    MaZiFAU committed
        #region DropHandling 
    
    MaZiFAU's avatar
    MaZiFAU committed
        public FactObjectUI Payload
    
    MaZiFAU's avatar
    MaZiFAU committed
            => _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);
        }
        #endregion DropHandling 
    
    Richard Marcus's avatar
    Richard Marcus committed
    }