using Jovian.PopupSystem; using Jovian.PopupSystem.UI; using UnityEngine; /// /// Example: Showing popups from code without PopupTrigger components. /// /// Use this approach for confirmation dialogs, tutorial tips, or any popup /// that is triggered by game logic rather than hover events. /// Also demonstrates PopupElementType variants and the generic Add() method. /// public class CodeOnlyPopupExample : MonoBehaviour { [SerializeField] PopupSettings popupSettings; [SerializeField] PopupReference popupReferencePrefab; [SerializeField] Transform canvasRoot; [SerializeField] RectTransform targetElement; // Custom element type defined in game code static readonly PopupElementType BadgeElement = new("badge"); IPopupSystem popupSystem; void Start() { popupSystem = new PopupSystem(popupSettings, popupReferencePrefab, canvasRoot); popupSystem.RegisterCategory(PopupCategory.General, priority: 1); } void Update() { popupSystem?.Tick(Time.deltaTime); // Show anchored to an element if(Input.GetKeyDown(KeyCode.Alpha1)) { popupSystem.Show(PopupCategory.General, builder => { builder .AddText("Anchored Popup", PopupElementType.Header) .AddText("This popup is anchored to a UI element.", PopupElementType.Text); }, targetElement, AnchorSide.Right); } // Show at a fixed screen position if(Input.GetKeyDown(KeyCode.Alpha2)) { popupSystem.ShowAtPosition(PopupCategory.General, builder => { builder .AddText("Fixed Position", PopupElementType.Header) .AddText("This popup appears at the center of the screen.", PopupElementType.Text); }, new Vector2(Screen.width * 0.5f, Screen.height * 0.5f)); } // Show following the mouse if(Input.GetKeyDown(KeyCode.Alpha3)) { popupSystem.Show(PopupCategory.General, builder => { builder .AddText("Follow Mouse", PopupElementType.Header) .AddText("This popup follows the cursor.", PopupElementType.Text); }); } // Demonstrate variant elements // Requires "header_gold" and "separator_thick" entries in PopupSettings.elementPrefabs if(Input.GetKeyDown(KeyCode.Alpha4)) { popupSystem.Show(PopupCategory.General, builder => { builder .AddText("Legendary Item", PopupElementType.Header.Variant("gold")) .AddSeparator(PopupElementType.Separator.Variant("thick")) .AddNameValue("Damage", "150", PopupElementType.LabelValueText) .AddText("A weapon forged in dragon fire.", "FF6600", PopupElementType.Text); }, targetElement, AnchorSide.Below); } // Demonstrate generic Add() for fully custom elements // Requires a "badge" entry in PopupSettings.elementPrefabs if(Input.GetKeyDown(KeyCode.Alpha5)) { popupSystem.Show(PopupCategory.General, builder => { builder.AddText("Custom Element", PopupElementType.Header); var badge = builder.Add(BadgeElement); if(badge != null) { // Access any components on the custom prefab // badge.GetComponent().SetData(...); } }, targetElement); } if(Input.GetKeyDown(KeyCode.Escape)) { popupSystem.HideAll(); } } void OnDestroy() { popupSystem?.Dispose(); } }