using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using static CommunicationEvents; public class RenderedScrollFact : FactWrapper, IDropHandler, IPointerClickHandler { #region Serializable public TextMeshProUGUI LabelMesh; public GameObject ScrollParameterObject; #endregion Serializable #region Properties public int ID { get => _ID; private set { _ID = value; SetLabel(null); } } private int _ID; public Scroll Scroll { get => _Scroll; set { _Scroll = value; SetLabel(null); } } 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"; } private void OnEnable() { HintAvailableEvent.AddListener(OnHintAvailable); } private void OnDisable() { HintAvailableEvent.RemoveListener(OnHintAvailable); } public void OnClickHintButton() { ScrollFactHintEvent.Invoke(this.ScrollParameterObject, ScrollFactURI); } public void OnHintAvailable(List<string> uris) { GameObject hintButton = ScrollParameterObject.transform.GetChild(2).gameObject; hintButton.SetActive(uris.Contains(ScrollFactURI)); } #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 }