Example #1
0
        public DomainResult ChooseSkill(SkillReadModel newSkill)
        {
            if (!FreeSkillPoints.Any())
            {
                return(DomainResult.Error(new NoLevelUpsAvailable()));
            }
            if (CurrentSkills.Any(s => s.SkillId == newSkill.SkillId))
            {
                return(DomainResult.Error(
                           new CanNotPickSkillTwice(CurrentSkills.Select(s => s.SkillId))));
            }

            foreach (var freeSkillPoint in FreeSkillPoints)
            {
                if (!HasPlayerFreeSkillForChosenSkill(newSkill, freeSkillPoint))
                {
                    return(DomainResult.Error(new SkillNotPickable(freeSkillPoint)));
                }
            }

            var newFreeSkills = GetMinimalSkillToRemove(FreeSkillPoints, newSkill);

            var domainEvent = new SkillChosen(PlayerId, newSkill, newFreeSkills);

            Apply(domainEvent);
            return(DomainResult.Ok(domainEvent));
        }
Example #2
0
 public void Apply(SkillChosen domainEvent)
 {
     CurrentSkills   = CurrentSkills.Append(domainEvent.NewSkill);
     FreeSkillPoints = domainEvent.NewFreeSkillPoints;
 }
Example #3
0
 public void Handle(SkillChosen domainEvent)
 {
     Skills          = Skills.Append(domainEvent.NewSkill.SkillId);
     FreeSkillPoints = domainEvent.NewFreeSkillPoints;
 }