IEnumerator HideWeapon() { yield return(new WaitForSeconds(0.2f)); weapon.Hide(); OnEndAttack?.Invoke(); }
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); }
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(); }; }; }
public void OnEndAnimation() { OnEndAttack?.Invoke(); }