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 HintButton; public ImageHintAnimation ImageHintObject; #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 public override void HighlightAs(FactMaterials tmpState) { ImageHintObject.AnimationTrigger(); } protected override void FactUpdated() { if (RenderedFactObject != null) Destroy(RenderedFactObject.gameObject); CommunicationEvents.NewAssignmentEvent.Invoke(); _URI ??= ScrollFactURI; if (VerboseURI) Debug.Log(nameof(RenderedScrollFact) + " recieved Fact: " + URI); } protected override void _DeleteFactEvent(Fact fact) => Fact = null; protected override void _Awake() { _URI ??= ScrollFactURI; } protected override void _OnEnable() { HintAvailableEvent.AddListener(OnHintAvailable); } protected override void _OnDisable() { HintAvailableEvent.RemoveListener(OnHintAvailable); } public void Populate(Scroll scroll, int Nr) { Scroll = scroll; ID = Nr; } private void SetLabel(string label) { LabelMesh.text = label ?? Scroll?.requiredFacts[ID].label ?? "Err"; } public void OnClickHintButton() { ScrollFactHintEvent.Invoke(ImageHintObject, URI); } public void OnHintAvailable(List<string> uris) { HintButton.SetActive(true);// uris.Contains(ScrollFactURI)); } #region DropHandling private FactObject RenderedFactObject; public void OnDrop(PointerEventData eventData) { Fact = eventData.pointerDrag.GetComponent<FactObject>().Fact; if (VerboseURI) 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 Instantiate(eventData.pointerDrag, Vector3.zero, Quaternion.identity) .GetComponent<FactObject>(); RenderedFactObject.transform.SetParent(gameObject.transform, worldPositionStays: false); RenderedFactObject.GetComponent<ImageHintAnimation>().ResetAnimation(); } public void OnPointerClick(PointerEventData eventData) => _DeleteFactEvent(null); #endregion DropHandling }