Ejemplo n.º 1
0
    public virtual void Die(Collider2D hazard)
    {
        if (isDead || !canDie)
        {
            return;
        }

        isDead = true;

        // determine knockback direction
        Vector2 knockback = -(hazard.ClosestPoint(transform.position) - transform.position.xy());

        if (knockback == Vector2.zero)
        {
            knockback = -rb2d.velocity;
        }
        if (knockback == Vector2.zero)
        {
            knockback = -transform.right;
        }
        knockback = knockback.normalized;

        sprite.color = deathColor;
        audioSource.PlayOneShot(deathSound);
        DOTween.Sequence()
        .Insert(0, transform.DOMove(transform.position + knockback.xyz(), 0.5f).SetEase(Ease.OutCubic))
        .Insert(0, sprite.transform.DOShakePosition(0.5f, 1, 100, 90))
        .InsertCallback(0.5f, () => {
            audioSource.PlayOneShot(explodeSound);
        })
        .Insert(0.5f, sprite.transform.DOScale(Vector3.zero, 0.2f).SetEase(Ease.InBack))
        .InsertCallback(0.6f, () => {
            Instantiate(deathParticles, transform.position, Quaternion.identity);
        })
        .SetTarget(gameObject)
        .SetLink(gameObject)
        .SetUpdate(UpdateType.Fixed);

        OnDeath?.Invoke(this);
    }
    private void OnEntityHit(Entity entity)
    {
        // do the damage
        entity.GetDamage(damage, sender, AttackType.Projectile);

        var charController = GetComponent <CharController>();

        if (charController != null)
        {
            charController.OnAttackHit(charController, CharacterAttackType.Projectile, damage);
        }

        EventOnEntityHit?.Invoke();            // non static event
        OnProjectileHitEntity?.Invoke(entity); // static event

        if (entity is CharacterEntity || entity is VirusSpawner || entity.GetComponent <VirusController>() != null)
        {
            ObjectPooler.Instance.EnqueueGameObject("projectile", gameObject);
        }
        else
        {
            Freeze();
        }
    }