コード例 #1
0
        public void Explode()
        {
            if (_exploded)
            {
                return;
            }
            _exploded = true;
            if (ExplosionModel != null)
            {
                GameObject explosion = Instantiate(ExplosionModel.gameObject, transform.position, transform.rotation);
                explosion.GetComponent <Explosion>().Init(4.0f);
            }
            GameObject[] targets = FindObjectsOfType <GameObject>();

            // Damage contacter
            if (_contact != null)
            {
                GameObject contacter = _contact.gameObject;
                IPlaceable placeable = contacter.GetComponent <IPlaceable>();
                if (placeable != null)
                {
                    placeable.ReceiveDamage(ContactDamage);
                }
            }

            foreach (var tar in targets)
            {
                IPlaceable placeable = tar.GetComponent <IPlaceable>();
                if (placeable == null)
                {
                    continue;
                }
                //float dist = Vector2.Distance(transform.position, tar.transform.position);
                float dist = Physics2D.Distance(transform.GetComponent <Collider2D>(),
                                                tar.transform.GetComponent <Collider2D>()).distance;
                if (dist >= ExplosionRadius)
                {
                    continue;
                }
                float dmg = CalculateDamage(dist);
                if (dmg > 0)
                {
                    tar.GetComponent <IPlaceable>().ReceiveDamage(dmg);
                }
            }
            Destroy(gameObject);
        }