private async Task <Ability> GetOrCreateAbility(string abilityName)
        {
            Ability ability = await _db.Abilities.FindAsync(abilityName);

            if (ability == null)
            {
                if (Regex.IsMatch(abilityName, @".+builder_(spawn|upgrade)_.+"))
                {
                    string unitName = "tower_" + Regex.Replace(abilityName, @"_(spawn|upgrade)", "");
                    ability = new SpawnAbility
                    {
                        Unit     = await GetOrCreateUnit(unitName),
                        UnitName = unitName
                    };
                    _db.Update(((SpawnAbility)ability).Unit);
                    _db.SpawnAbilities.Add((SpawnAbility)ability);
                }
                else
                {
                    ability = new Ability();
                    _db.Abilities.Add(ability);
                }
                ability.Name = abilityName;
                await _db.SaveChangesAsync();
            }
            return(ability);
        }
Example #2
0
    public void Execute()
    {
        SpawnAbility spawnAbility = (SpawnAbility)character.getAbility(typeof(SpawnAbility));

        if (spawnAbility == null)
        {
            Debug.Log("Don't have SpawnAbility");
            return;
        }

        if (Time.time >= spawnAbility.lastSpawn + spawnAbility.deltaTime)
        {
            Object.Instantiate(prefab, pos, Quaternion.identity);
            spawnAbility.lastSpawn = Time.time;
        }
    }