using System; using UnityEditor; using UnityEngine; using UnityEngine.Analytics; namespace Unity.VisualScripting.Analytics { internal static class OnPreprocessBuildAnalytics { private const int MaxEventsPerHour = 120; private const int MaxNumberOfElements = 1000; private const string VendorKey = "unity.visualscripting"; private const string EventName = "VScriptOnPreprocessBuild"; #if !UNITY_2023_2_OR_NEWER private static bool _isRegistered = false; #endif #if UNITY_2023_2_OR_NEWER internal static void Send(Data data) { if (!EditorAnalytics.enabled) return; EditorAnalytics.SendAnalytic(new OnPreprocessBuildAnalytic(data)); } #else internal static void Send(Data data) { if (!EditorAnalytics.enabled) return; if (!RegisterEvent()) return; EditorAnalytics.SendEventWithLimit(EventName, data); } private static bool RegisterEvent() { if (!_isRegistered) { var result = EditorAnalytics.RegisterEventWithLimit(EventName, MaxEventsPerHour, MaxNumberOfElements, VendorKey); if (result == UnityEngine.Analytics.AnalyticsResult.Ok) { _isRegistered = true; } } return _isRegistered; } #endif #if UNITY_2023_2_OR_NEWER [AnalyticInfo(eventName: EventName, vendorKey: VendorKey, maxEventsPerHour:MaxEventsPerHour, maxNumberOfElements:MaxNumberOfElements)] class OnPreprocessBuildAnalytic : IAnalytic { private Data data; public OnPreprocessBuildAnalytic(Data data) { this.data = data; } public bool TryGatherData(out IAnalytic.IData data, out Exception error) { error = null; data = this.data; return data != null; } } [Serializable] internal struct Data : IAnalytic.IData #else [Serializable] internal struct Data #endif { [SerializeField] internal string guid; [SerializeField] internal BuildTarget buildTarget; [SerializeField] internal BuildTargetGroup buildTargetGroup; } } }