using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System; namespace Tech3C { /// /// Simple demo that creates UI programmatically /// Just attach this script to any GameObject in your scene /// public class Tech3CSimpleDemo : MonoBehaviour { [Header("Configuration")] public string clientId = "your_client_id"; public string clientSecret = "your_client_secret"; private Canvas canvas; private Text logText; private AuthCallback authCallback; private LogoutCallback logoutCallback; private GameObject dialogPanel; private Text dialogText; private Button dialogCloseButton; private void Start() { EnsureEventSystem(); CreateUI(); SetupCallbacks(); // Auto-initialize SDK if (!string.IsNullOrEmpty(clientId) && !string.IsNullOrEmpty(clientSecret)) { Log($"Initializing Tech3C SDK...\n Client ID: {clientId}"); Tech3CSDK.Instance.Initialize(clientId, clientSecret); if (Tech3CSDK.Instance.IsInitialized) { Log("✓ SDK Initialized Successfully!"); } else { Log("✗ Failed to initialize SDK"); } } else { Log("⚠ Client ID and/or Client Secret not set. Please configure in Inspector."); } Debug.Log("[Tech3C Demo] Tech3C SDK Simple Demo Started"); } private void EnsureEventSystem() { if (EventSystem.current == null) { GameObject eventSystemGO = new GameObject("EventSystem"); eventSystemGO.AddComponent(); eventSystemGO.AddComponent(); Debug.Log("[Tech3C Demo] EventSystem created"); } } private void CreateUI() { // Create Canvas GameObject canvasGO = new GameObject("Tech3CDemoCanvas"); canvasGO.transform.SetParent(transform); canvas = canvasGO.AddComponent(); canvas.renderMode = RenderMode.ScreenSpaceOverlay; // Configure CanvasScaler for responsive 16:9 ratio CanvasScaler canvasScaler = canvasGO.AddComponent(); canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; canvasScaler.referenceResolution = new Vector2(1920, 1080); // 16:9 ratio canvasScaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight; canvasScaler.matchWidthOrHeight = 0.5f; // Balance between width and height canvasGO.AddComponent(); // Create Scroll Panel GameObject scrollPanel = new GameObject("ScrollPanel"); scrollPanel.transform.SetParent(canvasGO.transform, false); RectTransform scrollPanelRect = scrollPanel.AddComponent(); scrollPanelRect.anchorMin = Vector2.zero; scrollPanelRect.anchorMax = Vector2.one; scrollPanelRect.sizeDelta = Vector2.zero; Image scrollPanelImage = scrollPanel.AddComponent(); scrollPanelImage.color = new Color(0.2f, 0.2f, 0.2f, 1f); // Create ScrollRect ScrollRect scrollRect = scrollPanel.AddComponent(); scrollRect.horizontal = false; scrollRect.vertical = true; scrollRect.scrollSensitivity = 50f; // Create Content Panel GameObject panel = new GameObject("Content"); panel.transform.SetParent(scrollPanel.transform, false); RectTransform panelRect = panel.AddComponent(); panelRect.anchorMin = new Vector2(0, 1); panelRect.anchorMax = new Vector2(1, 1); panelRect.pivot = new Vector2(0.5f, 1f); panelRect.sizeDelta = new Vector2(0, 0); scrollRect.content = panelRect; // Create Vertical Layout Group VerticalLayoutGroup layoutGroup = panel.AddComponent(); layoutGroup.childControlHeight = false; layoutGroup.childControlWidth = true; layoutGroup.childForceExpandWidth = true; layoutGroup.childForceExpandHeight = false; layoutGroup.spacing = 15; layoutGroup.padding = new RectOffset(40, 40, 40, 40); ContentSizeFitter contentSizeFitter = panel.AddComponent(); contentSizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; // Create Title CreateTextResponsive(panel.transform, "Tech3C SDK Demo", 28, TextAnchor.MiddleCenter, 60); // Create Separator CreateTextResponsive(panel.transform, "--- Authentication ---", 18, TextAnchor.MiddleCenter, 30); // Create Show Auth Button Button showAuthButton = CreateButtonResponsive(panel.transform, "Show Auth Screen", 70); showAuthButton.onClick.AddListener(OnShowAuthClick); // Create Logout Button Button logoutButton = CreateButtonResponsive(panel.transform, "Logout", 70); logoutButton.onClick.AddListener(OnLogoutClick); // Create Log Text CreateTextResponsive(panel.transform, "Logs:", 16, TextAnchor.MiddleLeft, 35); logText = CreateTextResponsive(panel.transform, "Ready...", 16, TextAnchor.MiddleLeft, 400); logText.color = Color.green; // Reposition panel panelRect.anchoredPosition = Vector2.zero; } private void SetupCallbacks() { // Auth callback authCallback = new AuthCallback(); authCallback.OnAuthSuccessEvent += (userId, password, accessToken, refreshToken, loginType, expiryTime) => { Debug.Log($"[Tech3C Demo] === AUTH SUCCESS CALLBACK FIRED ==="); Debug.Log($"[Tech3C Demo] UserId: {userId}"); Debug.Log($"[Tech3C Demo] Password: {password?.Substring(0, Math.Min(3, password?.Length ?? 0))}..."); Debug.Log($"[Tech3C Demo] LoginType: {loginType}"); Debug.Log($"[Tech3C Demo] AccessToken: {accessToken?.Substring(0, Math.Min(20, accessToken?.Length ?? 0))}..."); Debug.Log($"[Tech3C Demo] RefreshToken: {refreshToken?.Substring(0, Math.Min(20, refreshToken?.Length ?? 0))}..."); Debug.Log($"[Tech3C Demo] ExpiryTime: {expiryTime}"); Log($"✓ Auth Success!\n User ID: {userId}\n Password: {password}\n Login Type: {loginType}\n Token: {accessToken?.Substring(0, Math.Min(20, accessToken?.Length ?? 0))}..."); ShowAuthSuccessDialog(userId, password, loginType.ToString()); }; authCallback.OnAuthCancelledEvent += () => { Debug.Log($"[Tech3C Demo] === AUTH CANCELLED CALLBACK FIRED ==="); Log("✗ Auth Cancelled by user"); }; authCallback.OnAuthErrorEvent += (errorCode, errorMessage) => { Debug.Log($"[Tech3C Demo] === AUTH ERROR CALLBACK FIRED ==="); Debug.Log($"[Tech3C Demo] ErrorCode: {errorCode}"); Debug.Log($"[Tech3C Demo] ErrorMessage: {errorMessage}"); Log($"✗ Auth Error [{errorCode}]: {errorMessage}"); }; // Logout callback logoutCallback = new LogoutCallback(); logoutCallback.OnLogoutSuccessEvent += () => { Debug.Log($"[Tech3C Demo] === LOGOUT SUCCESS CALLBACK FIRED ==="); Log("✓ Logout Successful"); }; logoutCallback.OnLogoutErrorEvent += (errorCode, errorMessage) => { Debug.Log($"[Tech3C Demo] === LOGOUT ERROR CALLBACK FIRED ==="); Debug.Log($"[Tech3C Demo] ErrorCode: {errorCode}"); Debug.Log($"[Tech3C Demo] ErrorMessage: {errorMessage}"); Log($"✗ Logout Error [{errorCode}]: {errorMessage}"); }; } #region Button Handlers private void OnInitializeClick(string newClientId, string newClientSecret) { if (string.IsNullOrEmpty(newClientId) || string.IsNullOrEmpty(newClientSecret)) { Log("✗ Client ID and Client Secret are required!"); return; } clientId = newClientId; clientSecret = newClientSecret; Log($"Initializing Tech3C SDK...\n Client ID: {clientId}"); Tech3CSDK.Instance.Initialize(clientId, clientSecret); if (Tech3CSDK.Instance.IsInitialized) { Log("✓ SDK Initialized Successfully!"); } else { Log("✗ Failed to initialize SDK"); } } private void OnShowAuthClick() { if (!Tech3CSDK.Instance.IsInitialized) { Log("✗ SDK not initialized. Click Initialize first!"); return; } Log("Opening Auth Screen..."); Tech3CSDK.Instance.ShowAuth(authCallback); } private void OnLogoutClick() { if (!Tech3CSDK.Instance.IsInitialized) { Log("✗ SDK not initialized."); return; } Log("Logging out..."); Tech3CSDK.Instance.Logout(logoutCallback); } #endregion #region UI Helper Methods private Button CreateButton(Transform parent, string text, float width, float height) { GameObject buttonGO = new GameObject(text.Replace(" ", "_")); buttonGO.transform.SetParent(parent, false); RectTransform rect = buttonGO.AddComponent(); rect.sizeDelta = new Vector2(width, height); Image image = buttonGO.AddComponent(); image.color = new Color(0.3f, 0.5f, 0.8f, 1f); Button button = buttonGO.AddComponent