예제 #1
0
    private void LoadStartingAbilitiesForSpecies(EntityTemplate species)
    {
        GlobalHelper.DestroyAllChildren(SpeciesStartingAbilityParent);

        var startingAbilities = new List <AbilityTemplate>();

        foreach (var bodyPartName in species.Parts)
        {
            var partAbilities = AbilityStore.GetAbilitiesByBodyPart(bodyPartName);

            if (partAbilities == null)
            {
                continue;
            }

            startingAbilities.AddRange(partAbilities);
        }

        foreach (var ability in startingAbilities)
        {
            var instance = Instantiate(StartingAbilityPrefab, StartingAbilityPrefab.transform.position,
                                       Quaternion.identity);

            instance.transform.SetParent(SpeciesStartingAbilityParent);

            instance.transform.GetComponentsInChildren <TextMeshProUGUI>()[0].text = GlobalHelper.CapitalizeAllWords(ability.Name);

            instance.transform.GetComponentsInChildren <TextMeshProUGUI>()[1].text = ability.Description;
        }
    }
예제 #2
0
    //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);
    }
예제 #3
0
    public void AbilitySelected(string abilityName)
    {
        var selectedAbility = AbilityStore.GetAbilityByName(abilityName);

        if (selectedAbility == null)
        {
            return;
        }

        DisplaySelectedAbilityDescription(selectedAbility.Description);

        _selectedFreeAbility = selectedAbility;
    }
예제 #4
0
    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);
        }
    }
예제 #5
0
    private void LoadStartingAbilitiesForBackground(CharacterBackground background)
    {
        GlobalHelper.DestroyAllChildren(BackgroundStartingAbilityParent);

        var backgroundAbilities = AbilityStore.GetAbilitiesByBackground(background);

        foreach (var ability in backgroundAbilities)
        {
            var instance = Instantiate(StartingAbilityPrefab, StartingAbilityPrefab.transform.position,
                                       Quaternion.identity);

            instance.transform.SetParent(BackgroundStartingAbilityParent);

            instance.transform.GetComponentsInChildren <TextMeshProUGUI>()[0].text = GlobalHelper.CapitalizeAllWords(ability.Name);

            instance.transform.GetComponentsInChildren <TextMeshProUGUI>()[1].text = ability.Description;
        }
    }
예제 #6
0
    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);
    }