Exemplo n.º 1
0
    public override void InitializeAbilityStats(Ability _ability)
    {
        MeleeAbility ability = _ability as MeleeAbility;

        ability.damage          = damage;
        ability.abilityCooldown = attackFrequency;
        ability.transform.root.GetComponent <NavMeshAgent> ().speed = speed;
    }
Exemplo n.º 2
0
    public static MeleeAbility CreateMeleeAbility()
    {
        MeleeAbility asset = ScriptableObject.CreateInstance <MeleeAbility>();

        AssetDatabase.CreateAsset(asset, GetSelectedPathOrFallback() + "/NewMeleeAbility.asset");
        AssetDatabase.SaveAssets();
        return(asset);
    }
    public void Init(MeleeAbility a, string t, Vector3 direction)
    {
        base.Init(a, t);

        Vector3 temp = ((Player)Ability.UsedBy).transform.position;

        transform.position = new Vector3(temp.x, 0.01f, temp.z);
        Swing(direction);
    }
Exemplo n.º 4
0
    private MeleeAbility meleeAbility;             // need to access the DesiredTags of this

    void Start()
    {
        chaseBehaviourComp = GetComponent <UnitChaseBehaviour>();
        meleeAbility       = GetComponent <MeleeAbility>();
    }
    public static BaseAbility Create(UseableAbility useableAbility, Item scriptableAbility, CharacterBase ownerCharacter,
                                     GameObject worldGameObject, AttackAbility.HitAction hitAction = null, AttackAbility.EndAttackAction endAttackAction = null)
    {
        Func <BaseAbility> abilityFunc = () =>
        {
            switch (scriptableAbility)
            {
            case ScriptableMeleeAbility _:
            {
                ForwardTriggerCollision forwardTrigger =
                    worldGameObject.GetComponentInChildren <ForwardTriggerCollision>();
                MeleeAbility meleeAbility = new MeleeAbility(useableAbility, forwardTrigger, ownerCharacter);
                if (hitAction != null)
                {
                    meleeAbility.OnHit += hitAction;
                }
                if (endAttackAction != null)
                {
                    meleeAbility.OnEndAttack += endAttackAction;
                }

                return(meleeAbility);
            }

            case ScriptableRaycastAbility _:
                int layerMask = ~0;

                switch (ownerCharacter)
                {
                case AIBase aiBase:
                    layerMask = layerMask &= ~(1 << LayerMask.NameToLayer("Enemy"));
                    break;

                case PlayerBase playerBase:
                    layerMask = layerMask &= ~(1 << LayerMask.NameToLayer("Player"));
                    layerMask = layerMask &= ~(1 << LayerMask.NameToLayer("Hands"));
                    break;
                }

                RaycastAbilitiy raycastAbility = new RaycastAbilitiy(useableAbility, ownerCharacter, layerMask);
                if (hitAction != null)
                {
                    raycastAbility.OnHit += hitAction;
                }
                if (endAttackAction != null)
                {
                    raycastAbility.OnEndAttack += endAttackAction;
                }
                return(raycastAbility);

            case ScriptableProjectileAbility _:
                ProjectileAbility projectileAbility = new ProjectileAbility(useableAbility, ownerCharacter);
                if (hitAction != null)
                {
                    projectileAbility.OnHit += hitAction;
                }
                if (endAttackAction != null)
                {
                    projectileAbility.OnEndAttack += endAttackAction;
                }
                return(projectileAbility);

            case ScriptableUseableAbility _:
                return(new ModifierAbility(useableAbility, ownerCharacter));
            }

            throw new Exception($"{scriptableAbility.GetType()} doesn't exist within the AbilityFactory");
        };

        //Add base abilities to useable object
        BaseAbility baseAbility = abilityFunc.Invoke();

        useableAbility.Modifiers.AddRange(baseAbility.Ability.StartingModifiers);

        return(baseAbility);
    }