protected override void Establish()
 {
     _inputCapturingArenaParser       = new InputCapturingArenaParser();
     _propertiesChanged               = new List <String>();
     _arenaViewModel                  = new ArenaViewModel(_inputCapturingArenaParser);
     _arenaViewModel.PropertyChanged += ArenaViewModelPropertyChanged;
 }
 protected override void Establish()
 {
     _arenaParser       = new ExceptionThrowingArenaParser();
     _propertiesChanged = new List <String>();
     _arenaViewModel    = new ArenaViewModel(_arenaParser);
     _arenaViewModel.PropertyChanged += ArenaViewModelPropertyChanged;
 }
示例#3
0
        public ActionResult battle(int id, int userID)
        {
            string           player;
            GameSession      session = db.GameSessions.Include("user1").Include("user2").Include("P1.Passives").Include("P2.Passives").Where(x => x.ID == id).FirstOrDefault();
            User             user    = db.Users.Find(userID);
            List <Character> li1     = db.Characters.Include("Passives").Where(x => x.Name == session.P1.Name).ToList();
            List <Character> li2     = db.Characters.Include("Passives").Where(x => x.Name == session.P2.Name).ToList();

            if (user.ID == session.user1.ID)
            {
                player = "P1";
            }
            else
            {
                player = "P2";
            }

            ArenaViewModel vm = new ArenaViewModel()
            {
                P1        = li1,
                P2        = li2,
                MySession = session,
                MyUser    = player,
            };

            return(View(vm));
        }
 public void ViewArena()
 {
     if (ArenaSession == null)
     {
         return;
     }
     ArenaViewModel.Load(ArenaSession);
 }
示例#5
0
 public void ViewArena()
 {
     if (ArenaSession == null)
     {
         return;
     }
     IsOpen = false;
     // events.PublishOnUIThread(new SelectedArenaSessionChanged(this, ArenaSession.Id));
     ArenaViewModel.Load(ArenaSession);
 }
示例#6
0
        public MainWindow()
        {
            var arenaParser = ContainerFactory.Create().Resolve <IArenaParser>();

            _arenaViewModel = new ArenaViewModel(arenaParser)
            {
                Input = "5 5\r\n1 2 N\r\nLMLMLMLMM\r\n3 3 E\r\nMMRMMRMRRM"
            };
            DataContext = _arenaViewModel;
            InitializeComponent();
        }
示例#7
0
        public async Task <IActionResult> Arena(string id)
        {
            var user = await _userManager.FindByIdAsync(id);

            var model = new ArenaViewModel();

            if (user != null)
            {
                model.UserName = user.UserName;
            }

            return(View(model));
        }
示例#8
0
        private void OnPropertyChanged(object sender, PropertyChangedEventArgs args)
        {
            var not = IsNotifying;

            if (!PauseNotify.IsPaused(this))
            {
                switch (args.PropertyName)
                {
                case "SelectedGame":
                    if (SelectedGame != null)
                    {
                        EditGameViewModel.Load(SelectedGame);
                    }
                    break;

                case "SelectedArenaSession":
                    if (SelectedArenaSession != null)
                    {
                        ArenaViewModel.Load(SelectedArenaSession);
                        EditGameViewModel.IsOpen = false;
                    }
                    else
                    {
                        ArenaViewModel.IsOpen = false;
                    }
                    break;

                case "FilterServer":
                case "FilterHero":
                case "FilterFromDate":
                case "FilterToDate":
                    RefreshData();
                    break;
                }
            }
        }
示例#9
0
 public void Initialize()
 {
     _inputMessenger = new MessengerFake();
     _arenaViewModel = new ArenaViewModel(_inputMessenger);
 }
示例#10
0
 public void ShowLatest()
 {
     ArenaViewModel.LoadLatest();
 }
示例#11
0
 public void ShowLatest()
 {
     GameViewModel.IsOpen = false;
     ArenaViewModel.LoadLatest();
 }
示例#12
0
        public async Task <IActionResult> Arena(ArenaViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.GetUserAsync(User);

                if (user.Status != UserStatus.Stays)
                {
                    ModelState.AddModelError(string.Empty, "Aktualnie nie możesz walczyć na arenie.");
                }
                else if (model.UserName == user.UserName)
                {
                    ModelState.AddModelError(string.Empty, "Nie możesz walczyć ze sobą.");
                }
                else if (user.ActionPoints < 1)
                {
                    ModelState.AddModelError(string.Empty, "Nie masz siły na walkę na arenie.");
                }
                else
                {
                    var enemy = await _userManager.FindByNameAsync(model.UserName);

                    if (enemy == null)
                    {
                        ModelState.AddModelError(string.Empty, "Podany gracz nie istnieje.");
                    }
                    else if (user.PositionX != enemy.PositionX || user.PositionY != enemy.PositionY)
                    {
                        ModelState.AddModelError(string.Empty, "Tego gracza nie ma w tym miejscu.");
                    }
                    else if (enemy.Status != UserStatus.Stays)
                    {
                        ModelState.AddModelError(string.Empty, "Podany gracz jest teraz czymś zajęty.");
                    }
                    else if (user.HealthPoints < user.MaxHealthPoints * 0.25)
                    {
                        ModelState.AddModelError(string.Empty, "Jesteś rany. Ulecz się zanim podejmiesz walkę.");
                    }
                    else if (enemy.HealthPoints < enemy.MaxHealthPoints * 0.25)
                    {
                        ModelState.AddModelError(string.Empty, "Przeciwnik jest ranny. Nie możesz go zaatakować.");
                    }
                    else
                    {
                        var arenaResultViewModel = new ArenaResultViewModel()
                        {
                            User  = user,
                            Enemy = enemy
                        };

                        int userHealth  = user.HealthPoints;
                        int enemyHealth = enemy.HealthPoints;

                        int    i          = 0;
                        int    userScore  = 0;
                        int    enemyScore = 0;
                        Random rand       = new Random();

                        while (user.HealthPoints > 0 && enemy.HealthPoints > 0)
                        {
                            i++;
                            var roundInfo = string.Empty;

                            if (enemy.GetDodge() > rand.NextDouble() * 100)
                            {
                                roundInfo += "<div class=\"alert alert-success\" role=\"alert\">Spudłowałeś.</div>";
                            }
                            else
                            {
                                ItemWeapon weapon = null;
                                foreach (var used in _inventoryRepository.GetInventory(user.Id).Where(x => x.Used == true).ToList())
                                {
                                    var item = _itemRepository.GetItem(used.ItemId);
                                    if (item.Type == ItemType.Weapon)
                                    {
                                        weapon = (ItemWeapon)item.ItemType;
                                        break;
                                    }
                                }

                                var userAtt = rand.Next(user.GetDamage() - 1, user.GetDamage() + 2);
                                if (weapon != null)
                                {
                                    userAtt = rand.Next(user.GetDamage() + weapon.MinDamage, user.GetDamage() + weapon.MaxDamage);
                                }

                                if (user.GetCritical() >= rand.NextDouble() * 100)
                                {
                                    roundInfo += "<div class=\"alert alert-success\" role=\"alert\">Uderzenie krytyczne.</div>";
                                    userAtt   *= 2;
                                }

                                ItemArmor armor = null;
                                foreach (var used in _inventoryRepository.GetInventory(enemy.Id).Where(x => x.Used == true).ToList())
                                {
                                    var item = _itemRepository.GetItem(used.ItemId);
                                    if (item.Type == ItemType.Armor)
                                    {
                                        armor = (ItemArmor)item.ItemType;
                                        break;
                                    }
                                }

                                if (armor != null)
                                {
                                    userAtt -= (int)(userAtt * (rand.Next(0, armor.Resist + 1) / 100f));
                                }

                                enemy.HealthPoints -= userAtt;
                                userScore          += userAtt;
                                roundInfo          += $"<div class=\"alert alert-success\" role=\"alert\">Zadałeś {userAtt} obrażeń.</div>";

                                if (enemy.HealthPoints < 1)
                                {
                                    goto RoundEnd;
                                }
                            }

                            if (user.GetDodge() > rand.NextDouble() * 100)
                            {
                                roundInfo += "<div class=\"alert alert-danger\" role=\"alert\">Wróg spudłował.</div>";
                            }
                            else
                            {
                                ItemWeapon weapon = null;
                                foreach (var used in _inventoryRepository.GetInventory(enemy.Id).Where(x => x.Used == true).ToList())
                                {
                                    var item = _itemRepository.GetItem(used.ItemId);
                                    if (item.Type == ItemType.Weapon)
                                    {
                                        weapon = (ItemWeapon)item.ItemType;
                                        break;
                                    }
                                }

                                var enemyAtt = rand.Next(enemy.GetDamage() - 1, enemy.GetDamage() + 2);
                                if (weapon != null)
                                {
                                    enemyAtt = rand.Next(enemy.GetDamage() + weapon.MinDamage, enemy.GetDamage() + weapon.MaxDamage);
                                }

                                if (enemy.GetCritical() >= rand.NextDouble() * 100)
                                {
                                    roundInfo += "<div class=\"alert alert-danger\" role=\"alert\">Uderzenie krytyczne.</div>";
                                    enemyAtt  *= 2;
                                }

                                ItemArmor armor = null;
                                foreach (var used in _inventoryRepository.GetInventory(user.Id).Where(x => x.Used == true).ToList())
                                {
                                    var item = _itemRepository.GetItem(used.ItemId);
                                    if (item.Type == ItemType.Armor)
                                    {
                                        armor = (ItemArmor)item.ItemType;
                                        break;
                                    }
                                }

                                if (armor != null)
                                {
                                    enemyAtt -= (int)(enemyAtt * (rand.Next(0, armor.Resist + 1) / 100f));
                                }

                                user.HealthPoints -= enemyAtt;
                                enemyScore        += enemyAtt;
                                roundInfo         += $"<div class=\"alert alert-danger\" role=\"alert\">Wróg zadał Ci {enemyAtt} obrażeń.</div>";
                            }

                            goto RoundEnd;

RoundEnd:
                            arenaResultViewModel.FightInfo += $"<div class=\"card mb-3\"><div class=\"card-header\">Runda: {i}</div><div class=\"card-body\">{roundInfo}</div></div>";
                        }

                        var userReport = new ArenaReportViewModel()
                        {
                            Type       = ReportType.Defend,
                            User       = enemy,
                            Rounds     = i,
                            UserScore  = userScore,
                            EnemyScore = enemyScore,
                        };

                        var enemyReport = new ArenaReportViewModel()
                        {
                            Type       = ReportType.Attack,
                            User       = user,
                            Rounds     = i,
                            UserScore  = userScore,
                            EnemyScore = enemyScore,
                        };

                        var winExperience  = userScore > enemyScore ? user.Level * 5 : enemy.Level * 5;
                        var loseExperience = 5;

                        if (userScore > enemyScore)
                        {
                            arenaResultViewModel.ExperiencePoints = winExperience;
                            userReport.ExperiencePoints           = winExperience;
                            user.ExperiencePoints += winExperience;
                            user.AllExperience    += winExperience;

                            enemyReport.ExperiencePoints = loseExperience;
                            enemy.ExperiencePoints      += loseExperience;
                            enemy.AllExperience         += loseExperience;
                            enemy.HealthPoints           = (int)Math.Floor(enemy.MaxHealthPoints * 0.1);
                        }
                        else
                        {
                            arenaResultViewModel.ExperiencePoints = loseExperience;
                            userReport.ExperiencePoints           = loseExperience;
                            user.ExperiencePoints += loseExperience;
                            user.AllExperience    += loseExperience;
                            user.HealthPoints      = (int)Math.Floor(user.MaxHealthPoints * 0.1);

                            enemyReport.ExperiencePoints = winExperience;
                            enemy.ExperiencePoints      += winExperience;
                            enemy.AllExperience         += winExperience;
                        }

                        userReport.HealthPoints  = enemyHealth;
                        enemyReport.HealthPoints = userHealth;

                        var userReportHtml = await this.RenderViewAsync("ArenaReport", userReport);

                        var enemyReportHtml = await this.RenderViewAsync("ArenaReport", enemyReport);

                        var userMail = new Mail()
                        {
                            FromId  = "system",
                            ToId    = user.Id,
                            Type    = MailType.Received,
                            Title   = (userScore > enemyScore ? "[WYGRANA]" : "[PRZEGRANA]") + " Raport z walki",
                            Content = userReportHtml,
                            Status  = MailStatus.New
                        };

                        var enemyMail = new Mail()
                        {
                            FromId  = "system",
                            ToId    = enemy.Id,
                            Type    = MailType.Received,
                            Title   = (userScore < enemyScore ? "[WYGRANA]" : "[PRZEGRANA]") + " Raport z walki",
                            Content = enemyReportHtml,
                            Status  = MailStatus.New
                        };

                        var userInventory  = _inventoryRepository.GetInventory(user.Id).Where(x => x.Used == true);
                        var enemyInventory = _inventoryRepository.GetInventory(enemy.Id).Where(x => x.Used == true);

                        foreach (var inventory in userInventory.ToList())
                        {
                            inventory.Stamina--;
                            if (inventory.Stamina < 1)
                            {
                                inventory.Used = false;
                            }

                            _inventoryRepository.Update(inventory);
                        }

                        foreach (var inventory in enemyInventory.ToList())
                        {
                            inventory.Stamina--;
                            if (inventory.Stamina < 1)
                            {
                                inventory.Used = false;
                            }

                            _inventoryRepository.Update(inventory);
                        }

                        _mailRepository.Add(userMail);
                        _mailRepository.Add(enemyMail);

                        await _userManager.UpdateAsync(user);

                        await _userManager.UpdateAsync(enemy);

                        arenaResultViewModel.UserScore  = userScore;
                        arenaResultViewModel.EnemyScore = enemyScore;

                        return(View("ArenaResult", arenaResultViewModel));
                    }
                }
            }

            return(View());
        }