using Jovian.PopupSystem; using Jovian.PopupSystem.UI; using UnityEngine; /// /// Example: Using PopupSystem with dynamically instantiated UI elements. /// /// When UI elements are created at runtime (e.g. inventory slots, party member portraits), /// use InitializeTriggersInChildren to scan and bind triggers after instantiation. /// public class DynamicTriggersExample : MonoBehaviour { [SerializeField] PopupSettings popupSettings; [SerializeField] PopupReference popupReferencePrefab; [SerializeField] Transform canvasRoot; [SerializeField] Transform slotsContainer; [SerializeField] GameObject slotPrefab; IPopupSystem popupSystem; void Start() { popupSystem = new PopupSystem(popupSettings, popupReferencePrefab, canvasRoot); popupSystem.RegisterCategory(PopupCategory.Item, priority: 5); // Simulate creating dynamic UI slots for(int i = 0; i < 5; i++) { Instantiate(slotPrefab, slotsContainer); } // Scan the container for any PopupTrigger components on the new slots. // Each trigger is automatically bound to the popup system. // The configure callback lets you set content per trigger. popupSystem.InitializeTriggersInChildren(slotsContainer, trigger => { var slotName = trigger.gameObject.name; trigger.SetContent(builder => { builder .AddHeader(slotName) .AddSeparator() .AddText("This is a dynamically created slot."); }); }); } void Update() { popupSystem?.Tick(Time.deltaTime); } void OnDestroy() { popupSystem?.Dispose(); } }