示例#1
0
    IEnumerator HideWeapon()
    {
        yield return(new WaitForSeconds(0.2f));

        weapon.Hide();
        OnEndAttack?.Invoke();
    }
示例#2
0
    public virtual void Hit(GameObject hitObject, float damage, Vector3 hitPoint, Vector3 hitDirection,
                            Vector3 surfaceNormal)
    {
        if (hitObject == OwnerCharacter.gameObject)
        {
            return;
        }

        //TODO: check if the hit object was a AbilityInteractionTrigger
        AbilityInteractionTrigger interactionTrigger = hitObject.GetComponent <AbilityInteractionTrigger>();

        if (interactionTrigger && interactionTrigger.Abilities.Contains(Ability))
        {
            interactionTrigger.Interact();
        }

        CharacterBase hitCharacter = GetParentCharacterBase(hitObject.transform);



        OnHit?.Invoke(useableAbility.CharacterBase, hitObject, hitPoint, hitDirection, surfaceNormal);

        float damageDealt = Ability.AddOwnerBaseAttack ? damage + (OwnerCharacter.AttackModifier * Ability.OwnerBaseAttackScalar) : damage;

        if (!hitCharacter)
        {
            Debug.Log($"Character:{OwnerCharacter.name} hit with:{Ability.Name} dealing:{damageDealt} to non character object");
            foreach (var hitEffect in Ability.ObjectHitEffects)
            {
                useableAbility.InstantiateObject(hitEffect, hitPoint, Quaternion.identity);
            }
        }
        else if (hitCharacter != OwnerCharacter)
        {
            hitCharacter.TakeDamage(damageDealt);
            Debug.Log($"Character:{OwnerCharacter.name} hit character:{hitCharacter.name} with:{Ability.Name} dealing:{damageDealt}, target def:{hitCharacter.DefenseModifier}");

            foreach (var hitEffect in Ability.CharacterHitEffects)
            {
                useableAbility.InstantiateObject(hitEffect, hitPoint, Quaternion.identity);
            }
        }

        OnEndAttack?.Invoke(hitCharacter);
    }
示例#3
0
 public void Attack() // should be class
 {
     if (CurrentSnapPoint.Index.y != preset.AvaliableAttackRange)
     {
         StartCoroutine(Wait(() =>
         {
             IsMoved = true;
             OnEndAttack.Invoke();
         }, 0.4f));
         return;
     }
     transform.DOScale(new Vector3(1.2f, 1.2f, 1.2f), 0.2f).onComplete += () =>
     {
         transform.DOScale(Vector3.one, 0.2f).onComplete += () =>
         {
             target.TakeDamage(preset.Damage);
             IsMoved = true;
             OnEndAttack.Invoke();
         };
     };
 }
示例#4
0
 public void OnEndAnimation()
 {
     OnEndAttack?.Invoke();
 }