Skip to content
Snippets Groups Projects
RenderedScrollFact.cs 3.37 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 : FactWrapper, 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 ScrollParameterObject;
    
    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() { }
    
        public void Populate(Scroll scroll, int Nr)
        {
            Scroll = scroll;
            ID = Nr;
        }
    
        private void SetLabel(string label)
        {
            LabelMesh.text = label ?? Scroll?.requiredFacts[ID].label ?? "Err";
        }
    
    Richard Marcus's avatar
    Richard Marcus committed
    
    
    MaZiFAU's avatar
    MaZiFAU committed
        private void OnEnable()
    
        {
            HintAvailableEvent.AddListener(OnHintAvailable);
        }
    
    
    MaZiFAU's avatar
    MaZiFAU committed
        private void OnDisable()
        {
            HintAvailableEvent.RemoveListener(OnHintAvailable);
        }
    
    
        public void OnClickHintButton()
        {
    
    MaZiFAU's avatar
    MaZiFAU committed
            ScrollFactHintEvent.Invoke(this.ScrollParameterObject, ScrollFactURI);
    
        public void OnHintAvailable(List<string> uris)
        {
    
            GameObject hintButton = ScrollParameterObject.transform.GetChild(2).gameObject;
    
    MaZiFAU's avatar
    MaZiFAU committed
    
            hintButton.SetActive(uris.Contains(ScrollFactURI));
    
    MaZiFAU's avatar
    MaZiFAU committed
    
        #region DropHandling 
    
        private FactObject RenderedFactObject;
    
        public void OnDrop(PointerEventData eventData)
        {
            Fact = eventData.pointerDrag.GetComponent<FactObject>().Fact;
    
            {
                Debug.Log(Fact.Label + " was dropped on "
                    + gameObject.name + " " + (ID + 1) + "/" +
                    ScrollDetails.ParameterDisplays.Count + " label: " + ScrollFactLabel);
            }
    
            Destroy(RenderedFactObject?.gameObject);
    
            RenderedFactObject = // has to be , Vector3.zero, Quaternion.identity => SetParent
                Instantiate(eventData.pointerDrag, Vector3.zero, Quaternion.identity)
                .GetComponent<FactObject>();
    
            RenderedFactObject.transform.SetParent(gameObject.transform, worldPositionStays: false);
            RenderedFactObject.Fact = Fact;
    
            //Set imageToChangeDefaultColor of current: Fix so that current won't take the color
            //the dragged item was having during animation
            RenderedFactObject.GetComponent<ImageHintAnimation>().imageToChangeDefaultColor =
                eventData.pointerDrag.GetComponent<ImageHintAnimation>().imageToChangeDefaultColor;
            RenderedFactObject.GetComponent<ImageHintAnimation>().ResetAnimation();
    
            var rect = RenderedFactObject.GetComponent<RectTransform>();
            rect.anchorMin = new Vector2(0.5f, 0.5f);
            rect.anchorMax = new Vector2(0.5f, 0.5f);
    
            Debug.Log("recieved Fact: " + Fact.Id);
    
            CommunicationEvents.NewAssignmentEvent.Invoke();
        }
    
        public void OnPointerClick(PointerEventData eventData)
        {
            Destroy(RenderedFactObject);
            Fact = null;
    
            CommunicationEvents.NewAssignmentEvent.Invoke();
        }
    
        #endregion DropHandling 
    
    Richard Marcus's avatar
    Richard Marcus committed
    }