ZibraEffectsAnalytics.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. #if UNITY_EDITOR
  2. using System;
  3. using UnityEditor;
  4. using UnityEditor.Build;
  5. using UnityEditor.Build.Reporting;
  6. using UnityEngine;
  7. using UnityEngine.Networking;
  8. using com.zibra.common.Utilities;
  9. using com.zibra.common.Editor.SDFObjects;
  10. using com.zibra.common.Editor;
  11. namespace com.zibra.common.Analytics
  12. {
  13. [InitializeOnLoad]
  14. internal static class ZibraEffectsAnalytics
  15. {
  16. const int REPORT_PERIOD = 12 * 60 * 60; // 12 hours
  17. const string ENGINE = "Unity";
  18. const int TRACKING_VERSION = 3;
  19. const int FRAME_UPDATE_PERIOD = 15 * 60 * 30; // 15 minutes if FPS = 30
  20. const int SESSION_TIMEOUT = 15 * 60; // 15 minutes
  21. public static void TrackBuiltPlatform(string builtPlatform)
  22. {
  23. EditorPrefs.SetBool($"ZibraEffectsTracking_Common_Built{builtPlatform}", true);
  24. }
  25. public static void TrackConfiguration(string effect)
  26. {
  27. EditorPrefs.SetBool("ZibraEffectsTracking_" + effect + "_Configured", true);
  28. string sessionKeyName = "ZibraEffectsTracking_" + effect + "_LastActivity";
  29. string prefsKeyName = "ZibraEffectsTracking_" + effect + "_SessionTime";
  30. int currentTime = GetCurrentTimeAsUnixTimestamp();
  31. int lastActivity = SessionState.GetInt(sessionKeyName, currentTime);
  32. if (currentTime - lastActivity < SESSION_TIMEOUT)
  33. {
  34. int oldSessionTime = EditorPrefs.GetInt(prefsKeyName, 0);
  35. EditorPrefs.SetInt(prefsKeyName, oldSessionTime + currentTime - lastActivity);
  36. }
  37. SessionState.SetInt(sessionKeyName, currentTime);
  38. }
  39. public static void CheckSendPeriod()
  40. {
  41. int dateNow = GetCurrentTimeAsUnixTimestamp();
  42. if (!EditorPrefs.HasKey("ZibraEffectsTracking_Common_LastSentDate"))
  43. {
  44. EditorPrefs.SetInt("ZibraEffectsTracking_Common_LastSentDate", dateNow);
  45. return;
  46. }
  47. int lastSentDate = EditorPrefs.GetInt("ZibraEffectsTracking_Common_LastSentDate");
  48. if (dateNow - lastSentDate > REPORT_PERIOD)
  49. {
  50. ZibraEffectsAnalyticsStruct data = GetAnalyticsData();
  51. string jsonData = JsonUtility.ToJson(data);
  52. ZibraEffectsAnalyticsSender.SendAnalyticsData(jsonData);
  53. }
  54. }
  55. static int FrameCount = FRAME_UPDATE_PERIOD;
  56. private static void Update()
  57. {
  58. if (FrameCount == FRAME_UPDATE_PERIOD)
  59. {
  60. FrameCount = 0;
  61. CheckSendPeriod();
  62. }
  63. else
  64. {
  65. FrameCount++;
  66. }
  67. }
  68. [InitializeOnLoadMethod]
  69. private static void OnLoad()
  70. {
  71. // Don't track something that is potentially build-machine
  72. if (Application.isBatchMode)
  73. {
  74. return;
  75. }
  76. EditorApplication.update += Update;
  77. }
  78. // Structure used with JSON parser
  79. private struct ZibraEffectsAnalyticsStruct
  80. {
  81. // Common
  82. public int TrackingVersion;
  83. public string LicenseKeys;
  84. public string HardwareId;
  85. public string PluginSKU;
  86. public string Engine;
  87. public string VersionNumber;
  88. public string DeveloperOS;
  89. public string EditorsGraphicsAPI;
  90. public string EngineVersion;
  91. public string RenderPipeline;
  92. public bool BuiltPlatformWindows;
  93. public bool BuiltPlatformMacOS;
  94. public bool BuiltPlatformLinux;
  95. public bool BuiltPlatformUWP;
  96. public bool BuiltPlatformAndroid;
  97. public bool BuiltPlatformiOS;
  98. // SDFs
  99. public bool SDF_Configured;
  100. public int SDF_SessionTime;
  101. // Liquid
  102. public bool Liquids_Available;
  103. public bool Liquids_Used;
  104. public bool Liquids_Configured;
  105. public int Liquids_SessionTime;
  106. public bool Liquids_MeshRenderUsed;
  107. public bool Liquids_OmniRenderUsed;
  108. public bool Liquids_UnityRenderUsed;
  109. public bool Liquids_RenderDownscaleUsed;
  110. public int Liquids_MinGridNodesUsed;
  111. public int Liquids_MaxGridNodesUsed;
  112. public int Liquids_MinMaxParticleCount;
  113. public int Liquids_MaxMaxParticleCount;
  114. public int Liquids_MinGridResolutionUsed;
  115. public int Liquids_MaxGridResolutionUsed;
  116. public bool Liquids_ManipulatorEmitterAnalytic;
  117. public bool Liquids_ManipulatorEmitterNeural;
  118. public bool Liquids_ManipulatorEmitterSkinnedMesh;
  119. public bool Liquids_ManipulatorVoidAnalytic;
  120. public bool Liquids_ManipulatorVoidNeural;
  121. public bool Liquids_ManipulatorVoidSkinnedMesh;
  122. public bool Liquids_ManipulatorForceFieldAnalytic;
  123. public bool Liquids_ManipulatorForceFieldNeural;
  124. public bool Liquids_ManipulatorForceFieldSkinnedMesh;
  125. public bool Liquids_ManipulatorColliderAnalytic;
  126. public bool Liquids_ManipulatorColliderNeural;
  127. public bool Liquids_ManipulatorColliderSkinnedMesh;
  128. public bool Liquids_ManipulatorDetectorAnalytic;
  129. public bool Liquids_ManipulatorDetectorNeural;
  130. public bool Liquids_ManipulatorDetectorSkinnedMesh;
  131. public bool Liquids_ManipulatorSpeciesModifierAnalytic;
  132. public bool Liquids_ManipulatorSpeciesModifierNeural;
  133. public bool Liquids_ManipulatorSpeciesModifierSkinnedMesh;
  134. public bool Liquids_InitialBakedStateUsed;
  135. public bool Liquids_InitialBakedStateSaved;
  136. // Smoke & Fire
  137. public bool SmokeAndFire_Available;
  138. public bool SmokeAndFire_Used;
  139. public bool SmokeAndFire_Configured;
  140. public int SmokeAndFire_SessionTime;
  141. public bool SmokeAndFire_RenderDownscaleUsed;
  142. public bool SmokeAndFire_SimulationModeSmokeUsed;
  143. public bool SmokeAndFire_SimulationModeColoredSmokeUsed;
  144. public bool SmokeAndFire_SimulationModeFireUsed;
  145. public int SmokeAndFire_MinGridResolutionUsed;
  146. public int SmokeAndFire_MaxGridResolutionUsed;
  147. public int SmokeAndFire_MinGridNodesUsed;
  148. public int SmokeAndFire_MaxGridNodesUsed;
  149. public bool SmokeAndFire_ManipulatorEmitterAnalytic;
  150. public bool SmokeAndFire_ManipulatorEmitterNeural;
  151. public bool SmokeAndFire_ManipulatorEmitterSkinnedMesh;
  152. public bool SmokeAndFire_ManipulatorVoidAnalytic;
  153. public bool SmokeAndFire_ManipulatorVoidNeural;
  154. public bool SmokeAndFire_ManipulatorVoidSkinnedMesh;
  155. public bool SmokeAndFire_ManipulatorColliderAnalytic;
  156. public bool SmokeAndFire_ManipulatorColliderNeural;
  157. public bool SmokeAndFire_ManipulatorColliderSkinnedMesh;
  158. public bool SmokeAndFire_ManipulatorDetectorAnalytic;
  159. public bool SmokeAndFire_ManipulatorDetectorNeural;
  160. public bool SmokeAndFire_ManipulatorDetectorSkinnedMesh;
  161. public bool SmokeAndFire_ManipulatorEffectParticleEmitterrAnalytic;
  162. public bool SmokeAndFire_ManipulatorEffectParticleEmitterNeural;
  163. public bool SmokeAndFire_ManipulatorEffectParticleEmitterSkinnedMesh;
  164. public bool SmokeAndFire_ManipulatorTextureEmitterAnalytic;
  165. public bool SmokeAndFire_ManipulatorTextureEmitterNeural;
  166. public bool SmokeAndFire_ManipulatorTextureEmitterSkinnedMesh;
  167. public bool SmokeAndFire_ManipulatorForceFieldAnalytic;
  168. public bool SmokeAndFire_ManipulatorForceFieldNeural;
  169. public bool SmokeAndFire_ManipulatorForceFieldSkinnedMesh;
  170. }
  171. private static ZibraEffectsAnalyticsStruct GetAnalyticsData()
  172. {
  173. ZibraEffectsAnalyticsStruct data = new ZibraEffectsAnalyticsStruct();
  174. // Common
  175. data.LicenseKeys = String.Join(",", ServerAuthManager.GetInstance().PluginLicenseKeys);
  176. data.HardwareId = PluginManager.GetHardwareID();
  177. #if ZIBRA_EFFECTS_OTP_VERSION
  178. data.PluginSKU = "OTP";
  179. #else
  180. data.PluginSKU = "Pro";
  181. #endif
  182. data.Engine = ENGINE;
  183. data.TrackingVersion = TRACKING_VERSION;
  184. data.VersionNumber = Effects.Version;
  185. data.DeveloperOS = SystemInfo.operatingSystemFamily.ToString();
  186. data.EditorsGraphicsAPI = SystemInfo.graphicsDeviceType.ToString();
  187. data.EngineVersion = Application.unityVersion.ToString();
  188. data.RenderPipeline = RenderPipelineDetector.GetRenderPipelineType().ToString();
  189. data.BuiltPlatformWindows = EditorPrefs.GetBool("ZibraEffectsTracking_Common_BuiltWindows", false);
  190. data.BuiltPlatformLinux = EditorPrefs.GetBool("ZibraEffectsTracking_Common_BuiltLinux", false);
  191. data.BuiltPlatformMacOS = EditorPrefs.GetBool("ZibraEffectsTracking_Common_BuiltMacOS", false);
  192. data.BuiltPlatformUWP = EditorPrefs.GetBool("ZibraEffectsTracking_Common_BuiltUWP", false);
  193. data.BuiltPlatformAndroid = EditorPrefs.GetBool("ZibraEffectsTracking_Common_BuiltAndroid", false);
  194. data.BuiltPlatformiOS = EditorPrefs.GetBool("ZibraEffectsTracking_Common_BuiltIOS", false);
  195. // SDF
  196. data.SDF_Configured = EditorPrefs.GetBool("ZibraEffectsTracking_SDF_Configured", false);
  197. data.SDF_SessionTime = EditorPrefs.GetInt("ZibraEffectsTracking_SDF_SessionTime", 0);
  198. // Liquid
  199. data.Liquids_Available = PluginManager.IsAvailable(PluginManager.Effect.Liquid);
  200. data.Liquids_Used = EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_Used", false);
  201. data.Liquids_Configured = EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_Configured", false);
  202. data.Liquids_SessionTime = EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_SessionTime", 0);
  203. data.Liquids_MeshRenderUsed = EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_MeshRendererUsed", false);
  204. data.Liquids_UnityRenderUsed = EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_UnityRendererUsed", false);
  205. data.Liquids_OmniRenderUsed = EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_OmniRendererUsed", false);
  206. data.Liquids_RenderDownscaleUsed =
  207. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_RenderDownscaleUsed", false);
  208. data.Liquids_MinGridNodesUsed =
  209. EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_MinNodeCount", int.MaxValue);
  210. data.Liquids_MaxGridNodesUsed = EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_MaxNodeCount", 0);
  211. data.Liquids_MinMaxParticleCount =
  212. EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_MinMaxParticleCount", int.MaxValue);
  213. data.Liquids_MaxMaxParticleCount =
  214. EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_MaxMaxParticleCount", 0);
  215. data.Liquids_MinGridResolutionUsed =
  216. EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_MinGridResolution", int.MaxValue);
  217. data.Liquids_MaxGridResolutionUsed =
  218. EditorPrefs.GetInt("ZibraEffectsTracking_Liquids_MaxGridResolution", 0);
  219. data.Liquids_ManipulatorEmitterAnalytic =
  220. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorEmitterAnalyticSDF", false);
  221. data.Liquids_ManipulatorEmitterNeural =
  222. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorEmitterNeuralSDF", false);
  223. data.Liquids_ManipulatorEmitterSkinnedMesh =
  224. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorEmitterSkinnedMeshSDF", false);
  225. data.Liquids_ManipulatorVoidAnalytic =
  226. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorVoidAnalyticSDF", false);
  227. data.Liquids_ManipulatorVoidNeural =
  228. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorVoidNeuralSDF", false);
  229. data.Liquids_ManipulatorVoidSkinnedMesh =
  230. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorVoidSkinnedMeshSDF", false);
  231. data.Liquids_ManipulatorForceFieldAnalytic =
  232. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorForceFieldAnalyticSDF", false);
  233. data.Liquids_ManipulatorForceFieldNeural =
  234. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorForceFieldNeuralSDF", false);
  235. data.Liquids_ManipulatorForceFieldSkinnedMesh =
  236. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorForceFieldSkinnedMeshSDF", false);
  237. data.Liquids_ManipulatorColliderAnalytic =
  238. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorColliderAnalyticSDF", false);
  239. data.Liquids_ManipulatorColliderNeural =
  240. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorColliderNeuralSDF", false);
  241. data.Liquids_ManipulatorColliderSkinnedMesh =
  242. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorColliderSkinnedMeshSDF", false);
  243. data.Liquids_ManipulatorDetectorAnalytic =
  244. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorDetectorAnalyticSDF", false);
  245. data.Liquids_ManipulatorDetectorNeural =
  246. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorDetectorNeuralSDF", false);
  247. data.Liquids_ManipulatorDetectorSkinnedMesh =
  248. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorDetectorSkinnedMeshSDF", false);
  249. data.Liquids_ManipulatorSpeciesModifierAnalytic =
  250. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorSpeciesModifierAnalyticSDF", false);
  251. data.Liquids_ManipulatorSpeciesModifierNeural =
  252. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorSpeciesModifierNeuralSDF", false);
  253. data.Liquids_ManipulatorSpeciesModifierSkinnedMesh =
  254. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_ManipulatorSpeciesModifierSkinnedMeshSDF", false);
  255. data.Liquids_InitialBakedStateUsed =
  256. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_BakedStateUsed", false);
  257. data.Liquids_InitialBakedStateSaved =
  258. EditorPrefs.GetBool("ZibraEffectsTracking_Liquids_Liquids_BakedStateSaved", false);
  259. // Smoke & Fire
  260. data.SmokeAndFire_Available = PluginManager.IsAvailable(PluginManager.Effect.Smoke);
  261. data.SmokeAndFire_Used = EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_Used", false);
  262. data.SmokeAndFire_Configured = EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_Configured", false);
  263. data.SmokeAndFire_SessionTime = EditorPrefs.GetInt("ZibraEffectsTracking_SmokeAndFire_SessionTime", 0);
  264. data.SmokeAndFire_RenderDownscaleUsed =
  265. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_RenderDownscaleUsed", false);
  266. data.SmokeAndFire_SimulationModeSmokeUsed =
  267. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_SimulationModeSmokeUsed", false);
  268. data.SmokeAndFire_SimulationModeColoredSmokeUsed =
  269. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_SimulationModeColoredSmokeUsed", false);
  270. data.SmokeAndFire_SimulationModeFireUsed =
  271. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_SimulationModeFireUsed", false);
  272. data.SmokeAndFire_MinGridResolutionUsed =
  273. EditorPrefs.GetInt("ZibraEffectsTracking_SmokeAndFire_MinGridResolution", int.MaxValue);
  274. data.SmokeAndFire_MaxGridResolutionUsed =
  275. EditorPrefs.GetInt("ZibraEffectsTracking_SmokeAndFire_MaxGridResolution", 0);
  276. data.SmokeAndFire_MinGridNodesUsed =
  277. EditorPrefs.GetInt("ZibraEffectsTracking_SmokeAndFire_MinNodeCount", int.MaxValue);
  278. data.SmokeAndFire_MaxGridNodesUsed =
  279. EditorPrefs.GetInt("ZibraEffectsTracking_SmokeAndFire_MaxNodeCount", 0);
  280. data.SmokeAndFire_ManipulatorEmitterAnalytic =
  281. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorEmitterAnalyticSDF", false);
  282. data.SmokeAndFire_ManipulatorEmitterNeural =
  283. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorEmitterNeuralSDF", false);
  284. data.SmokeAndFire_ManipulatorEmitterSkinnedMesh =
  285. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorEmitterSkinnedMeshSDF", false);
  286. data.SmokeAndFire_ManipulatorVoidAnalytic =
  287. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorVoidAnalyticSDF", false);
  288. data.SmokeAndFire_ManipulatorVoidNeural =
  289. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorVoidNeuralSDF", false);
  290. data.SmokeAndFire_ManipulatorVoidSkinnedMesh =
  291. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorVoidSkinnedMeshSDF", false);
  292. data.SmokeAndFire_ManipulatorColliderAnalytic =
  293. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorColliderAnalyticSDF", false);
  294. data.SmokeAndFire_ManipulatorColliderNeural =
  295. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorColliderNeuralSDF", false);
  296. data.SmokeAndFire_ManipulatorColliderSkinnedMesh =
  297. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorColliderSkinnedMeshSDF", false);
  298. data.SmokeAndFire_ManipulatorDetectorAnalytic =
  299. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorDetectorAnalyticSDF", false);
  300. data.SmokeAndFire_ManipulatorDetectorNeural =
  301. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorDetectorNeuralSDF", false);
  302. data.SmokeAndFire_ManipulatorDetectorSkinnedMesh =
  303. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorDetectorSkinnedMeshSDF", false);
  304. data.SmokeAndFire_ManipulatorEffectParticleEmitterrAnalytic = EditorPrefs.GetBool(
  305. "ZibraEffectsTracking_SmokeAndFire_ManipulatorEffectParticleEmitterrAnalyticSDF", false);
  306. data.SmokeAndFire_ManipulatorEffectParticleEmitterNeural = EditorPrefs.GetBool(
  307. "ZibraEffectsTracking_SmokeAndFire_ManipulatorEffectParticleEmitterNeuralSDF", false);
  308. data.SmokeAndFire_ManipulatorEffectParticleEmitterSkinnedMesh = EditorPrefs.GetBool(
  309. "ZibraEffectsTracking_SmokeAndFire_ManipulatorEffectParticleEmitterSkinnedMeshSDF", false);
  310. data.SmokeAndFire_ManipulatorTextureEmitterAnalytic =
  311. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorTextureEmitterAnalyticSDF", false);
  312. data.SmokeAndFire_ManipulatorTextureEmitterNeural =
  313. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorTextureEmitterNeuralSDF", false);
  314. data.SmokeAndFire_ManipulatorTextureEmitterSkinnedMesh =
  315. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorTextureEmitterSkinnedMeshSDF", false);
  316. data.SmokeAndFire_ManipulatorForceFieldAnalytic =
  317. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorForceFieldAnalyticSDF", false);
  318. data.SmokeAndFire_ManipulatorForceFieldNeural =
  319. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorForceFieldNeuralSDF", false);
  320. data.SmokeAndFire_ManipulatorForceFieldSkinnedMesh =
  321. EditorPrefs.GetBool("ZibraEffectsTracking_SmokeAndFire_ManipulatorForceFieldSkinnedMeshSDF", false);
  322. return data;
  323. }
  324. public static void CleanAnalyticData()
  325. {
  326. // Common
  327. EditorPrefs.DeleteKey("ZibraEffectsTracking_Common_BuiltWindows");
  328. EditorPrefs.DeleteKey("ZibraEffectsTracking_Common_BuiltMacOS");
  329. EditorPrefs.DeleteKey("ZibraEffectsTracking_Common_BuiltLinux");
  330. EditorPrefs.DeleteKey("ZibraEffectsTracking_Common_BuiltUWP");
  331. EditorPrefs.DeleteKey("ZibraEffectsTracking_Common_BuiltAndroid");
  332. EditorPrefs.DeleteKey("ZibraEffectsTracking_Common_BuiltIOS");
  333. // SDF
  334. EditorPrefs.DeleteKey("ZibraEffectsTracking_SDF_Configured");
  335. EditorPrefs.DeleteKey("ZibraEffectsTracking_SDF_SessionTime");
  336. SessionState.EraseInt("ZibraEffectsTracking_SDF_LastActivity");
  337. // Liquid
  338. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_Used");
  339. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_Configured");
  340. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_SessionTime");
  341. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MeshRendererUsed");
  342. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_UnityRendererUsed");
  343. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_OmniRendererUsed");
  344. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_RenderDownscaleUsed");
  345. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MinNodeCount");
  346. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MaxNodeCount");
  347. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MinMaxParticleCount");
  348. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MaxMaxParticleCount");
  349. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MinGridResolution");
  350. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_MaxGridResolution");
  351. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorEmitterAnalyticSDF");
  352. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorEmitterNeuralSDF");
  353. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorEmitterSkinnedMeshSDF");
  354. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorVoidAnalyticSDF");
  355. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorVoidNeuralSDF");
  356. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorVoidSkinnedMeshSDF");
  357. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorForceFieldAnalyticSDF");
  358. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorForceFieldNeuralSDF");
  359. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorForceFieldSkinnedMeshSDF");
  360. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorColliderAnalyticSDF");
  361. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorColliderrNeuralSDF");
  362. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorColliderSkinnedMeshSDF");
  363. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorDetectorAnalyticSDF");
  364. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorDetectorNeuralSDF");
  365. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorDetectorSkinnedMeshSDF");
  366. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorSpeciesModifierAnalyticSDF");
  367. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorSpeciesModifierNeuralSDF");
  368. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_ManipulatorSpeciesModifierSkinnedMeshSDF");
  369. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_BakedStateUsed");
  370. EditorPrefs.DeleteKey("ZibraEffectsTracking_Liquids_Liquids_BakedStateSaved");
  371. SessionState.EraseInt("ZibraEffectsTracking_Liquids_LastActivity");
  372. // Smoke & Fire
  373. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_Used");
  374. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_Configured");
  375. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_SessionTime");
  376. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_RenderDownscaleUsed");
  377. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_SimulationModeSmokeUsed");
  378. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_SimulationModeColoredSmokeUsed");
  379. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_SimulationModeFireUsed");
  380. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_MinGridResolution");
  381. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_MaxGridResolution");
  382. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_MinNodeCount");
  383. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_MaxNodeCount");
  384. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorEmitterAnalyticSDF");
  385. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorEmitterNeuralSDF");
  386. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorEmitterSkinnedMeshSDF");
  387. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorVoidAnalyticSDF");
  388. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorVoidNeuralSDF");
  389. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorVoidSkinnedMeshSDF");
  390. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorColliderAnalyticSDF");
  391. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorColliderrNeuralSDF");
  392. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorColliderSkinnedMeshSDF");
  393. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorDetectorAnalyticSDF");
  394. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorDetectorNeuralSDF");
  395. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorDetectorSkinnedMeshSDF");
  396. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorEffectParticleEmitterrAnalyticSDF");
  397. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorEffectParticleEmitterNeuralSDF");
  398. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorEffectParticleEmitterSkinnedMeshSDF");
  399. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorTextureEmitterAnalyticSDF");
  400. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorTextureEmitterNeuralSDF");
  401. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorTextureEmitterSkinnedMeshSDF");
  402. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorForceFieldAnalyticSDF");
  403. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorForceFieldNeuralSDF");
  404. EditorPrefs.DeleteKey("ZibraEffectsTracking_SmokeAndFire_ManipulatorForceFieldSkinnedMeshSDF");
  405. SessionState.EraseInt("ZibraEffectsTracking_SmokeAndFire_LastActivity");
  406. EditorPrefs.SetInt("ZibraEffectsTracking_Common_LastSentDate", GetCurrentTimeAsUnixTimestamp());
  407. }
  408. public static int GetCurrentTimeAsUnixTimestamp()
  409. {
  410. return (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
  411. }
  412. }
  413. internal class ZibraLiquidBuildPostProcessor : IPostprocessBuildWithReport
  414. {
  415. public int callbackOrder
  416. {
  417. get {
  418. return 0;
  419. }
  420. }
  421. public void OnPostprocessBuild(BuildReport report)
  422. {
  423. switch (report.summary.platform)
  424. {
  425. case BuildTarget.StandaloneOSX:
  426. ZibraEffectsAnalytics.TrackBuiltPlatform("MacOS");
  427. break;
  428. case BuildTarget.StandaloneWindows:
  429. case BuildTarget.StandaloneWindows64:
  430. ZibraEffectsAnalytics.TrackBuiltPlatform("Windows");
  431. break;
  432. case BuildTarget.iOS:
  433. ZibraEffectsAnalytics.TrackBuiltPlatform("IOS");
  434. break;
  435. case BuildTarget.Android:
  436. ZibraEffectsAnalytics.TrackBuiltPlatform("Android");
  437. break;
  438. case BuildTarget.WSAPlayer:
  439. ZibraEffectsAnalytics.TrackBuiltPlatform("UWP");
  440. break;
  441. case BuildTarget.StandaloneLinux64:
  442. ZibraEffectsAnalytics.TrackBuiltPlatform("Linux");
  443. break;
  444. }
  445. }
  446. }
  447. internal static class ZibraEffectsAnalyticsSender
  448. {
  449. const string ANALYTIC_API_URL = "https://analytics.zibra.ai/api/pluginUsageAnalytics";
  450. const int SUCCESS_CODE = 201;
  451. private static UnityWebRequestAsyncOperation request;
  452. public static void SendAnalyticsData(string jsonData)
  453. {
  454. if (request != null)
  455. {
  456. return;
  457. }
  458. #if UNITY_2022_2_OR_NEWER
  459. request = UnityWebRequest.PostWwwForm(ANALYTIC_API_URL, jsonData).SendWebRequest();
  460. #else
  461. request = UnityWebRequest.Post(ANALYTIC_API_URL, jsonData).SendWebRequest();
  462. #endif
  463. request.completed += UpdateRequest;
  464. }
  465. private static void UpdateRequest(AsyncOperation obj)
  466. {
  467. if (request == null || !request.isDone)
  468. {
  469. return;
  470. }
  471. #if UNITY_2020_2_OR_NEWER
  472. if (request.webRequest.result != UnityWebRequest.Result.Success)
  473. #else
  474. if (request.webRequest.isHttpError || request.webRequest.isNetworkError)
  475. #endif
  476. {
  477. request.webRequest.Dispose();
  478. request = null;
  479. return;
  480. }
  481. if (request.webRequest.responseCode != SUCCESS_CODE)
  482. {
  483. request.webRequest.Dispose();
  484. request = null;
  485. return;
  486. }
  487. ZibraEffectsAnalytics.CleanAnalyticData();
  488. request.webRequest.Dispose();
  489. request = null;
  490. }
  491. }
  492. }
  493. #endif