Ejemplo n.º 1
0
        private void CompetitiveStage(IRallyPilotsServices pilots, IPeople people, IRallyNavigatorsServices navigators,
                                      ITeamServices team, IRaceHistoryServices raceHistory, ICarServices cars, List <CompetitionsTeams> teams,
                                      RallyRunway runway, int count, List <CompetitionsTeams> crashed, decimal stages, int numberStage)
        {
            string input = string.Empty;

            for (int i = 0; i < count; i++)
            {
                var pilot       = pilots.GetPilotNoTracking(teams[i].PilotId);
                var energyPilot = pilots.EnergyPilot(teams[i].PilotId) - stages * damageConstant;
                people.ReduceEnergy(pilot, energyPilot);
                var navigator       = navigators.GetNavigator(teams[i].NavigatorId);
                var energyNavigator = navigators.EnergyNavigator(teams[i].NavigatorId) - stages * damageConstant;
                people.ReduceEnergy(navigator, energyNavigator);
                var teamRace = team.FindUserAsync(teams[i].TeamId).GetAwaiter().GetResult();
                int drive;

                if (numberStage == 1)
                {
                    if (i == 0)
                    {
                        if (teams[i].Drive == DriveType.Aggressive)
                        {
                            input = $"Първи стартира отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който тръгва с мръсна газ. Наблюдаваме доста агресивно" +
                                    $" каране дано, навигатор до него {navigator.FirstName} му влее малко разум.";
                            drive = 3;
                        }
                        else if (teams[i].Drive == DriveType.Normal)
                        {
                            input = $"Първи стартира отборът на {teamRace.Name}, с пилот {pilot.FirstName}" +
                                    $" и навигатор до него {navigator.FirstName} ";
                            drive = 2;
                        }
                        else
                        {
                            input = $"Първи стартира отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който потегля доста плахо. С това предпазливо каране, ще " +
                                    $"изостане доста в класацията, дано навигатор до него {navigator.FirstName} му повлияе полужително.";
                            drive = 1;
                        }
                    }
                    else
                    {
                        if (teams[i].Drive == DriveType.Aggressive)
                        {
                            input = $"Следващ е отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който тръгва с мръсна газ. Наблюдаваме доста агресивно" +
                                    $" каране дано, навигатор до него {navigator.FirstName} му влее малко разум.";
                            drive = 3;
                        }
                        else if (teams[i].Drive == DriveType.Normal)
                        {
                            input = $"Следващия отборът на старта е {teamRace.Name}, с пилот {pilot.FirstName}" +
                                    $" и навигатор до него {navigator.FirstName} ";
                            drive = 2;
                        }
                        else
                        {
                            input = $"Към старт линията се приближава отборът на {teamRace.Name}, с пилот {pilot.FirstName}, който потегля доста плахо. С това предпазливо каране, ще " +
                                    $"изостане доста в класацията, дано навигатор до него {navigator.FirstName} му повлияе полужително.";
                            drive = 1;
                        }
                    }
                }
                else
                {
                    if (teams[i].Drive == DriveType.Aggressive)
                    {
                        input = $"Пилот {pilot.FirstName} от отборът на {teamRace.Name}, продължава с агресивното шофиране. Не съм обеден че това ще му донесе привилегии " +
                                $" за напред. Дано, навигатор до него {navigator.FirstName} го успокой за да не станем свидетели на катастрофа.";
                        drive = 3;
                    }
                    else if (teams[i].Drive == DriveType.Normal)
                    {
                        input = $"Пилот {pilot.FirstName} от отборът на {teamRace.Name}, продължава с едно чудестно представяне.";

                        drive = 2;
                    }
                    else
                    {
                        input = $"Пилот {pilot.FirstName} от отборът на {teamRace.Name}, продължава с плахото шофиране. Очаквах повече от този пилот " +
                                $"Дано навигатор до него {navigator.FirstName} даде малко смелост да натисне педала.";
                        drive = 1;
                    }
                }

                raceHistory.AddHistory(input);

                var random = RandomEvents(pilot, navigator, runway.Difficulty, drive);
                if (random == "the end")
                {
                    input = $"Мик невнимание и пилота {pilot.FirstName} изпусна завоя, колата се преобърна в канавката. Дано всички са наред. " +
                            $"Това беше края на състезанието за отбор: {teamRace.Name}";
                    var date = new DateTime();
                    ratingList.AddInRatingList(teamRace, date);
                    crashed.Add(teams[i]);
                }
                else if (random == "Ok")
                {
                    input = $"Без проблеми отборрът на {teamRace.Name} с {pilot.FirstName} зад волана и навигатор до него {navigator.FirstName}" +
                            $"преминаха през втората контрола";
                    var turbo = cars.GetTurbo(teamRace.User);
                    if (turbo != null && teams[i].UseOfTurboType == UseOfTurboType.Medium)
                    {
                        var    speed    = (cars.GetMaxCurrentSpeed(teamRace.User) + cars.GetTurbo(teamRace.User).Speed) / 60; //to convene in km / h
                        double time     = (double)stages / (double)speed;
                        var    date     = new DateTime();
                        var    realTime = date.AddMinutes(time);
                        ratingList.AddInRatingList(teamRace, realTime);
                    }
                    else
                    {
                        var    speed    = cars.GetMaxCurrentSpeed(teamRace.User) / 60; //to convene in km / h
                        double time     = (double)stages / (double)speed;
                        var    date     = new DateTime();
                        var    realTime = date.AddMinutes(time);
                        ratingList.AddInRatingList(teamRace, realTime);
                    }
                }
                else
                {
                    input = $"Пилота {pilot.FirstName} от отбора на {teamRace.Name}, се разсея за момент и излезе от идеалната линия. Това му костваше цени секунди";
                    var turbo = cars.GetTurbo(teamRace.User);
                    if (turbo != null && teams[i].UseOfTurboType == UseOfTurboType.Medium)
                    {
                        var    speed    = (cars.GetMaxSpeed(teamRace.User) + cars.GetTurbo(teamRace.User).Speed) / 60; //to convene in km / h
                        double time     = (double)stages / (double)speed;
                        var    date     = new DateTime();
                        var    realTime = date.AddMinutes(time).AddSeconds(double.Parse(random));
                        ratingList.AddInRatingList(teamRace, realTime);
                    }
                    else
                    {
                        var    speed    = cars.GetMaxSpeed(teamRace.User) / 60; //to convene in km / h
                        double time     = (double)stages / (double)speed;
                        var    date     = new DateTime();
                        var    realTime = date.AddMinutes(time).AddSeconds(double.Parse(random));
                        ratingList.AddInRatingList(teamRace, realTime);
                    }
                }

                raceHistory.AddHistory(input);

                pilots.DecreaseEnergy(pilot.Id, 100 - (int)energyPilot);
                pilots.IncreaseExperience(pilot.Id, numberStage);            //2 comes from the number of Stage - stageTwo
                navigators.DecreaseEnergy(navigator.Id, 100 - (int)energyNavigator);
                navigators.IncreaseExperience(navigator.Id, numberStage);    //2 comes from the number of Stage - stageTwo
                cars.Damage(teamRace.CarId, numberStage, runway.Difficulty); //2 comes from the number of Stage - stageTwo
            }
        }