A game about forced loneliness, made by TACStudios
at master 150 lines 5.8 kB view raw
1using System; 2using System.Collections.Generic; 3using Unity.Multiplayer.Center.Common; 4using Unity.Multiplayer.Center.Common.Analytics; 5using UnityEditor; 6using UnityEngine; 7using UnityEngine.Analytics; 8 9namespace Unity.Multiplayer.Center.Analytics 10{ 11 /// <summary> 12 /// The interface for the Multiplayer Center Analytics provider (only one functional implementation, but the 13 /// interface is needed for testing purposes) 14 /// </summary> 15 internal interface IMultiplayerCenterAnalytics 16 { 17 void SendInstallationEvent(AnswerData data, Preset preset, Package[] packages); 18 void SendRecommendationEvent(AnswerData data, Preset preset); 19 void SendGettingStartedInteractionEvent(string targetPackageId, string sectionId, InteractionDataType type, string displayName); 20 } 21 22 /// <summary> 23 /// The concrete implementation of the multiplayer center analytics provider. 24 /// It convert 25 /// </summary> 26 internal class MultiplayerCenterAnalytics : IMultiplayerCenterAnalytics 27 { 28 const string k_VendorKey = "unity.multiplayer.center"; 29 const string k_InstallationEventName = "multiplayer_center_onInstallClicked"; 30 const string k_RecommendationEventName = "multiplayer_center_onRecommendation"; 31 const string k_GetStartedInteractionEventName = "multiplayer_center_onGetStartedInteraction"; 32 33 readonly string m_QuestionnaireVersion; 34 readonly IReadOnlyDictionary<string, string> m_AnswerIdToAnswerName; 35 readonly IReadOnlyDictionary<string, string> m_QuestionIdToQuestionName; 36 readonly string[] m_PresetFullNames = AnalyticsUtils.GetPresetFullNames(); 37 string PresetName(Preset v) => m_PresetFullNames[(int)v]; 38 39 GameSpec[] FillGameSpecs(AnswerData data) 40 { 41 return AnalyticsUtils.ToGameSpecs(data, m_AnswerIdToAnswerName, m_QuestionIdToQuestionName); 42 } 43 44 protected virtual void SendAnalytic(IAnalytic analytic) 45 { 46 EditorAnalytics.SendAnalytic(analytic); 47 } 48 49 public MultiplayerCenterAnalytics(string questionnaireVersion, IReadOnlyDictionary<string, string> questionDisplayNames, 50 IReadOnlyDictionary<string, string> answerDisplayNames) 51 { 52 m_QuestionnaireVersion = questionnaireVersion; 53 m_QuestionIdToQuestionName = questionDisplayNames; 54 m_AnswerIdToAnswerName = answerDisplayNames; 55 } 56 57 public void SendGettingStartedInteractionEvent(string targetPackageId, string sectionId, InteractionDataType type, string displayName) 58 { 59 var analytic = new GetStartedInteractionEventAnalytic(sectionId, type, displayName, targetPackageId); 60 SendAnalytic(analytic); 61 } 62 63 public void SendInstallationEvent(AnswerData data, Preset preset, Package[] packages) 64 { 65 var analytic = new InstallationEventAnalytic(new InstallData() 66 { 67 Preset = (int)preset, 68 PresetName = PresetName(preset), 69 QuestionnaireVersion = m_QuestionnaireVersion, 70 GamesSpecs = FillGameSpecs(data), 71 Packages = packages 72 }); 73 SendAnalytic(analytic); 74 } 75 76 public void SendRecommendationEvent(AnswerData data, Preset preset) 77 { 78 var analytic = new RecommendationEventAnalytic(new RecommendationData() 79 { 80 Preset = (int)preset, 81 PresetName = PresetName(preset), 82 QuestionnaireVersion = m_QuestionnaireVersion, 83 GameSpecs = FillGameSpecs(data) 84 }); 85 SendAnalytic(analytic); 86 } 87 88 [AnalyticInfo(eventName: k_InstallationEventName, vendorKey: k_VendorKey)] 89 private class InstallationEventAnalytic : IAnalytic 90 { 91 InstallData m_Data; 92 93 public InstallationEventAnalytic(InstallData data) 94 { 95 m_Data = data; 96 } 97 98 /// <inheritdoc /> 99 public bool TryGatherData(out IAnalytic.IData data, out Exception error) 100 { 101 data = m_Data; 102 error = null; 103 return true; 104 } 105 } 106 107 [AnalyticInfo(eventName: k_RecommendationEventName, vendorKey: k_VendorKey)] 108 private class RecommendationEventAnalytic : IAnalytic 109 { 110 RecommendationData m_Data; 111 112 public RecommendationEventAnalytic(RecommendationData data) 113 { 114 m_Data = data; 115 } 116 117 public bool TryGatherData(out IAnalytic.IData data, out Exception error) 118 { 119 data = m_Data; 120 error = null; 121 return true; 122 } 123 } 124 125 [AnalyticInfo(eventName: k_GetStartedInteractionEventName, vendorKey: k_VendorKey)] 126 private class GetStartedInteractionEventAnalytic : IAnalytic 127 { 128 InteractionData m_Data; 129 130 public GetStartedInteractionEventAnalytic(string sectionId, InteractionDataType type, string displayName, string targetPackageId) 131 { 132 m_Data = new InteractionData() 133 { 134 SectionId = sectionId, 135 Type = type, 136 DisplayName = displayName, 137 TargetPackageId = targetPackageId 138 }; 139 } 140 141 /// <inheritdoc /> 142 public bool TryGatherData(out IAnalytic.IData data, out Exception error) 143 { 144 data = m_Data; 145 error = null; 146 return true; 147 } 148 } 149 } 150}