using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Analytics; namespace Unity.Multiplayer.Center.Analytics { /// /// Does the same as the MultiplayerCenterAnalytics, but logs the events to the console instead of sending them. /// It is useful to debug fast, without the EditorAnalytics Debugger package (but it does not replace it). /// internal class DebugAnalytics : MultiplayerCenterAnalytics { public DebugAnalytics(string questionnaireVersion, IReadOnlyDictionary questionDisplayNames, IReadOnlyDictionary answerDisplayNames) : base(questionnaireVersion, questionDisplayNames, answerDisplayNames) { } protected override void SendAnalytic(IAnalytic analytic) { analytic.TryGatherData(out var data, out var _); switch (data) { case InstallData installData: Debug.Log($"Event: {analytic.GetType()} - Data: {ToString(installData)}"); break; case RecommendationData recommendationData: Debug.Log($"Event: {analytic.GetType()} - Data: {ToString(recommendationData)}"); break; case InteractionData interactionEventAnalytic: Debug.Log($"Event: {analytic.GetType()} - Data: {ToString(interactionEventAnalytic)}"); break; default: Debug.Log($"Unknown event: {analytic.GetType()} - Data: {data}"); break; } } static string ToString(GameSpec p) => $"GameSpec [{p.QuestionText} -> {p.AnswerText}]"; static string ToString(Package p) => $"Package [{p.PackageId} - Selected {p.SelectedForInstall} - Reco {p.IsRecommended} - Inst {p.IsAlreadyInstalled}]"; static string ToString(InstallData data) { var packageStrings = new List(data.Packages.Length); foreach (var package in data.Packages) { packageStrings.Add(ToString(package)); } return $"{data.PresetName} - Packages [{data.Packages.Length}] packages: \n{string.Join("\n", packageStrings)}"; } static string ToString(RecommendationData data) { var gameSpecStrings = new List(data.GameSpecs.Length); foreach (var gameSpec in data.GameSpecs) { gameSpecStrings.Add(ToString(gameSpec)); } return $"{data.PresetName} - GameSpecs [{data.GameSpecs.Length}] gamespecs: \n{string.Join("\n", gameSpecStrings)}"; } static string ToString(InteractionData data) => $"{data.SectionId}({data.TargetPackageId}) - {data.Type} - {data.DisplayName}"; } }