Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine.Analytics;
  4. using UnityEngine;
  5. using UnityEngine.U2D;
  6. using UnityEngine.Events;
  7. namespace UnityEditor.U2D
  8. {
  9. internal class SpriteShapeAnalyticsEvents
  10. {
  11. public class SpriteShapeEvent : UnityEvent<UnityEngine.U2D.SpriteShape> { }
  12. public class SpriteShapeRendererEvent : UnityEvent<SpriteShapeRenderer> { }
  13. private SpriteShapeEvent m_SpriteShape = new SpriteShapeEvent();
  14. private SpriteShapeRendererEvent m_SpriteShapeRenderer = new SpriteShapeRendererEvent();
  15. public virtual SpriteShapeEvent spriteShapeEvent { get { return m_SpriteShape; } }
  16. public virtual SpriteShapeRendererEvent spriteShapeRendererEvent { get { return m_SpriteShapeRenderer; } }
  17. }
  18. [Serializable]
  19. enum SpriteShapeAnalyticsEventType
  20. {
  21. SpriteShapeProfileCreated = 0,
  22. SpriteShapeRendererCreated = 1
  23. }
  24. [Serializable]
  25. struct SpriteShapeAnalyticsEvent
  26. {
  27. [SerializeField]
  28. public SpriteShapeAnalyticsEventType sub_type;
  29. [SerializeField]
  30. public string data;
  31. }
  32. internal interface ISpriteShapeAnalyticsStorage
  33. {
  34. AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt);
  35. void Dispose();
  36. }
  37. internal static class SpriteShapeAnalyticConstant
  38. {
  39. public const int k_MaxEventsPerHour = 1000;
  40. public const int k_MaxNumberOfElements = 1000;
  41. }
  42. [Serializable]
  43. internal class SpriteShapeAnalytics
  44. {
  45. const int k_SpriteShapeEventElementCount = 2;
  46. ISpriteShapeAnalyticsStorage m_AnalyticsStorage;
  47. [SerializeField]
  48. SpriteShapeAnalyticsEvents m_EventBus = null;
  49. internal SpriteShapeAnalyticsEvents eventBus
  50. {
  51. get
  52. {
  53. if (m_EventBus == null)
  54. m_EventBus = new SpriteShapeAnalyticsEvents();
  55. return m_EventBus;
  56. }
  57. }
  58. public SpriteShapeAnalytics(ISpriteShapeAnalyticsStorage analyticsStorage)
  59. {
  60. m_AnalyticsStorage = analyticsStorage;
  61. eventBus.spriteShapeEvent.AddListener(OnSpriteShapeCreated);
  62. eventBus.spriteShapeRendererEvent.AddListener(OnSpriteShapeRendererCreated);
  63. }
  64. public void Dispose()
  65. {
  66. eventBus.spriteShapeEvent.RemoveListener(OnSpriteShapeCreated);
  67. eventBus.spriteShapeRendererEvent.RemoveListener(OnSpriteShapeRendererCreated);
  68. m_AnalyticsStorage.Dispose();
  69. }
  70. void OnSpriteShapeCreated(UnityEngine.U2D.SpriteShape shape)
  71. {
  72. SendUsageEvent(new SpriteShapeAnalyticsEvent()
  73. {
  74. sub_type = SpriteShapeAnalyticsEventType.SpriteShapeProfileCreated,
  75. data = ""
  76. });
  77. }
  78. void OnSpriteShapeRendererCreated(SpriteShapeRenderer renderer)
  79. {
  80. SendUsageEvent(new SpriteShapeAnalyticsEvent()
  81. {
  82. sub_type = SpriteShapeAnalyticsEventType.SpriteShapeRendererCreated,
  83. data = ""
  84. });
  85. }
  86. public void SendUsageEvent(SpriteShapeAnalyticsEvent evt)
  87. {
  88. m_AnalyticsStorage.SendUsageEvent(evt);
  89. }
  90. }
  91. // For testing.
  92. internal class SpriteShapeJsonAnalyticsStorage : ISpriteShapeAnalyticsStorage
  93. {
  94. [Serializable]
  95. struct SpriteShapeToolEvents
  96. {
  97. [SerializeField]
  98. public List<SpriteShapeAnalyticsEvent> events;
  99. }
  100. SpriteShapeToolEvents m_TotalEvents = new SpriteShapeToolEvents()
  101. {
  102. events = new List<SpriteShapeAnalyticsEvent>()
  103. };
  104. public AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt)
  105. {
  106. m_TotalEvents.events.Add(evt);
  107. return AnalyticsResult.Ok;
  108. }
  109. public void Dispose()
  110. {
  111. try
  112. {
  113. string file = string.Format("analytics_{0}.json", System.DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss"));
  114. if (System.IO.File.Exists(file))
  115. System.IO.File.Delete(file);
  116. System.IO.File.WriteAllText(file, JsonUtility.ToJson(m_TotalEvents, true));
  117. }
  118. catch (Exception ex)
  119. {
  120. Debug.Log(ex);
  121. }
  122. finally
  123. {
  124. m_TotalEvents.events.Clear();
  125. }
  126. }
  127. }
  128. [InitializeOnLoad]
  129. internal class SpriteShapeUnityAnalyticsStorage : ISpriteShapeAnalyticsStorage
  130. {
  131. const string k_VendorKey = "unity.2d.spriteshape";
  132. const int k_Version = 1;
  133. public SpriteShapeUnityAnalyticsStorage()
  134. {
  135. EditorAnalytics.RegisterEventWithLimit("u2dSpriteShapeToolUsage", SpriteShapeAnalyticConstant.k_MaxEventsPerHour, SpriteShapeAnalyticConstant.k_MaxNumberOfElements, k_VendorKey, k_Version);
  136. }
  137. public AnalyticsResult SendUsageEvent(SpriteShapeAnalyticsEvent evt)
  138. {
  139. return EditorAnalytics.SendEventWithLimit("u2dSpriteShapeToolUsage", evt, k_Version);
  140. }
  141. public void Dispose() { }
  142. }
  143. }