//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); }
public static Entity ConvertToEntity(EntitySdo entitySdo) { Entity entity; entity = new Entity(entitySdo.Id, entitySdo.PrefabPath, entitySdo.IsPlayer); entity.PrefabPath = entitySdo.PrefabPath; entity.TotalBodyPartCoverage = entitySdo.TotalBodyPartCoverage; entity.Level = entitySdo.Level; entity.Xp = entitySdo.Xp; entity.Strength = entitySdo.Strength; entity.Agility = entitySdo.Agility; entity.Constitution = entitySdo.Constitution; entity.Intelligence = entitySdo.Intelligence; entity.MaxHp = entitySdo.MaxHp; entity.CurrentHp = entitySdo.CurrentHp; entity.Speed = entitySdo.Speed; entity.Defense = entitySdo.Defense; entity.Body = entitySdo.Body; entity.EntityType = entitySdo.EntityType; entity.Classification = entitySdo.Classification; entity.Fluff = entitySdo.Fluff; entity.Mobile = entitySdo.Mobile; entity.ToppingDropped = ToppingSdo.ConvertToTopping(entitySdo.ToppingDropped); entity.ToppingCounts = entitySdo.ToppingCounts; entity.EntityReputation = entitySdo.Reputation; entity.Abilities = new Entity.AbilityDictionary(); if (string.IsNullOrEmpty(entitySdo.CurrentCellId)) { entity.CurrentCell = null; entity.CurrentArea = null; entity.CurrentTile = null; } else { entity.CurrentCell = WorldData.Instance.MapDictionary[entitySdo.CurrentCellId]; entity.CurrentArea = entity.CurrentCell.GetAreaById(entitySdo.CurrentAreaId); entity.CurrentTile = entity.CurrentArea?.GetTileById(entitySdo.CurrentTileId); } entity.CurrentPosition = new Vector3(entitySdo.CurrentPosition.Y, entitySdo.CurrentPosition.X, entitySdo.CurrentPosition.Z); foreach (var itemId in entitySdo.InventoryItemIds) { if (itemId == Guid.Empty) { continue; } var item = WorldData.Instance.Items[itemId]; entity.Inventory.Add(item.Id, item); } foreach (var equipped in entitySdo.EquippedIds) { if (equipped.Value == Guid.Empty) { continue; } var item = WorldData.Instance.Items[equipped.Value]; if (entity.Equipped.ContainsKey(equipped.Key)) { entity.Equipped[equipped.Key] = item; } else { entity.Equipped.Add(equipped.Key, item); } } if (entitySdo.AbilityNames != null && entitySdo.AbilityNames.Count > 0) { foreach (var abilityName in entitySdo.AbilityNames) { var template = AbilityStore.GetAbilityByName(abilityName); var ability = AbilityStore.CreateAbility(template, entity); entity.Abilities.Add(abilityName, ability); } } return(entity); }