Пример #1
0
 public void LoadLineup(Project project, LineupEvent lineup)
 {
     this.lineup                    = lineup;
     playershbox.Visible            = false;
     tagger.SubstitutionMode        = true;
     tagger.ShowSubstitutionButtons = false;
     LoadTeams(project, lineup.HomeStartingPlayers, lineup.HomeBenchPlayers,
               lineup.AwayStartingPlayers, lineup.AwayBenchPlayers);
 }
        public void TestLineupEventIsSaved()
        {
            InitializeWithLineupEvent();
            LineupEvent lineupEvent    = (LineupEvent)viewModel.Play.Clone();
            var         clickedPlayer1 = viewModel.Project.HomeTeam.FieldPlayersList.ElementAt(0);
            var         clickedPlayer2 = viewModel.Project.HomeTeam.BenchPlayersList.ElementAt(0);

            viewModel.TeamTagger.PlayerClick(clickedPlayer1, ButtonModifier.None);
            viewModel.TeamTagger.PlayerClick(clickedPlayer2, ButtonModifier.None);
            viewModel.SaveCommand.Execute();

            Assert.IsTrue(((LineupEvent)viewModel.Play).HomeStartingPlayers.Contains(clickedPlayer2.Model));
            Assert.IsTrue(((LineupEvent)viewModel.Play).HomeBenchPlayers.Contains(clickedPlayer1.Model));
            Assert.AreNotSame(lineupEvent.HomeStartingPlayers, ((LineupEvent)viewModel.Play).HomeStartingPlayers);
            Assert.AreNotSame(lineupEvent.HomeBenchPlayers, ((LineupEvent)viewModel.Play).HomeBenchPlayers);
        }
Пример #3
0
        void UpdateTimePlayed()
        {
            LineupEvent lineup = project.Lineup;
            List <SubstitutionEvent> subs;
            Time            start;
            List <TimeNode> timenodes, playingTimeNodes;
            TimeNode        last;

            subs = project.EventsByType(project.SubstitutionsEventType).
                   Where(s => !(s is LineupEvent) && ((s as SubstitutionEvent).In == Player ||
                                                      (s as SubstitutionEvent).Out == Player))
                   .OrderBy(e => e.EventTime).Select(e => e as SubstitutionEvent).ToList();

            if (lineup.AwayStartingPlayers.Contains(Player) ||
                lineup.HomeStartingPlayers.Contains(Player))
            {
                start = lineup.EventTime;
            }
            else
            {
                SubstitutionEvent sub = subs.Where(s => s.In == Player).FirstOrDefault();
                if (sub == null)
                {
                    TimePlayed = new Time(0);
                    return;
                }
                else
                {
                    start = sub.EventTime;
                }
            }

            timenodes = new List <TimeNode> ();
            /* Find the sequences of playing time */
            last = new TimeNode {
                Start = start
            };
            timenodes.Add(last);
            if (subs.Count == 0)
            {
                last.Stop = project.Description.FileSet.Duration;
            }
            else
            {
                foreach (SubstitutionEvent sub in subs)
                {
                    if (last.Stop == null)
                    {
                        if (sub.Out == Player)
                        {
                            last.Stop = sub.EventTime;
                        }
                    }
                    else
                    {
                        if (sub.In == Player)
                        {
                            last = new TimeNode {
                                Start = sub.EventTime
                            };
                            timenodes.Add(last);
                        }
                    }
                }
            }

            /* If the last substitution was Player IN */
            if (last.Stop == null)
            {
                last.Stop = project.Description.FileSet.Duration;
            }

            playingTimeNodes = new List <TimeNode> ();
            /* Get the real playing time intersecting with the periods */
            foreach (TimeNode timenode in timenodes)
            {
                foreach (Period p in project.Periods)
                {
                    if (p.PeriodNode.Intersect(timenode) != null)
                    {
                        foreach (TimeNode ptn in p.Nodes)
                        {
                            TimeNode res = ptn.Intersect(timenode);
                            if (res != null)
                            {
                                playingTimeNodes.Add(res);
                            }
                        }
                    }
                }
            }

            TimePlayed = new Time(playingTimeNodes.Sum(t => t.Duration.MSeconds));
        }