Example #1
0
        public PlayerViewModel(long playerID)
        {
            IList <SenkaData> chartDataSet = serverManager.GetPlayerDataList(playerID, out _server);

            if (_server != null)
            {
                CreatePlayerCharts(chartDataSet);
                _playerData = chartDataSet.Last();
                _activity   = serverManager.GetPlayerActivityList(playerID, 3);

                if (_playerData.Date.ID != _server.LastUpdateTime.ID)
                {
                    _rankingHtmlClass = " hidden";
                }
                else
                {
                    _rankingHtmlClass = "";
                }
            }
        }
Example #2
0
        public void CreatePlayerCharts(IList <SenkaData> datas)
        {
            IList <SenkaData> bound = serverManager.GetPlayerBoundList(_server.ID, datas.Last());
            Dictionary <int, Dictionary <DateTime, SenkaData> > boundDic = bound
                                                                           .GroupBy(r => r.Ranking)
                                                                           .ToDictionary(
                groupitem => groupitem.Key,
                value => value.ToDictionary(data => data.Date.DateTime, data => data)
                );
            int upper = boundDic.Keys.Min();
            int lower = boundDic.Keys.Max();

            #region Declare
            _rankingChart        = new ChartData();
            _rankPointDeltaChart = new ChartData();
            _rankPointChart      = new ChartData();
            SenkaData          lastData       = datas.Last();
            ChartData.JsonData _rankPointData = new ChartData.JsonData(string.Format("{0}({1}位)", lastData.PlayerName, lastData.Ranking));
            ChartData.JsonData _rankingaData  = new ChartData.JsonData("順位");
            ChartData.JsonData _deltaAM       = new ChartData.JsonData("3~15時");
            ChartData.JsonData _deltaPM       = new ChartData.JsonData("15~27時");
            ChartData.JsonData _upperData     = new ChartData.JsonData(string.Format("{0}位", upper));
            ChartData.JsonData _lowerData     = new ChartData.JsonData(string.Format("{0}位", lower));

            List <string> lables          = new List <string>();
            List <string> deltaLables     = new List <string>();
            List <int>    rankPointValues = new List <int>();
            List <int>    rankingValues   = new List <int>();
            List <int>    deltaAMValues   = new List <int>();
            List <int>    deltaPMValues   = new List <int>();
            List <int>    upperValues     = new List <int>();
            List <int>    lowerValues     = new List <int>();
            #endregion

            Dictionary <DateTime, SenkaData> dic = datas.ToDictionary(d => d.Date.DateTime, d => d);
            DateTime end  = boundDic[lower].Keys.Max();
            DateTime last = boundDic[lower].Keys.Min();
            DateTime date = last;
            if (last.Hour == 3 && last.Day != 1)
            {
                deltaAMValues.Add(ChartData.NONE);
            }

            while (date <= end)
            {
                if (dic.ContainsKey(date))
                {
                    SenkaData item = dic[date];
                    if (upper != lower)
                    {
                        upperValues.Add(boundDic[upper][date].RankPoint);
                    }
                    lowerValues.Add(boundDic[lower][date].RankPoint);
                    rankPointValues.Add(item.RankPoint);
                    rankingValues.Add(item.Ranking);
                    //Delta Data
                    if (date.Day == 1 && date.Hour == 15)
                    {
                        deltaAMValues.Add(item.RankPoint);
                    }
                    else if ((date - last).Hours == 12 && dic.ContainsKey(last))
                    {
                        int delta = item.RankPoint - dic[last].RankPoint;
                        if (date.Hour == 3)
                        {
                            deltaPMValues.Add(delta);
                        }
                        else
                        {
                            deltaAMValues.Add(delta);
                        }
                    }
                    else
                    {
                        if (date.Hour == 3)
                        {
                            deltaPMValues.Add(ChartData.NONE);
                        }
                        else
                        {
                            deltaAMValues.Add(ChartData.NONE);
                        }
                    }
                    last = date;
                }
                else
                {
                    if (boundDic[lower].ContainsKey(date))
                    {
                        if (upper != lower)
                        {
                            upperValues.Add(boundDic[upper][date].RankPoint);
                        }
                        lowerValues.Add(boundDic[lower][date].RankPoint);
                    }
                    else
                    {
                        if (upper != lower)
                        {
                            upperValues.Add(ChartData.NONE);
                        }
                        lowerValues.Add(ChartData.NONE);
                    }
                    rankPointValues.Add(ChartData.NONE);
                    rankingValues.Add(ChartData.NONE);
                    if (date.Hour == 3)
                    {
                        deltaPMValues.Add(ChartData.NONE);
                    }
                    else
                    {
                        deltaAMValues.Add(ChartData.NONE);
                    }
                }
                //Lables
                if (date.Hour == 3)
                {
                    lables.Add(date.Day.ToString());
                }
                else
                {
                    deltaLables.Add(date.Day.ToString());
                    lables.Add("");
                }
                date = date.AddHours(12);
            }
            if (end.Hour == 15)
            {
                deltaPMValues.Add(ChartData.NONE);
            }
            if (deltaAMValues.Count > 0 && deltaAMValues[0] == ChartData.NONE && deltaPMValues[0] == ChartData.NONE)
            {
                deltaAMValues.RemoveAt(0);
                deltaPMValues.RemoveAt(0);
            }
            var amd = deltaAMValues.Distinct();
            var pmd = deltaPMValues.Distinct();
            if (amd.Count() == 1 && pmd.Count() == 1 && amd.First() == ChartData.NONE && pmd.First() == ChartData.NONE)
            {
                deltaAMValues.Clear();
                deltaPMValues.Clear();
            }

            _upperData.SetValue(upperValues);
            _lowerData.SetValue(lowerValues);
            _rankPointData.SetValue(rankPointValues);
            _rankingaData.SetValue(rankingValues);
            _deltaAM.SetValue(deltaAMValues);
            _deltaPM.SetValue(deltaPMValues);

            ChartData.JsonData[] _rankPointChartJsonData;
            if (upperValues.Count == 0)
            {
                _rankPointChartJsonData = new ChartData.JsonData[2] {
                    _rankPointData, _lowerData
                };
            }
            else
            {
                _rankPointChartJsonData = new ChartData.JsonData[3] {
                    _rankPointData, _lowerData, _upperData
                };
            }

            _rankingChart.SetData(new ChartData.JsonData[1] {
                _rankingaData
            }, lables.ToArray());
            _rankPointDeltaChart.SetData(new ChartData.JsonData[2] {
                _deltaAM, _deltaPM
            }, deltaLables.ToArray());
            _rankPointChart.SetData(_rankPointChartJsonData, lables.ToArray());
        }