Exemple #1
0
        //private void OnTriggerEnter2D(Collision2D collisionData)
        //{
        //    this.CollisionDamage(collisionData);
        //}

        private void CollisionDamage(Collision2D collisionData)
        {
            if (!this.GetPool().IsSpawned())
            {
                return;
            }
            if (collisionData.contacts == null)
            {
                return;
            }
            if (collisionData.contactCount < 1)
            {
                return;
            }

            var point  = collisionData.contacts[0].point;
            var normal = collisionData.contacts[0].normal;
            var angle  = Vector3.Angle(normal, -this.transform.forward);

            IDamageReciver damagable = null;

            if (collisionData.rigidbody != null)
            {
                damagable      = collisionData.rigidbody.gameObject.GetComponent <IDamageReciver>();
                _rb2d.velocity = _lastVelocity = collisionData.rigidbody.velocity;
            }
            if (damagable != null)
            {
                _rb2d.velocity = _lastVelocity = Vector3.zero;
                damagable.Hit(_damage);
            }

            this.Despawn();
        }
Exemple #2
0
        public void CollisionDamage(Collision2D collisionData)
        {
            IDamageReciver damaged = null;

            if (collisionData.rigidbody != null)
            {
                //damaged = collisionData.collider.gameObject.GetComponent<IDamageReciver>();
                damaged = collisionData.rigidbody.gameObject.GetComponent <IDamageReciver>();
            }

            if (damaged != null)
            {
                ////float e = 0.5f * collision.relativeVelocity.sqrMagnitude * _rb2d.mass;
                ////Vector2 normal = collision.contacts[0].normal;
                ////Vector2 velocity = collision.relativeVelocity;
                ////float v = Vector2.Dot(normal, velocity);
                ////float m = _rb2d.mass;
                ////float e = 0.5f * v * v * m;

                //Vector2 n = collision.contacts[0].normal;
                //Vector2 v = collision.relativeVelocity;
                //float dot = Vector2.Dot(n, v.normalized);
                //if (dot < Random.Range(0f, 0.5f)) return;
                //float v2 = dot * dot * v.sqrMagnitude;
                //if (Mathf.Abs(v2) < THR)
                //{
                //    v2 = 0f;
                //    Debug.Log(v2.ToString());
                //}
                //float m = _rb2d.mass;
                //float e = 0.5f * v2 * m;
                ////float e2 = 0.5f * collision.relativeVelocity.sqrMagnitude * _rb2d.mass;

                var e = CalculateCollisionDamage(collisionData);
                if (e > 0)
                {
                    damaged.Hit(e);
                    CreateFX(collisionData);
                }
            }
            else // Self
            {
                //var e = CalculateCollisionDamage(collisionData);
                //gameObject.GetComponent<IDamageReciver>().TakeDamageCollision(e);
            }
        }