// Constructors
        public LogData(string buildVersion, CombatData combatData, long evtcLogDuration, List <Player> playerList, OperationController operation)
        {
            BuildVersion = buildVersion;
            double unixStart = 0;
            double unixEnd   = 0;
            //
            PointOfViewEvent povEvt = combatData.GetPointOfViewEvent();

            if (povEvt != null)
            {
                SetPOV(povEvt.PoV, playerList);
            }
            operation.UpdateProgressWithCancellationCheck("PoV " + PoVName);
            //
            BuildEvent buildEvt = combatData.GetBuildEvent();

            if (buildEvt != null)
            {
                GW2Version = buildEvt.Build;
            }
            operation.UpdateProgressWithCancellationCheck("GW2 Build " + GW2Version);
            //
            LanguageEvent langEvt = combatData.GetLanguageEvent();

            if (langEvt != null)
            {
                Language   = langEvt.ToString();
                LanguageID = langEvt.Language;
            }
            operation.UpdateProgressWithCancellationCheck("Language " + Language);
            //
            LogStartEvent logStr = combatData.GetLogStartEvent();

            if (logStr != null)
            {
                SetLogStart(logStr.LocalUnixTimeStamp);
                SetLogStartStd(logStr.LocalUnixTimeStamp);
                unixStart = logStr.LocalUnixTimeStamp;
            }
            //
            LogEndEvent logEnd = combatData.GetLogEndEvent();

            if (logEnd != null)
            {
                SetLogEnd(logEnd.LocalUnixTimeStamp);
                SetLogEndStd(logEnd.LocalUnixTimeStamp);
                unixEnd = logEnd.LocalUnixTimeStamp;
            }
            // log end event is missing, log start is present
            if (LogEnd == DefaultTimeValue && LogStart != DefaultTimeValue)
            {
                operation.UpdateProgressWithCancellationCheck("Missing Log End Event");
                double dur = Math.Round(evtcLogDuration / 1000.0, 3);
                SetLogEnd(dur + unixStart);
                SetLogEndStd(dur + unixStart);
            }
            // log start event is missing, log end is present
            if (LogEnd != DefaultTimeValue && LogStart == DefaultTimeValue)
            {
                operation.UpdateProgressWithCancellationCheck("Missing Log Start Event");
                double dur = Math.Round(evtcLogDuration / 1000.0, 3);
                SetLogStart(unixEnd - dur);
                SetLogStartStd(unixEnd - dur);
            }
            operation.UpdateProgressWithCancellationCheck("Log Start " + LogStartStd);
            operation.UpdateProgressWithCancellationCheck("Log End " + LogEndStd);
            //
            foreach (ErrorEvent evt in combatData.GetErrorEvents())
            {
                operation.UpdateProgressWithCancellationCheck("Error " + evt.Message);
                LogErrors.Add(evt.Message);
            }
        }
 /// <summary>
 /// 设置语言
 /// </summary>
 /// <param name="code"></param>
 public void SetLanguage(LanguageCode code)
 {
     LocalizatioCodeIndex = GetCodeIndex(code);
     PlayerPrefs.SetString(LocalizatioCode, code.ToString());
     LanguageEvent?.Invoke();
 }
 private void OnChangedLanguage(LanguageEvent evt)
 {
     view.CurrentLanguage = evt.LanguageKey;
 }