public void Apply(PlayerLevelUpPossibilitiesChosen domainEvent) { var freeSkillPoints = FreeSkillPoints.Append(domainEvent.NewFreeSkillPoint); FreeSkillPoints = freeSkillPoints; ChoosableSkillPoints -= 1; }
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)); }
public void Handle(PlayerLevelUpPossibilitiesChosen domainEvent) { FreeSkillPoints = FreeSkillPoints.Append(domainEvent.NewFreeSkillPoint); ChoosableSkills -= 1; }