Example #1
0
        void BuildData()
        {
            foreach (var playerReport in _homeReport.Players)
            {
                _curMoveResultsIndex = 0;
                _moveResults         = playerReport.MoveResults;
                for (; _curMoveResultsIndex < _moveResults.Count; _curMoveResultsIndex++)
                {
                    _curMoveResult = _moveResults[_curMoveResultsIndex];
                    var stateReport = _curMoveResult.StateData;
                    if (stateReport.HasBall == 1)
                    {
                        ControlRound++;
                    }
                    if (stateReport.State == 10)
                    {
                        int    a = 0;
                        string s = a.ToString();
                    }
                    switch (stateReport.ClassId)
                    {
                    case (int)ReportAsset.PlayerStateAsset.CLASSIdShoot:
                        BuildShoot(stateReport);
                        break;

                    default:
                        BuildDefault(stateReport);
                        break;
                    }
                    BuildFoul(stateReport.FoulLevel);
                }
            }
        }
Example #2
0
        public PlayerMoveReport SaveRpt(IPlayer player)
        {
            var state = CreateStateRpt(player);

            FillStateRpt(player, state);
            var rpt = new PlayerMoveReport();

            rpt.AsRound   = player.Match.Status.Round;
            rpt.StateData = state;
            return(rpt);
        }
Example #3
0
        /// <summary>
        /// Play a <see cref="PlayerProcess"/>.
        /// 播放一个球员的回合
        /// </summary>
        /// <param name="m">Manager loop index.</param>
        /// <param name="p">Player loop index.</param>
        /// <param name="process"><see cref="PlayerProcess"/>.</param>
        private void PlayPlayerProcess(int m, int p, PlayerMoveReport process)
        {
            if (null == process)
            {
                return;
            }
            ShowProcess(process.AsRound, Convert.ToInt32(2 * 60 / Defines.Match.ROUND_TIME));
            Player player = _playerCache[String.Format("player_{0}_{1}", m, p)];

            player.Skill = string.Empty;

            #region 显示球员状态
            player.DisplayState(process.StateData.State);
            #endregion

            #region 模型效果
            string skillStr = process.StateData.Disable ? "下场|" : string.Empty;
            if (process.StateData.ModelId != 0)
            {
                skillStr = string.Concat(skillStr, "模型[", process.StateData.ModelId, "]");
            }
            player.Skill = skillStr;
            #endregion

            #region 球员名字显示效果
            if (process.StateData.NameVisible == 1)
            {
                player.MarkName((m == 0), false);
            }
            else
            {
                player.MarkNormal();
            }
            #endregion

            #region 球员技能
            ManagerReport[] managers = new[] { _match.HomeManager, _match.AwayManager };
            for (int i = 0; i < managers[m].Players[p].SkillResults.Count; i++)
            {
                if (managers[m].Players[p].SkillResults[i].Round == _round)
                {
                    player.Skill += "技能" + managers[m].Players[p].SkillResults[i].SkillId;
                }
            }
            #endregion

            #region 红黄牌效果
            // red card or injured
            if (process.StateData.FoulLevel == Defines.FoulLevel.RED_CARD || process.StateData.FoulLevel == Defines.FoulLevel.INJURED)
            {
                player.Dead();
            }
            else
            {
                bool yellowFlag = process.StateData.FoulLevel == Defines.FoulLevel.YELLOW_CARD;
                bool homeFlag   = m == 0;
                player.Active(homeFlag, yellowFlag);
            }
            #endregion

            #region 动画效果
            var    coordinate = process.StateData.Current;
            double x          = GetPoint(coordinate.X);
            double y          = GetPoint(coordinate.Y);

            player.ToolTip = String.Format("{0},{1}", coordinate.X, coordinate.Y);
            player.Angle   = GetRotateAngle(process.StateData.Angle);

            // play the moving movie.
            var doubleAnimationX = new DoubleAnimation();
            doubleAnimationX.From     = Convert.ToDouble(player.GetValue(Canvas.LeftProperty));
            doubleAnimationX.To       = x;
            doubleAnimationX.Duration = new Duration(TimeSpan.FromMilliseconds(Defines.Match.ROUND_TIME * 1000));

            Storyboard.SetTarget(doubleAnimationX, player);
            Storyboard.SetTargetProperty(doubleAnimationX, new PropertyPath("(Canvas.Left)"));

            var doubleAnimationY = new DoubleAnimation();
            doubleAnimationY.From     = Convert.ToDouble(player.GetValue(Canvas.TopProperty));
            doubleAnimationY.To       = y;
            doubleAnimationY.Duration = new Duration(TimeSpan.FromMilliseconds(Defines.Match.ROUND_TIME * 1000));

            Storyboard.SetTarget(doubleAnimationY, player);
            Storyboard.SetTargetProperty(doubleAnimationY, new PropertyPath("(Canvas.Top)"));

            var storyboard = new Storyboard();
            storyboard.Children.Add(doubleAnimationX);
            storyboard.Children.Add(doubleAnimationY);


            storyboard.Begin();
            #endregion
        }