示例#1
0
        private async Task IncreaseRoundCountAsync()
        {
            var game = await db.Game.FirstAsync();

            game.Round++;
            await db.SaveChangesAsync();
        }
示例#2
0
        public async Task <UpgradeViewModel> ResearchByIdAsync(int userId, int upgradeTypeId)
        {
            var user = await db.Users
                       .Include(u => u.Country)
                       .ThenInclude(c => c.Upgrades)
                       .ThenInclude(u => u.Type)
                       .SingleAsync(u => u.Id == userId);

            var upgrade = user.Country.Upgrades.Single(u => u.Type.Id == upgradeTypeId);

            if (upgrade.State == UpgradeState.Unresearched && !user.Country.Upgrades.Any(u => u.State == UpgradeState.InProgress))
            {
                // can upgrade, starting upgrade
                user.Country.UpgradeTimeLeft = 15;
                upgrade.State = UpgradeState.InProgress;
                await db.SaveChangesAsync();

                var upgrades = await GetUpgradesAsync(userId);

                return(upgrades.Single(u => u.Id == upgradeTypeId));
            }
            else
            {
                throw new HttpResponseException {
                          Status = 400, Value = "Most nem indíthatod el ezt a fejlesztést!"
                };
            }
        }
示例#3
0
        public async Task <string> CreateRefreshTokenAsync(User user)
        {
            string        charPool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
            StringBuilder sb       = new StringBuilder();

            for (int i = 0; i < 30; ++i)
            {
                int index = (int)(random.NextDouble() * charPool.Length);
                if (index == charPool.Length)
                {
                    --index;
                }
                sb.Append(charPool[index]);
            }
            string refreshToken = sb.ToString();

            user.RefreshToken = refreshToken;
            await db.SaveChangesAsync();

            return(refreshToken);
        }
示例#4
0
        public async Task <User> CreateUserAsync(RegisterDTO registerData)
        {
            var buildingTypes = db.BuildingTypes;
            var upgradeTypes  = db.UpgradeTypes;
            var upgrades      = new List <Upgrade>();
            var buildings     = new List <Building>();

            foreach (var buildingType in buildingTypes)
            {
                buildings.Add(new Building
                {
                    Type  = buildingType,
                    Count = 0
                });
            }
            foreach (var upgradeType in upgradeTypes)
            {
                upgrades.Add(new Upgrade
                {
                    Type  = upgradeType,
                    State = UpgradeState.Unresearched
                });
            }
            var buildingGroup = new BuildingGroup
            {
                Buildings = buildings
            };
            var attackingArmy = new UnitGroup();
            var defendingArmy = new UnitGroup();
            var user          = new User
            {
                UserName = registerData.UserName,
                GameId   = 1
            };
            var country = new Country
            {
                Name          = registerData.CountryName,
                BuildingGroup = buildingGroup,
                AttackingArmy = attackingArmy,
                DefendingArmy = defendingArmy,
                Upgrades      = upgrades,
                User          = user,
                Pearl         = 100000,
                Coral         = 100000,
                Stone         = 5000
            };

            user.Country = country;
            await db.SaveChangesAsync();

            return(user);
        }
示例#5
0
        public async Task <BuildingInfoViewModel> PurchaseBuildingByIdAsync(int userId, int buildingId)
        {
            var user = await db.Users.Include(ent => ent.Country)
                       .ThenInclude(ent => ent.BuildingGroup)
                       .ThenInclude(ent => ent.Buildings)
                       .ThenInclude(ent => ent.Type)
                       .SingleAsync(user => user.Id == userId);

            var building               = user.Country.BuildingGroup.Buildings.Single(building => building.Type.Id == buildingId);
            var buildingTypes          = db.BuildingTypes.ToList();
            var underConstructionCount = user.Country.BuildingGroup.Buildings.Sum(building => building.UnderConstructionCount);

            if (underConstructionCount > 0)
            {
                throw new HttpResponseException {
                          Status = 400, Value = "Már épül egy épületed!"
                };
            }
            if (building.Type.Price > user.Country.Pearl)
            {
                throw new HttpResponseException {
                          Status = 400, Value = "Nincs elég gyöngyöd az építéshez!"
                };
            }
            if (building.Type.StonePrice > user.Country.Stone)
            {
                throw new HttpResponseException {
                          Status = 400, Value = "Nincs elég köved az építéshez!"
                };
            }
            building.UnderConstructionCount++;
            user.Country.BuildingTimeLeft = buildingTypes.Single(type => type.Id == buildingId).BuildingTime;

            user.Country.Pearl -= building.Type.Price;
            user.Country.Stone -= building.Type.StonePrice;
            await db.SaveChangesAsync();

            var buildingInfos = await GetBuildingInfosAsync(userId);

            return(buildingInfos.Single(bi => bi.Id == buildingId));
        }
示例#6
0
        public async Task <IEnumerable <SimpleUnitViewModel> > AttackAsync(int attackerUserId, AttackDTO attack)
        {
            var game = await db.Game
                       .Include(game => game.Attacks)
                       .SingleAsync();

            var unitTypes = await db.UnitTypes.ToListAsync();

            var attackingUser = await db.Users
                                .Include(u => u.Country)
                                .ThenInclude(country => country.DefendingArmy)
                                .ThenInclude(defendingArmy => defendingArmy.Units)
                                .ThenInclude(unit => unit.Type)
                                .ThenInclude(type => type.Levels)
                                .Include(u => u.Country)
                                .ThenInclude(country => country.AttackingArmy)
                                .ThenInclude(attackingArmy => attackingArmy.Units)
                                .ThenInclude(unit => unit.Type)
                                .ThenInclude(type => type.Levels)
                                .SingleAsync(u => u.Id == attackerUserId);

            var defendingCountry = await db.Countries
                                   .Include(country => country.User)
                                   .SingleAsync(c => c.UserId == attack.DefenderUserId);

            var defendingUser = defendingCountry.User;

            var tranferList = new List <Unit>();

            await db.SaveChangesAsync();

            foreach (var sendUnit in attack.AttackingUnits)
            {
                int ownedCount = attackingUser.Country.DefendingArmy.Units
                                 .Count(u => u.Type.Id == sendUnit.Id && u.Level == sendUnit.Level);
                if (sendUnit.SendCount > ownedCount)
                {
                    throw new HttpResponseException {
                              Status = 400, Value = "Nem küldhetsz több egységet, mint amennyid van!"
                    }
                }
                ;
                else
                {
                    //Összeszedjük a kívánt egységeket a defending armyból
                    foreach (var oneAttack in attack.AttackingUnits)
                    {
                        foreach (var defender in attackingUser.Country.DefendingArmy.Units)
                        {
                            if (defender.Type.Id == oneAttack.Id
                                //Group by LVL
                                && defender.Level == oneAttack.Level)
                            {
                                oneAttack.SendCount--;
                                tranferList.Add(defender);
                            }

                            if (oneAttack.SendCount <= 0)
                            {
                                break;
                            }
                        }
                    }

                    // levonjuk az egységeket a defending armyból
                    // ÉS hozzáadjuk az attacking armyhoz
                    foreach (var item in tranferList)
                    {
                        attackingUser.Country.DefendingArmy.Units.Remove(item);
                        item.UnitGroupId = attackingUser.Country.AttackingArmyId;
                        attackingUser.Country.AttackingArmy.Units.Add(item);
                    }
                }
            }

            game.Attacks.Add(new Attack
            {
                AttackerUserId = attackingUser.Id,
                AttackerUser   = attackingUser,
                DefenderUserId = defendingUser.Id,
                DefenderUser   = defendingUser,
                GameId         = game.Id,
                UnitList       = tranferList
            });
            await db.SaveChangesAsync();

            List <SimpleUnitViewModel> result = new List <SimpleUnitViewModel>();
            var found = false;

            foreach (var unit in tranferList)
            {
                found = false;

                foreach (var unitvm in result)
                {
                    if (unitvm.TypeId == unit.Type.Id
                        //Group by LVL
                        && unitvm.Level == unit.Level)
                    {
                        unitvm.Count++;
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    result.Add(new SimpleUnitViewModel()
                    {
                        Count  = 1,
                        Level  = unit.Level,
                        TypeId = unit.Type.Id
                    });
                }
            }

            return(result);
        }