//todo might move this out of here and just have in entity private Entity.AbilityDictionary BuildAbilityDictionary() { var abilities = new Entity.AbilityDictionary(); var freeAbility = AbilityStore.CreateAbility(_selectedFreeAbility, _player); if (freeAbility != null) { abilities.Add(freeAbility.Name, freeAbility); } var startingBodyPartAbilities = (from partAbilities in _playerTemplate.Parts.Select(AbilityStore.GetAbilitiesByBodyPart) where partAbilities != null from ability in partAbilities where ability.StartingAbility select ability).ToList(); foreach (var ability in startingBodyPartAbilities) { if (abilities.ContainsKey(ability.Name)) { continue; } abilities.Add(ability.Name, AbilityStore.CreateAbility(ability, _player)); } var startingBackgroundAbilities = AbilityStore.GetAbilitiesByBackground(_selectedBackground); foreach (var ability in startingBackgroundAbilities) { if (abilities.ContainsKey(ability.Name) || !ability.StartingAbility) { continue; } abilities.Add(ability.Name, AbilityStore.CreateAbility(ability, _player)); } var startingDamageTypeAbilities = AbilityStore.GetAllDamageTypeAbilities(); foreach (var damageType in startingDamageTypeAbilities.Keys) { foreach (var ability in startingDamageTypeAbilities[damageType]) { if (abilities.ContainsKey(ability.Name) || !ability.StartingAbility) { continue; } abilities.Add(ability.Name, AbilityStore.CreateAbility(ability, _player)); } } return(abilities); }
private void LoadAbilitiesForAbilitySelectScreen() { GlobalHelper.DestroyAllChildren(AbilityCategoryParent); var bodyPartAbilities = (from partAbilities in _playerTemplate.Parts.Select(AbilityStore.GetAbilitiesByBodyPart) where partAbilities != null from ability in partAbilities where !ability.StartingAbility select ability).ToList(); if (bodyPartAbilities.Count > 0) { PopulateAbilityCategory("Species", bodyPartAbilities); } var backgroundAbilities = AbilityStore.GetAbilitiesByBackground(_selectedBackground); foreach (var ability in backgroundAbilities.ToArray().Where(ability => ability.StartingAbility)) { backgroundAbilities.Remove(ability); } if (backgroundAbilities.Count > 0) { PopulateAbilityCategory(_selectedBackground.Name, backgroundAbilities); } var damageTypeAbilities = AbilityStore.GetAllDamageTypeAbilities(); if (damageTypeAbilities.Count < 1) { return; } foreach (var damageType in damageTypeAbilities) { var abilityList = new List <AbilityTemplate>(damageType.Value); foreach (var ability in abilityList.ToArray().Where(ability => ability.StartingAbility)) { abilityList.Remove(ability); } if (abilityList.Count < 1) { continue; } PopulateAbilityCategory(damageType.Key.ToString(), abilityList); } }