Ejemplo n.º 1
0
            public static ExcelPost Create(PostIMatch postIMatch)
            {
                if (postIMatch.Post == null)
                {
                    throw new InvalidOperationException("Kan ikke eksportere uten at postIMatch.Post er satt. Bruk Include(...)");
                }

                var post = postIMatch.Post;

                var excelPost = new ExcelPost
                {
                    PostId            = post.PostId,
                    Navn              = post.Navn,
                    Omraade           = post.Omraade,
                    Beskrivelse       = post.Beskrivelse,
                    Image             = post.Image,
                    Latitude          = post.Latitude,
                    Longitude         = post.Longitude,
                    Altitude          = post.Altitude,
                    DefaultPoengArray = post.DefaultPoengArray,
                    HemmeligKode      = post.HemmeligKode,
                    SynligFra         = postIMatch.SynligFraTid,
                    SynligTil         = postIMatch.SynligTilTid
                };

                return(excelPost);
            }
        public void StemplingerUtOverSpesifikasjonStempling_GirSistePoeng()
        {
            var poeng = "100,80";

            var beregnet = PostIMatch.BeregnPoengForNesteRegistrering(poeng, 15);

            Assert.AreEqual(80, beregnet);
        }
        public void AndreStempling_GirAndrePoeng()
        {
            var poeng = "100,80";

            var beregnet = PostIMatch.BeregnPoengForNesteRegistrering(poeng, 1);

            Assert.AreEqual(80, beregnet);
        }
        public void FørsteStempling_GirFørstePoeng()
        {
            var poeng = "100,80";

            var beregnet = PostIMatch.BeregnPoengForNesteRegistrering(poeng, 0);

            Assert.AreEqual(100, beregnet);
        }
Ejemplo n.º 5
0
        public void Opprett_spill_videre()
        {
            //Opprett_Våpen();
            //Opprett_Arrangørlag();
            //Opprett_LagForHelga();

            using (var context = _dataContextFactory.Create())
            {
                var match = new Match()
                {
                    MatchId  = Guid.NewGuid(),
                    Navn     = "Bouvet Battle Royale 2015 - nachpiel",
                    StartTid = new DateTime(2015, 11, 07, 15, 00, 00),
                    SluttTid = new DateTime(2045, 11, 07, 15, 00, 00)
                };

                if (context.Matcher.Any(x => x.Navn == match.Navn))
                {
                    return;
                }

                var leggTilLag = context.Lag.Where(x => x.LagId.StartsWith("SUPPORT") || x.LagId.StartsWith("JAVA_") || x.LagId.StartsWith("MS_")).ToList();

                foreach (var lag in leggTilLag)
                {
                    var deltakelse = match.LeggTil(lag);

                    var våpen = context.Våpen.ToList();

                    deltakelse.LeggTilVåpen(våpen[0]);
                    deltakelse.LeggTilVåpen(våpen[1]);
                }

                context.Matcher.Add(match);

                foreach (var post in new PostFactory().Les(Constants.Område.Oscarsborg))
                {
                    context.Poster.Add(post);

                    var postIMatch = new PostIMatch
                    {
                        Match        = match,
                        Post         = post,
                        PoengArray   = post.DefaultPoengArray,
                        SynligFraTid = match.StartTid,
                        SynligTilTid = match.SluttTid
                    };

                    if (post.Latitude < 59.67700)
                    {
                        postIMatch.SynligFraTid = match.SluttTid;
                    }

                    match.Poster.Add(postIMatch);
                }
                context.SaveChanges();
            }
        }
Ejemplo n.º 6
0
        public void Opprett_spill_fredag()
        {
            Opprett_Våpen();
            //Opprett_Demolag();
            Opprett_Arrangørlag();
            Opprett_LagForHelga();

            using (var context = _dataContextFactory.Create())
            {
                var match = new Match
                {
                    MatchId  = Guid.NewGuid(),
                    Navn     = "Treningsrunde fredag",
                    StartTid = new DateTime(2015, 11, 06, 10, 00, 00),
                    SluttTid = new DateTime(2015, 11, 07, 10, 30, 00)
                };

                if (context.Matcher.Any(x => x.Navn == match.Navn))
                {
                    return;
                }

                var leggTilLag = context.Lag.Where(x => x.LagId.StartsWith("BBR") || x.LagId.StartsWith("SUPPORT") || x.LagId.StartsWith("JAVA_") || x.LagId.StartsWith("MS_")).ToList();

                foreach (var lag in leggTilLag)
                {
                    var deltakelse = match.LeggTil(lag);

                    var våpen = context.Våpen.ToList();

                    deltakelse.LeggTilVåpen(våpen[0]);
                    deltakelse.LeggTilVåpen(våpen[1]);
                }

                context.Matcher.Add(match);

                foreach (var post in new PostFactory().Les(Constants.Område.OscarsborgFredag))
                {
                    post.HemmeligKode = post.Navn.Replace(" ", string.Empty);
                    post.Navn         = "Fredag" + post.Navn;

                    context.Poster.Add(post);

                    var postIMatch = new PostIMatch
                    {
                        Match        = match,
                        Post         = post,
                        PoengArray   = post.DefaultPoengArray,
                        SynligFraTid = match.StartTid,
                        SynligTilTid = match.SluttTid
                    };

                    match.Poster.Add(postIMatch);
                }
                context.SaveChanges();
            }
        }
Ejemplo n.º 7
0
        private void DisablePostIMatch(PostIMatch førstePost)
        {
            using (var context = _dataContextFactory.Create())
            {
                var postIMatch = context.PosterIMatch
                                 .Include(x => x.Post)
                                 .Include(x => x.Match)
                                 .Single(x => x.Id == førstePost.Id);

                postIMatch.SynligFraTid = new DateTime(2001, 01, 01);
                postIMatch.SynligTilTid = new DateTime(2001, 01, 02);
                context.SaveChanges();
            }
        }
Ejemplo n.º 8
0
        private int KjørRiggedeVåpenOgReturnerPoeng(PostIMatch post, int poeng, string bruktVåpen, string lagId, string deltakerId)
        {
            if (post.RiggetVåpen == Constants.Våpen.Felle)
            {
                var riggetAvLag = post.RiggetVåpenParam;
                post.RiggetVåpen      = null; // nullstill
                post.RiggetVåpenParam = null;
                post.SynligFraTid     = TimeService.Now.AddSeconds(_settings.PostSkjulesISekunderEtterVåpen);

                _eventPublisher.UtløsteFelle(lagId, deltakerId, poeng, riggetAvLag);

                return(-poeng);
            }

            return(poeng);
        }
Ejemplo n.º 9
0
        public Match EnMatchMedTreLagOgTrePoster()
        {
            using (var context = _dataContextFactory.Create())
            {
                var lag1 = LagFactory.SettOppEtLagMedDeltakere(1, 2);
                var lag2 = LagFactory.SettOppEtLagMedDeltakere(2, 2);
                var lag3 = LagFactory.SettOppEtLagMedDeltakere(3, 2);
                context.Lag.Add(lag1);
                context.Lag.Add(lag2);
                context.Lag.Add(lag3);

                var alleLag = new List <Lag> {
                    lag1, lag2, lag3
                };

                var match = new Match
                {
                    MatchId  = Guid.NewGuid(),
                    Navn     = "Unit Test Match",
                    StartTid = new DateTime(2015, 10, 01),
                    SluttTid = new DateTime(2020, 12, 01)
                };

                context.Matcher.Add(match);

                if (!context.Våpen.Any())
                {
                    context.Våpen.Add(new Vaapen {
                        VaapenId = Constants.Våpen.Bombe, Beskrivelse = "Sprenger posten for en tid"
                    });
                    context.Våpen.Add(new Vaapen {
                        VaapenId = Constants.Våpen.Felle, Beskrivelse = "Sprenger posten ved neste stempling. Laget som stempler får ikke poeng."
                    });
                    context.SaveChanges();
                }

                var alleVåpen = context.Våpen.ToList();

                var felle = alleVåpen.Single(x => x.VaapenId == Constants.Våpen.Felle);
                var bombe = alleVåpen.Single(x => x.VaapenId == Constants.Våpen.Bombe);

                foreach (var l in alleLag)
                {
                    var lagIMatch = new LagIMatch
                    {
                        Lag   = l,
                        Match = match
                    };

                    lagIMatch.VåpenBeholdning.Add(new VaapenBeholdning {
                        LagIMatch = lagIMatch, Våpen = felle
                    });
                    lagIMatch.VåpenBeholdning.Add(new VaapenBeholdning {
                        LagIMatch = lagIMatch, Våpen = bombe
                    });

                    match.LeggTil(lagIMatch);
                }

                foreach (var post in HentTestPoster(3))
                {
                    context.Poster.Add(post);

                    var postIMatch = new PostIMatch
                    {
                        Match        = match,
                        Post         = post,
                        PoengArray   = post.DefaultPoengArray,
                        SynligFraTid = match.StartTid,
                        SynligTilTid = match.SluttTid
                    };

                    match.Poster.Add(postIMatch);
                }

                context.SaveChanges();


                OverrideMatchId(match);

                return(match);
            }
        }
Ejemplo n.º 10
0
        public void Calculate()
        {
            var matchId = _currentMatchProvider.GetMatchId();

            //using (With.ReadUncommitted())
            using (var context = _dataContextFactory.Create())
            {
                var sorterteLag =
                    context.LagIMatch.Include(x => x.Lag.Deltakere).Include(x => x.VåpenBeholdning).Include("Våpenbeholdning.BruktIPostRegistrering")
                    .Where(x => x.Match.MatchId == matchId)
                    .OrderByDescending(x => x.PoengSum)
                    .ToList();

                // Legg på poeng fra Achievements
                var achievementsPoeng = from a in context.Achievements
                                        group a by a.LagId
                                        into g
                                        select new { LagId = g.Key, Poeng = g.Sum(x => x.Score), Achievements = g };

                foreach (var lagPoeng in achievementsPoeng)
                {
                    var p   = lagPoeng;
                    var lag = sorterteLag.Single(x => x.Lag.LagId == p.LagId);
                    lag.PoengSum += p.Poeng;
                }

                var poster = (from p in context.PosterIMatch.Include(x => x.Post)
                              where p.Match.MatchId == matchId
                              select new TempPost
                {
                    PostId = p.Post.PostId,
                    Latitude = p.Post.Latitude,
                    Longitude = p.Post.Longitude,
                    CurrentPoengIndex = p.CurrentPoengIndex,
                    PoengArray = p.PoengArray,
                    Navn = p.Post.Navn,
                    ErSynlig = p.SynligFraTid < TimeService.Now && TimeService.Now < p.SynligTilTid,
                    SynligFra = p.SynligFraTid,
                    SynligTil = p.SynligTilTid,
                    RiggetMedVåpen = p.RiggetVåpen
                }).ToList();

                var postRegistreringer = (from l in context.LagIMatch
                                          from p in l.PostRegistreringer
                                          where l.Match.MatchId == matchId
                                          select new
                {
                    PostId = p.RegistertPost.Post.PostId,
                    LagIMatchId = p.RegistertForLag.Id,
                    Poeng = p.PoengForRegistrering,
                    Deltaker = p.RegistrertAvDeltaker
                }).ToList();


                var rankedeLag = (from l in sorterteLag
                                  select new
                {
                    Id = l.Id,
                    Lag = l.Lag,
                    Rank = sorterteLag.Count(x => x.PoengSum > l.PoengSum) + 1,
                    PoengSum = l.PoengSum,
                    LagIMatch = l
                }).OrderBy(x => x.Rank).ToList();

                var poengsummer = (from l in rankedeLag
                                   select l.PoengSum).Distinct().OrderByDescending(x => x).ToList();

                var nyGameState = new Dictionary <string, GameStateForLag>();
                var random      = new Random();

                foreach (var lag in rankedeLag)
                {
                    var egenPoengIndex = poengsummer.IndexOf(lag.PoengSum);

                    var poengForover = egenPoengIndex == 0 ? lag.PoengSum : poengsummer[egenPoengIndex - 1];
                    var poengBakover = egenPoengIndex == poengsummer.Count - 1 ? lag.PoengSum : poengsummer[egenPoengIndex + 1];

                    var state = new GameStateForLag
                    {
                        LagId    = lag.Lag.LagId,
                        LagNavn  = lag.Lag.Navn,
                        LagFarge = lag.Lag.Farge,
                        LagIkon  = lag.Lag.Ikon,
                        Score    = lag.PoengSum,
                        Ranking  = new GameStateRanking
                        {
                            Rank = lag.Rank,
                            PoengBakLagetForan = poengForover - lag.PoengSum,
                            PoengForanLagetBak = lag.PoengSum - poengBakover,
                        },
                        Poster = (from p in poster.Where(x => x.ErSynlig)
                                  join r in postRegistreringer.Where(x => x.LagIMatchId == lag.Id) on p.PostId equals r.PostId into j
                                  from reg in j.DefaultIfEmpty()
                                  select new GameStatePost
                        {
                            PostId = p.PostId.ToString(),
                            Navn = p.Navn,
                            Latitude = p.Latitude,
                            Longitude = p.Longitude,
                            PoengVerdi = reg != null ? reg.Poeng : PostIMatch.BeregnPoengForNesteRegistrering(p.PoengArray, p.CurrentPoengIndex),
                            HarRegistrert = reg != null,
                        }).OrderBy(x => x.Navn).ToList(),
                        Vaapen = lag.LagIMatch.VåpenBeholdning.Where(x => x.BruktIPostRegistrering == null).Select(x => new GameStateVaapen {
                            VaapenId = x.VaapenId
                        }).ToList(),
                        Deltakere = lag.Lag.Deltakere.Select(x => new GameStateDeltaker {
                            DeltakerId = x.DeltakerId, Navn = x.Navn
                        }).ToList(),
                        Achievements = new List <GameStateAchievement>()//achievementsPoeng.Where(x => x.LagId == lag.Lag.LagId).Select(x => x.Achievements)
                    };

                    nyGameState.Add(state.LagId, state);
                }

                var scoreboard = new ScoreboardState();
                scoreboard.Poster = (from p in poster
                                     select new ScoreboardPost
                {
                    PostId = p.PostId.ToString(),
                    Latitude = p.Latitude,
                    Longitude = p.Longitude,
                    ErSynlig = p.ErSynlig,
                    Navn = p.Navn,
                    Verdi = PostIMatch.BeregnPoengForNesteRegistrering(p.PoengArray, p.CurrentPoengIndex),
                    AntallRegistreringer = postRegistreringer.Count(x => x.PostId == p.PostId),
                    SynligFra = p.SynligFra,
                    RiggetMedVåpen = p.RiggetMedVåpen
                }).OrderBy(x => x.Navn).ToList();

                scoreboard.Lag = sorterteLag.Select(l => new ScoreboardLag
                {
                    LagId                = l.Lag.LagId,
                    LagNavn              = l.Lag.Navn,
                    LagFarge             = l.Lag.Farge,
                    Score                = l.PoengSum,
                    Ranking              = sorterteLag.Count(x => x.PoengSum > l.PoengSum) + 1,
                    AntallRegistreringer = postRegistreringer.Count(x => x.LagIMatchId == l.Id)
                }).ToList();

                var deltakerPoeng = postRegistreringer
                                    .GroupBy(p => p.Deltaker.DeltakerId)
                                    .Select(g => new
                {
                    DeltakerId           = g.Key,
                    Navn                 = g.First().Deltaker.Navn,
                    LagIMatchId          = g.First().LagIMatchId,
                    AntallRegistreringer = g.Count(),
                    Poengsum             = g.Sum(x => x.Poeng)
                }).ToList();

                scoreboard.Deltakere = (from p in deltakerPoeng
                                        join l in sorterteLag on p.LagIMatchId equals l.Id
                                        select new ScoreboardDeltaker
                {
                    DeltakerId = p.DeltakerId,
                    Navn = p.Navn,
                    AntallRegistreringer = p.AntallRegistreringer,
                    Score = p.Poengsum,
                    LagId = l.Lag.LagId,
                    LagFarge = l.Lag.Farge,
                    LagIkon = l.Lag.Ikon,
                    LagNavn = l.Lag.Navn,
                    MostValueablePlayerRanking = deltakerPoeng.Count(x => x.Poengsum > p.Poengsum) + 1
                }).OrderByDescending(x => x.MostValueablePlayerRanking).ToList();

                var førsteTidspunktEtterNå = (from p in poster
                                              from t in p.Tider
                                              where t > TimeService.Now
                                              select t).Union(new[] { DateTime.MaxValue }).Min();

                scoreboard.Match = LagScoreboardMatchInfo(context, matchId);

                // swap current state
                _matchStates[matchId] = new MatchState(matchId, nyGameState, scoreboard, førsteTidspunktEtterNå);

                // IKKE SAVE CHANGES
            }
        }