public void DoAttack() { TdUnit target; if (m_nextEffectTrigger == null || !m_nextEffectTrigger.TryGetTarget(out target)) { m_nextEffectTrigger = null; m_nextAttackData = null; return; } if (m_nextAttackData.GetType() == typeof(ArtilleryData)) { var artilleryProjectile = Instantiate(m_artilleryProjectile, m_canon.transform.position, Quaternion.identity, m_canon).GetComponent <ArtilleryProjectile>(); if (artilleryProjectile != null) { artilleryProjectile.Init((ProjectileData)m_nextAttackData, target.transform.position, GetFinalStat(EStat.AttackBuff)); } } else if (m_nextAttackData.GetType() == typeof(HomingProjectileData)) { var homingProjectile = Instantiate(m_homingProjectile, m_canon.transform.position, Quaternion.identity, m_canon).GetComponent <HomingProjectile>(); if (homingProjectile != null) { homingProjectile.Init((ProjectileData)m_nextAttackData, target, GetFinalStat(EStat.AttackBuff)); } } else if (m_nextAttackData.GetType() == typeof(InstantAttackData)) { var instantAttackData = (InstantAttackData)m_nextAttackData; if (instantAttackData.m_onHitVfx != null) { Instantiate(instantAttackData.m_onHitVfx, target.transform.position, Quaternion.identity, target.transform); } target.Damage(Projectile.GetFinalDamage(m_nextAttackData, target, GetFinalStat(EStat.AttackBuff))); } m_nextEffectTrigger = null; m_nextAttackData = null; }
protected void Attack(AttackData data, AttackEffectTrigger trigger) { m_nextAttackData = data; m_nextEffectTrigger = trigger; m_animator.SetTrigger(ATTACK_TRIGGER); }