예제 #1
0
        public async Task <Guid> CreateAsync(CharacterCreateDto entityDto)
        {
            using (var uow = UnitOfWorkProvider.Create())
            {
                //attributes, inventory, equipment
                var inv = new InventoryDto()
                {
                    Id = Guid.NewGuid(), MaxSize = 12
                };
                var attr = GenerateAttributesAccordingToCharacter(entityDto);
                var eq   = new EquipmentDto()
                {
                    Id = Guid.NewGuid()
                };

                entityDto.CurrentHp  = 10 * attr.Hp;
                entityDto.Inventory  = inv;
                entityDto.Equipment  = eq;
                entityDto.Attributes = attr;

                entityDto.Id = _characterService.Create(entityDto);
                await uow.Commit();

                return(entityDto.Id);
            }
        }
예제 #2
0
        public async Task Assign(UserDto user, CharacterCreateDto character)
        {
            var u = Mapper.Map <UserEditDto>(user);

            u.CharacterId = character.Id;
            await Update(u);
        }
예제 #3
0
        /// <summary>
        /// Tries to create character from given <see cref="CharacterDto"/>
        /// </summary>
        public async Task <Character> CreateAsync(CharacterCreateDto characterDto)
        {
            try
            {
                if (_context.Characters.Any(x => x.Name.ToLower() == characterDto.Name.ToLower()))
                {
                    throw new Exception("Character with given name already exists");
                }

                var character = new Character
                {
                    Name = characterDto.Name
                };

                await _context.AddAsync(character);

                await _context.SaveChangesAsync();

                return(await _context.Characters.FirstOrDefaultAsync(x => x.Id == character.Id));
            }
            catch (DbUpdateException ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public async Task <IActionResult> CreateCharacter([FromBody] CharacterCreateDto dto)
        {
            var character = await _characterService.CreateAsync(dto);

            var characterDto = new CharacterDto(character);

            return(Ok(characterDto));
        }
예제 #5
0
        public AttributesDto GenerateAttributesAccordingToCharacter(CharacterCreateDto character)
        {
            var attr = new AttributesDto()
            {
                Id = Guid.NewGuid(), Damage = 10, Defense = 10, Hp = 15
            };

            float[] raceMultiplier;
            float[] schoolMultiplier;
            switch (character.Race)
            {
            case Race.Human:
                raceMultiplier = new[] { 1.8F, 1.8F, 1.8F };
                break;

            case Race.Elf:
                raceMultiplier = new[] { 2.2F, 1.6F, 1.6F };
                break;

            case Race.Dwarf:
                raceMultiplier = new[] { 1.7F, 2.0F, 2F };
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            switch (character.School)
            {
            case School.Wolf:
                schoolMultiplier = new[] { 1.8F, 1.8F, 1.8F };
                break;

            case School.Bear:
                schoolMultiplier = new[] { 1.5F, 2.0F, 2.0F };
                break;

            case School.Cat:
                schoolMultiplier = new[] { 2.0F, 1.7F, 1.7F };
                break;

            case School.Viper:
                schoolMultiplier = new[] { 1.9F, 1.9F, 1.7F };
                break;

            case School.Griffin:
                schoolMultiplier = new[] { 1.7F, 1.8F, 2.0F };
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            attr.Damage  = (int)(attr.Damage * raceMultiplier[0] * schoolMultiplier[0]);
            attr.Defense = (int)(attr.Defense * raceMultiplier[1] * schoolMultiplier[1]);
            attr.Hp      = (int)(attr.Hp * raceMultiplier[2] * schoolMultiplier[2]);

            return(attr);
        }
예제 #6
0
        public async Task <ActionResult> Create(CharacterCreateDto model)
        {
            model.Id = Guid.Empty;
            var u = new UserDto {
                Id = model.UserId
            };

            model.Id = await CharacterFacade.CreateAsync(model);

            await UserFacade.AssignAsync(u, model);

            return(RedirectToAction("Index", "Home"));
        }
예제 #7
0
        public async Task <bool> AssignAsync(UserDto user, CharacterCreateDto character)
        {
            using (var uow = UnitOfWorkProvider.Create())
            {
                if ((await _service.GetAsync(user.Id, false)) == null)
                {
                    return(false);
                }
                await _service.Assign(user, character);

                await uow.Commit();

                return(true);
            }
        }
예제 #8
0
        public async Task <ActionResult <Character> > Post(
            [FromServices] ApiVersion apiVersion,
            [FromBody] CharacterCreateDto modeCreatelDto)
        {
            try
            {
                var model = _mapper.Map <Character>(modeCreatelDto);
                if (ModelState.IsValid)
                {
                    var potterApi = new PotterApi();
                    var accio     = await potterApi.AccioHouse(modeCreatelDto.House);

                    if (accio)
                    {
                        await _repository.CreateCharacterAsync(model);

                        await _repository.SaveChangesAsync();

                        var commandReadDto = _mapper.Map <CharacterReadDto>(model);

                        return(CreatedAtRoute(nameof(GetById), new { Id = commandReadDto.Id, version = $"{apiVersion}" }, commandReadDto));
                    }
                    else
                    {
                        ModelState.AddModelError("Accio", "Accio House didn't work");
                        return(BadRequest(ModelState));
                    }
                }
                else
                {
                    return(BadRequest(ModelState));
                }
            }
            catch (Exception)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }