Esempio n. 1
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (gameObject.layer != 9)
        {
            return;
        }
        if (collision.collider.GetComponent <Bird>() || collision.collider.GetComponent <BlueBirdClone>() || collision.collider.GetComponent <Egg>())
        {
            return;
        }
        if (Mathf.Approximately(RigidbodySelf.gravityScale, 0))
        {
            RigidbodySelf.gravityScale = g;
        }

        IPassiveDamageObject passiveDamageObject = collision.collider.GetComponent <IPassiveDamageObject>();

        if (passiveDamageObject != null && collision.relativeVelocity.magnitude > criticalSpeed)
        {
            if (passiveDamageObject is Obstacle obstacle)
            {
                passiveDamageObject.ChangeHp(Damage * DamageCoefficient[(int)System.Enum.Parse(typeof(AttackObstacleType), obstacle.tag)], true);
            }
            else
            {
                passiveDamageObject.ChangeHp(Damage, true);
            }
        }

        if (State == BehaviorState.Fly)
        {
            TrailRenderer.emitting = false;

            animator.SetTrigger("Damaged");
            GameManager.Instance.AudioSystemControl.Play(audioSource, tag + "Hurt");
            GameManager.Instance.BirdControlSystemControl.ClearTrail();

            StartCoroutine(StopFollowing());
            StartCoroutine(DeadBefore());
        }

        if (collision.relativeVelocity.magnitude > criticalSpeed)
        {
            SetParticle();
        }

        State = BehaviorState.FinalRoll;
    }
Esempio n. 2
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (hurtState == HurtState.Dead || collision.collider.GetComponent <Bird>() != null)
        {
            return;
        }

        IPassiveDamageObject damageObject = collision.collider.GetComponent <IPassiveDamageObject>();
        float damageAdd = 1.0f;

        if (collision.relativeVelocity.magnitude > criticalSpeed)
        {
            if (damageObject != null)
            {
                damageAdd = damageObject.Damage;
            }
            ChangeHp((collision.relativeVelocity.magnitude - criticalSpeed) * damageAdd);
        }
    }
Esempio n. 3
0
    private void Explosion()
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(rigidbodySelf.position, explosionRadius);
        foreach (Collider2D obj in colliders)
        {
            Rigidbody2D          rigidbody           = obj.GetComponent <Rigidbody2D>();
            IPassiveDamageObject passiveDamageObject = obj.GetComponent <IPassiveDamageObject>();

            if (!rigidbody || passiveDamageObject == null)
            {
                continue;
            }
            AddForce(rigidbody);

            passiveDamageObject.Hp -= eggDamage;
        }

        rigidbodySelf.velocity    = Vector2.zero;
        rigidbodySelf.isKinematic = true;

        GameManager.Instance.AudioSystemControl.Play(audioSource, "EggBoom");
        animator.SetTrigger("Exp");
    }