Skip to content
Snippets Groups Projects
  • MaZiFAU's avatar
    5809e4c5
    BugFixes; Added SlingShotStage; RenderedScrollFact.cs; ScrollDetails.cs; · 5809e4c5
    MaZiFAU authored
    BugFixes:
    + repaired Play/Create button in InGameEditor
    + null exception when deleting assigned fact / parsing null-hint
    + <no label> for defined and filtered facts from application
    + collission Player <> snapzone
    
    RenderedScrollFact.cs:
    + changed primary key from ID to ScrollFactURI
    
    ScrollDetails.cs:
    + fully enabled ScrollOverwrites
    + filtering null-"df" assignments from Scrolls
    + reduced number of dynamic scroll applications
    5809e4c5
    History
    BugFixes; Added SlingShotStage; RenderedScrollFact.cs; ScrollDetails.cs;
    MaZiFAU authored
    BugFixes:
    + repaired Play/Create button in InGameEditor
    + null exception when deleting assigned fact / parsing null-hint
    + <no label> for defined and filtered facts from application
    + collission Player <> snapzone
    
    RenderedScrollFact.cs:
    + changed primary key from ID to ScrollFactURI
    
    ScrollDetails.cs:
    + fully enabled ScrollOverwrites
    + filtering null-"df" assignments from Scrolls
    + reduced number of dynamic scroll applications
RenderedScrollFact.cs 3.16 KiB
using MoreLinq;
using REST_JSON_API;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using static CommunicationEvents;

public class RenderedScrollFact : FactObjectUI, IDropHandler
{
    #region Serializable
    public TextMeshProUGUI LabelMesh;
    public GameObject HintButton;
    #endregion Serializable

    #region Properties
    public int ID 
        => Scroll.requiredFacts.FindIndex(f => f.@ref.uri == ScrollFactURI);

    public Scroll Scroll
    {
        get => _Scroll;
        set
        {
            _Scroll = value;
            SetLabel(null);
        }
    }
    private Scroll _Scroll;

    public bool IsSet
        => ScrollFactURI != URI;

    public string ScrollFactURI
    {
        get => _ScrollFactURI;
        set
        {
            _ScrollFactURI = value;
            SetLabel(null);
        }
    }
    private string _ScrollFactURI;

    public string ScrollFactLabel
        => LabelMesh.text;
    #endregion Properties

    protected override void FactUpdated()
    {
        _URI ??= ScrollFactURI;
        Destroy(_Payload);

        NewAssignmentEvent.Invoke();

        if (VerboseURI)
            Debug.Log(nameof(RenderedScrollFact) + " recieved Fact: " + URI);

        base.FactUpdated();
    }

    protected override void _DeleteFactEvent(Fact fact) 
        => Fact = null; // calls NewAssignmentEvent.Invoke();

    protected override void _OnEnable()
    {
        HintAvailableEvent.AddListener(OnHintAvailable);
    }

    protected override void _OnDisable()
    {
        HintAvailableEvent.RemoveListener(OnHintAvailable);
    }

    public void Populate(Scroll scroll, string scroll_fact_uri)
    {
        _Scroll = scroll;
        _ScrollFactURI = scroll_fact_uri;
        _URI = ScrollFactURI;
    }

    private void SetLabel(string label)
    {
        LabelMesh.text = label ?? Scroll?.requiredFacts[ID].label ?? "Err";
    }

    public void OnClickHintButton()
    {
        ScrollFactHintEvent.Invoke(URI);
    }

    public void OnHintAvailable(List<string> uris)
    {
        HintButton.SetActive(uris.Contains(ScrollFactURI));
    }

    #region DropHandling 
    public FactObjectUI Payload
        => _Payload == null ? null : _Payload.GetComponent<FactObjectUI>();

    private GameObject _Payload;

    public void OnDrop(PointerEventData eventData)
    {
        if (eventData.pointerDrag.TryGetComponent(out FactObjectUI factObject))
            SetByFactObject(factObject);
    }

    public void SetByFactObject(FactObjectUI fOUI)
    {
        Fact = fOUI.Fact;

        if (VerboseURI)
            Debug.Log(Fact.GetLabel(StageStatic.stage.factState) + " was dropped on "
                + gameObject.name + " " + (ID + 1) + "/" +
                ScrollDetails.ParameterDisplays.Count + " label: " + ScrollFactLabel);

        _Payload = // has to be: ..., Vector3.zero, Quaternion.identity => SetParent
            Instantiate(fOUI.gameObject, Vector3.zero, Quaternion.identity);

        _Payload.transform.SetParent(gameObject.transform, worldPositionStays: false);
        _Payload.GetComponent<CanvasGroup>().blocksRaycasts = true; // Reverse drag effect
    }
    #endregion DropHandling 
}