forked from Shardstone/trail-into-darkness
51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
using Jovian.PopupSystem;
|
|
using Jovian.PopupSystem.UI;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
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();
|
|
}
|
|
}
|