public void UpdateRule(PlayerData playerData, RuleData ruleData) { UdemaeLabel.Content = playerData.Udemae[ruleData.RuleIndex][0]; RuleLabel.Content = ruleData.Name; if (playerData.Udemae[ruleData.RuleIndex] != "X") { XPowerLabel.Content = playerData.Udemae[ruleData.RuleIndex].Substring(1); } else if (playerData.XPower[ruleData.RuleIndex] == 0) { XPowerLabel.Content = "Calculating"; } XPowerLabel.Margin = new Thickness(90, 35, 0, 0); XPowerSubtractLabel.Margin = new Thickness(370, 91, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(0xE2, 0x56, 0x2C)); XPowerSubtractLabel.Content = ""; PaintPointLabel.Content = ""; KALabelN.Content = "0(0)"; DLabelN.Content = "0"; KDLabelN.Content = "0.00"; }
public async Task <bool> TryInitializePlayerData() { SplatNet2DataStructure.Records.PersonalRecords.PlayerRecords udemaeData; try { var result = await HttpManager.GetDeserializedJsonAsyncWithCookieContainer <SplatNet2DataStructure.Records>(ApiUriPrefix + "records", Cookie); udemaeData = result.records.player; } catch (HttpRequestException) { await LogManager.WriteLogAsync("Failed to get \"records\""); return(false); } catch (JsonException) { await LogManager.WriteLogAsync("Failed to convert \"records\""); return(false); } PlayerData = new PlayerData(udemaeData.nickname, udemaeData.principal_id); string GetUdemaeName(SplatNet2DataStructure.Records.PersonalRecords.PlayerRecords.RuleData r) => r.name == null ? "-" : (r.name + r.s_plus_number); PlayerData.Udemae = new[] { GetUdemaeName(udemaeData.udemae_zones), GetUdemaeName(udemaeData.udemae_tower), GetUdemaeName(udemaeData.udemae_rainmaker), GetUdemaeName(udemaeData.udemae_clam), }; SplatNet2DataStructure.XPowerRanking powerData; try { powerData = await HttpManager.GetDeserializedJsonAsyncWithCookieContainer <SplatNet2DataStructure.XPowerRanking>(ApiUriPrefix + "x_power_ranking/" + GetSeason() + "/summary", Cookie); } catch (HttpRequestException) { await LogManager.WriteLogAsync("Failed to get \"XPowerRanking\""); return(false); } catch (JsonException) { await LogManager.WriteLogAsync("Failed to convert \"XPowerRanking\""); return(false); } // parse時にCultureInfo.InvariantCultureを付けないとフランスの方を筆頭にバグる float GetXPower(SplatNet2DataStructure.Records.PersonalRecords.PlayerRecords.RuleData r, SplatNet2DataStructure.XPowerRanking.RuleStats m) => r.is_x && m.my_ranking != null?float.Parse(m.my_ranking.x_power, CultureInfo.InvariantCulture) : 0; PlayerData.XPower = new[] { GetXPower(udemaeData.udemae_zones, powerData.splat_zones), GetXPower(udemaeData.udemae_tower, powerData.tower_control), GetXPower(udemaeData.udemae_rainmaker, powerData.rainmaker), GetXPower(udemaeData.udemae_clam, powerData.clam_blitz) }; List <SplatNet2DataStructure.Results.BattleResult> battleData; try { var result2 = await HttpManager.GetDeserializedJsonAsyncWithCookieContainer <SplatNet2DataStructure.Results>(ApiUriPrefix + "results", Cookie); battleData = result2.results; } catch (HttpRequestException) { await LogManager.WriteLogAsync("Failed to get \"results\""); return(false); } catch (JsonException) { await LogManager.WriteLogAsync("Failed to convert \"results\""); return(false); } lastBattleNumber = battleData.Max(a => a.battle_number); #if DEBUG lastBattleNumber = battleData.Max(a => a.battle_number) - 50; #endif var ruleIndex = await GetGachiSchedule(); RuleData = new RuleData(RuleData.GameMode.Gachi, ruleIndex, ruleNamesJP[ruleIndex]); return(true); }
public void UpdateWindow(PlayerData playerData, RuleData ruleData) { if (battleNum == playerData.WinCount + playerData.LoseCount) { return; } // common battleNum = playerData.WinCount + playerData.LoseCount; WLabel.Content = playerData.WinCount; LLabel.Content = playerData.LoseCount; RuleLabel.Content = ruleData.Name; UdemaeLabel.Content = ""; XPowerLabel.Content = ""; XPowerSubtractLabel.Content = ""; PaintPointLabel.Content = ""; WeaponImage.Source = null; MVPLabel.Visibility = Visibility.Hidden; ContributionLabel.Visibility = Visibility.Hidden; PaintPointLabel.Visibility = Visibility.Hidden; contentTarget.xpower = 0; // アニメーションの処理をストップ // ウデマエラベル、XPラベル、XPDiffラベル、色の処理 switch (ruleData.Mode) { case RuleData.GameMode.Gachi: UdemaeLabel.Content = playerData.Udemae[ruleData.RuleIndex][0]; if (playerData.Udemae[ruleData.RuleIndex] != "X") { XPowerLabel.Content = playerData.Udemae[ruleData.RuleIndex].Substring(1); // -、+、数字 } else if (playerData.XPower[ruleData.RuleIndex] == 0) { XPowerLabel.Content = "Calculating"; } UpdateXPSubtractLabelColor(playerData.XPowerDiff); XPowerLabel.Margin = new Thickness(90, 35, 0, 0); XPowerSubtractLabel.Margin = new Thickness(370, 91, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(0xE2, 0x56, 0x2C)); // コンテンツデータの更新 contentTarget.xpower = playerData.XPower[ruleData.RuleIndex]; contentTarget.xpowerSubtract = playerData.XPowerDiff; contentNow.xpower = playerData.XPowerDiff == 0 ? 0 : playerData.XPower[ruleData.RuleIndex] - playerData.XPowerDiff; // 計測終了直後の場合と分ける contentNow.xpowerSubtract = 0; break; case RuleData.GameMode.Private: PaintPointLabel.Visibility = Visibility.Visible; XPowerLabel.Content = playerData.KDMVP; MVPLabel.Visibility = Visibility.Visible; XPowerLabel.Margin = new Thickness(285, 35, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(194, 0, 255)); break; case RuleData.GameMode.League2: if (playerData.LeaguePower == 0) { XPowerLabel.Content = "Calculating"; } UpdateXPSubtractLabelColor(playerData.LeaguePowerDiff); XPowerLabel.Margin = new Thickness(40, 35, 0, 0); XPowerSubtractLabel.Margin = new Thickness(320, 91, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 1, 206)); // コンテンツデータの更新 contentTarget.xpower = playerData.LeaguePower; contentTarget.xpowerSubtract = playerData.LeaguePowerDiff; contentNow.xpower = playerData.LeaguePowerDiff == 0 ? 0 : playerData.LeaguePower - playerData.LeaguePowerDiff; contentNow.xpowerSubtract = 0; break; case RuleData.GameMode.League4: if (playerData.LeaguePower == 0) { XPowerLabel.Content = "Calculating"; } UpdateXPSubtractLabelColor(playerData.LeaguePowerDiff); XPowerLabel.Margin = new Thickness(40, 35, 0, 0); XPowerSubtractLabel.Margin = new Thickness(320, 91, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(255, 1, 206)); // コンテンツデータの更新 contentTarget.xpower = playerData.LeaguePower; contentTarget.xpowerSubtract = playerData.LeaguePowerDiff; contentNow.xpower = playerData.LeaguePowerDiff == 0 ? 0 : playerData.LeaguePower - playerData.LeaguePowerDiff; contentNow.xpowerSubtract = 0; break; case RuleData.GameMode.Regular: PaintPointLabel.Visibility = Visibility.Visible; WeaponImage.Source = new BitmapImage(playerData.ImageUri); XPowerLabel.Content = $"{playerData.WinMeter:F1}"; XPowerLabel.Margin = new Thickness(150, 35, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(59, 252, 3)); break; case RuleData.GameMode.FestivalSolo: if (playerData.FesPower == 0) { XPowerLabel.Content = "Calculating"; } UpdateXPSubtractLabelColor(playerData.FesPowerDiff); XPowerLabel.Margin = new Thickness(40, 35, 0, 0); XPowerSubtractLabel.Margin = new Thickness(320, 91, 0, 0); RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(0xE2, 0x76, 0x4C)); // コンテンツデータの更新 contentTarget.xpower = playerData.FesPower; contentTarget.xpowerSubtract = playerData.FesPowerDiff; contentNow.xpower = playerData.FesPowerDiff == 0 ? 0 : playerData.FesPower - playerData.FesPowerDiff; contentNow.xpowerSubtract = 0; break; case RuleData.GameMode.FestivalTeam: var cpt = playerData.ContributionPointTotal; if (cpt >= (long)Math.Pow(10, 10)) { XPowerLabel.Content = $"{cpt / Math.Pow(10, 9):F1}" + "B"; } else if (cpt >= (long)Math.Pow(10, 7)) { XPowerLabel.Content = $"{cpt / Math.Pow(10, 6):F1}" + "M"; } else if (cpt >= (long)Math.Pow(10, 4)) { XPowerLabel.Content = $"{cpt / Math.Pow(10, 3):F1}" + "K"; } else { XPowerLabel.Content = cpt; } XPowerLabel.Margin = new Thickness(35, 35, 0, 0); PaintPointLabel.Visibility = Visibility.Visible; ContributionLabel.Visibility = Visibility.Visible; RuleLabel.Foreground = new SolidColorBrush(Color.FromRgb(159, 252, 3)); break; } // コンテンツデータの更新(targetに向かってnowからアニメーションが進行) contentTarget.killCount = playerData.KillCount; contentTarget.assistCount = playerData.AssistCount; contentTarget.deathCount = playerData.DeathCount; contentTarget.kdRate = (float)playerData.KillCount / (playerData.DeathCount == 0 ? 1 : playerData.DeathCount); contentTarget.killCountN = playerData.KillCountN; contentTarget.assistCountN = playerData.AssistCountN; contentTarget.deathCountN = playerData.DeathCountN; contentTarget.kdRateN = (float)playerData.KillCountN / (playerData.DeathCountN == 0 ? 1 : playerData.DeathCountN); contentTarget.wlRate = (int)Math.Round((float)playerData.WinCount / (playerData.WinCount + playerData.LoseCount == 0 ? 1 : playerData.WinCount + playerData.LoseCount) * 100); contentTarget.paintPoint = playerData.PaintPoint; contentNow.killCount = playerData.KillCount - playerData.KillCountN; contentNow.assistCount = playerData.AssistCount - playerData.AssistCountN; contentNow.deathCount = playerData.DeathCount - playerData.DeathCountN; contentNow.kdRate = (float)contentNow.killCount / (contentNow.deathCount == 0 ? 1 : contentNow.deathCount); contentNow.killCountN = 0; contentNow.assistCountN = 0; contentNow.deathCountN = 0; contentNow.kdRateN = float.Parse(KDLabelN.Content.ToString(), CultureInfo.InvariantCulture); contentNow.wlRate = int.Parse(WLLabel.Content.ToString().TrimEnd('%'), CultureInfo.InvariantCulture); contentNow.paintPoint = 0; animationTimes = 100; _animationDispatcherTimer.Start(); UpdateAnimation(null, null); }