123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- using System;
- using System.Collections.Generic;
- using UnityEngine.Analytics;
- using UnityEngine;
- using UnityEngine.U2D;
- using UnityEngine.Events;
-
- namespace UnityEditor.U2D
- {
-
- internal class SpriteShapeAnalyticsEvents
- {
- public class SpriteShapeEvent : UnityEvent<UnityEngine.U2D.SpriteShape> { }
- public class SpriteShapeRendererEvent : UnityEvent<SpriteShapeRenderer> { }
-
- private SpriteShapeEvent m_SpriteShape = new SpriteShapeEvent();
- private SpriteShapeRendererEvent m_SpriteShapeRenderer = new SpriteShapeRendererEvent();
-
- public virtual SpriteShapeEvent spriteShapeEvent { get { return m_SpriteShape; } }
- public virtual SpriteShapeRendererEvent spriteShapeRendererEvent { get { return m_SpriteShapeRenderer; } }
- }
-
- [Serializable]
- enum SpriteShapeAnalyticsEventType
- {
- SpriteShapeProfileCreated = 0,
- SpriteShapeRendererCreated = 1
- }
-
- [Serializable]
- struct SpriteShapeAnalyticsEvent
- {
- [SerializeField]
- public SpriteShapeAnalyticsEventType sub_type;
- [SerializeField]
- public string data;
- }
-
- internal interface ISpriteShapeAnalyticsStorage
- {
- AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt);
- void Dispose();
- }
-
- internal static class SpriteShapeAnalyticConstant
- {
- public const int k_MaxEventsPerHour = 1000;
- public const int k_MaxNumberOfElements = 1000;
- }
-
- [Serializable]
- internal class SpriteShapeAnalytics
- {
- const int k_SpriteShapeEventElementCount = 2;
- ISpriteShapeAnalyticsStorage m_AnalyticsStorage;
- [SerializeField]
- SpriteShapeAnalyticsEvents m_EventBus = null;
-
- internal SpriteShapeAnalyticsEvents eventBus
- {
- get
- {
- if (m_EventBus == null)
- m_EventBus = new SpriteShapeAnalyticsEvents();
- return m_EventBus;
- }
- }
-
- public SpriteShapeAnalytics(ISpriteShapeAnalyticsStorage analyticsStorage)
- {
- m_AnalyticsStorage = analyticsStorage;
- eventBus.spriteShapeEvent.AddListener(OnSpriteShapeCreated);
- eventBus.spriteShapeRendererEvent.AddListener(OnSpriteShapeRendererCreated);
- }
-
- public void Dispose()
- {
- eventBus.spriteShapeEvent.RemoveListener(OnSpriteShapeCreated);
- eventBus.spriteShapeRendererEvent.RemoveListener(OnSpriteShapeRendererCreated);
- m_AnalyticsStorage.Dispose();
- }
-
- void OnSpriteShapeCreated(UnityEngine.U2D.SpriteShape shape)
- {
- SendUsageEvent(new SpriteShapeAnalyticsEvent()
- {
- sub_type = SpriteShapeAnalyticsEventType.SpriteShapeProfileCreated,
- data = ""
- });
- }
-
- void OnSpriteShapeRendererCreated(SpriteShapeRenderer renderer)
- {
- SendUsageEvent(new SpriteShapeAnalyticsEvent()
- {
- sub_type = SpriteShapeAnalyticsEventType.SpriteShapeRendererCreated,
- data = ""
- });
- }
-
- public void SendUsageEvent(SpriteShapeAnalyticsEvent evt)
- {
- m_AnalyticsStorage.SendUsageEvent(evt);
- }
-
- }
-
- // For testing.
- internal class SpriteShapeJsonAnalyticsStorage : ISpriteShapeAnalyticsStorage
- {
- [Serializable]
- struct SpriteShapeToolEvents
- {
- [SerializeField]
- public List<SpriteShapeAnalyticsEvent> events;
- }
-
- SpriteShapeToolEvents m_TotalEvents = new SpriteShapeToolEvents()
- {
- events = new List<SpriteShapeAnalyticsEvent>()
- };
-
- public AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt)
- {
- m_TotalEvents.events.Add(evt);
- return AnalyticsResult.Ok;
- }
-
- public void Dispose()
- {
- try
- {
- string file = string.Format("analytics_{0}.json", System.DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss"));
- if (System.IO.File.Exists(file))
- System.IO.File.Delete(file);
- System.IO.File.WriteAllText(file, JsonUtility.ToJson(m_TotalEvents, true));
- }
- catch (Exception ex)
- {
- Debug.Log(ex);
- }
- finally
- {
- m_TotalEvents.events.Clear();
- }
- }
- }
-
- [InitializeOnLoad]
- internal class SpriteShapeUnityAnalyticsStorage : ISpriteShapeAnalyticsStorage
- {
- const string k_VendorKey = "unity.2d.spriteshape";
- const int k_Version = 1;
-
- public SpriteShapeUnityAnalyticsStorage()
- {
- EditorAnalytics.RegisterEventWithLimit("u2dSpriteShapeToolUsage", SpriteShapeAnalyticConstant.k_MaxEventsPerHour, SpriteShapeAnalyticConstant.k_MaxNumberOfElements, k_VendorKey, k_Version);
- }
-
- public AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt)
- {
- return EditorAnalytics.SendEventWithLimit("u2dSpriteShapeToolUsage", evt, k_Version);
- }
-
- public void Dispose() { }
- }
-
- }
|