Code/UI/Spatial/Node.Overrides.cs
namespace Nodebox.UI.Spatial;

public partial class Node {
    protected override void OnAwake() {
        NodePanelRoot.PinClicked += pinRef => {
            IEvent.Post(x => x.OnPinClicked(this, pinRef));
        };

        NodePanelRoot.PinDown += pinRef => {
            IEvent.Post(x => x.OnPinDown(this, pinRef));
        };

        NodePanelRoot.PinUp += pinRef => {
            IEvent.Post(x => x.OnPinUp(this, pinRef));
        };

        WorldPanel.PanelSize = new(4096, 4096);
        WorldPanel.VerticalAlign = Sandbox.WorldPanel.VAlignment.Top;
        WorldPanel.HorizontalAlign = Sandbox.WorldPanel.HAlignment.Left;

        GraphStyle = GraphStyle.DefaultForExecutionContext();
    }

    protected override void OnRefresh() {
        base.OnRefresh();
        RecreateSerializableNode();
    }

    protected override void OnEnabled() {
        base.OnEnabled();

        Rescan();
        RecreateSerializableNode();
        RegisterInner();
    }

    protected override void OnDisabled() {
        UnRegisterInner();
        _inner?.Destroy();
        _inner = null;
        base.OnDisabled();
    }

    protected override void OnUpdate() {
        base.OnUpdate();
    }

    protected override void OnFixedUpdate() {
        base.OnFixedUpdate();
        if (TypeLastHashCode != Type?.GetHashCode()) {
            RecreateSerializableNode();
        }
    }

    protected override void OnParentChanged(GameObject oldParent, GameObject newParent) {
        base.OnParentChanged(oldParent, newParent);

        if (Enabled) {
            Rescan();
        }
    }
}