using System; using System.Collections; using ShiroginSDK.Runtime.Modules.Events; using ShiroginSDK.Runtime.Services.Base; using ShiroginSDK.Runtime.Services.Interfaces; using UnityEngine; using UnityEngine.UI; namespace ShiroginSDK.Samples.AnalyticsSample.Scripts { /// /// Sample UI that manually fires ShiroginEvents for analytics testing. /// Each button simulates a real analytics event for validation and debugging. /// [RequireComponent(typeof(Canvas))] public class AnalyticsEventSampleUI : MonoBehaviour { [Header("UI References")] [Tooltip("Parent RectTransform where all buttons will be created.")] [SerializeField] private RectTransform buttonContainer; [Header("Button Settings")] [SerializeField] private Font buttonFont; [SerializeField] private Color buttonColor = new(0.2f, 0.4f, 0.8f); [SerializeField] private Color textColor = Color.white; [SerializeField] private Vector2 buttonSize = new(250, 80); [SerializeField] private int columns = 3; [SerializeField] private int spacing = 15; private IEventService _eventService; private void Awake() { _eventService = ServiceLocator.Get(); } private void Start() { if (buttonContainer == null) { Debug.LogError("[AnalyticsEventSampleUI] Missing ButtonContainer RectTransform."); return; } SetupGrid(); StartCoroutine(CreateButtonsGradually()); } private void SetupGrid() { var grid = buttonContainer.GetComponent() ?? buttonContainer.gameObject.AddComponent(); grid.cellSize = buttonSize; grid.spacing = new Vector2(spacing, spacing); grid.constraint = GridLayoutGroup.Constraint.FixedColumnCount; grid.constraintCount = columns; grid.childAlignment = TextAnchor.UpperCenter; Canvas.ForceUpdateCanvases(); } private IEnumerator CreateButtonsGradually() { CreateButton("Purchase Success", OnPurchaseSuccess); yield return null; CreateButton("Purchase Fail", OnPurchaseFail); yield return null; CreateButton("Reward Claimed", OnRewardClaimed); yield return null; CreateButton("Ad Watched", OnAdWatched); yield return null; CreateButton("Ad Revenue", OnAdRevenue); yield return null; CreateButton("Player SignUp", OnPlayerSignUp); yield return null; CreateButton("Player Login", OnPlayerLogin); yield return null; CreateButton("Session Start", OnSessionStart); yield return null; CreateButton("Session End", OnSessionEnd); yield return null; CreateButton("Tutorial Start", OnTutorialStart); yield return null; CreateButton("Tutorial Complete", OnTutorialComplete); yield return null; CreateButton("Level Complete", OnLevelComplete); yield return null; } private void CreateButton(string label, Action callback) { var go = new GameObject(label, typeof(RectTransform), typeof(Button), typeof(Image)); go.transform.SetParent(buttonContainer, false); var img = go.GetComponent(); img.color = buttonColor; var btn = go.GetComponent