Example #1
0
        private void Update()
        {
            _countdown -= Time.deltaTime;

            if (!(_countdown <= 0f))
            {
                return;
            }
            OnExplode?.Invoke();
            Destroy(gameObject);
        }
    public void Explode()
    {
        var hitted = new HashSet <Destructable>();
        var pos    = transform.position;

        foreach (var damage in damages)
        {
            var colliders = Physics.OverlapSphere(pos, damage.radius);

            foreach (var collider in colliders)
            {
                var dest = collider.GetComponent <Destructable>();
                if (dest != null && !hitted.Contains(dest))
                {
                    hitted.Add(dest);
                    dest.Hit(damage.hitPower);
                }
            }
        }

        gameObject.SetActive(false);

        OnExplode?.Invoke();
    }
Example #3
0
        public override void Update(Microsoft.Xna.Framework.GameTime gameTime)
        {
            base.Update(gameTime);
            if (counter > 0)
            {
                counter -= gameTime.ElapsedGameTime.Milliseconds;

                ledSegment[0].SetValue((uint)((counter % 1000) / 100));
                ledSegment[1].SetValue((uint)((counter % 10000) / 1000));
                if (counter < 10000)
                {
                    ledSegment[2].Visible = false;
                }
                else
                {
                    ledSegment[2].SetValue((uint)((counter % 100000) / 10000));
                }

                if (counter <= 0)
                {
                    OnExplode.Invoke(this);
                }
            }
        }
Example #4
0
 private void Explode()
 {
     OnExplode?.Invoke();
     Destroy(gameObject);
 }
 protected void explode()
 {
     explosion.Explode();
     OnExplode?.Invoke(this);
 }
        private IEnumerator explodey(explosionType explosiontype, Vector3 position, float power, float radius)
        {
            if (StatMaster.isClient)
            {
                yield break;
            }

            if (isExplodey)
            {
                yield break;
            }
            else
            {
                fireEffect = getExplodeEffectObject(explosiontype);
                if (ExplosionType == explosionType.Big)
                {
                    fireEffect.transform.FindChild("Debris").localRotation = Quaternion.AngleAxis(UnityEngine.Random.Range(0f, 360f), Vector3.up);
                }
                fireEffect.transform.position = position;

                if (!StatMaster.isClient)
                {
                    var message = ExplodyMessage.CreateMessage((int)explosiontype, position);
                    ModNetworking.SendToAll(message);
                }
            }

            yield return(new WaitForFixedUpdate());

            isExplodey = true;
            fireEffect.SetActive(true);
            OnExplode?.Invoke();

            //定义爆炸位置为炸弹位置
            Vector3 explosionPos = position;

            //这个方法用来返回球型半径之内(包括半径)的所有碰撞体collider[]
            Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);

            //遍历返回的碰撞体,如果是刚体,则给刚体添加力
            foreach (Collider hit in colliders)
            {
                if (hit.attachedRigidbody != null)
                {
                    float force = UnityEngine.Random.Range(30000f, 50000f) * power * (Vector3.Distance(hit.transform.position, explosionPos) / (radius + 0.25f));
                    hit.attachedRigidbody.AddExplosionForce(force, explosionPos, radius);
                    hit.attachedRigidbody.AddTorque(force * Vector3.Cross((hit.transform.position - explosionPos), Vector3.up));

                    reduceBlockHealth(hit.attachedRigidbody.gameObject);
                }
            }

            OnExploded?.Invoke(colliders);
            yield return(new WaitForSeconds(3f));

            fireEffect.SetActive(false);
            OnExplodeFinal?.Invoke();
            //-------------------------------------------------------------
            void reduceBlockHealth(GameObject gameObject)
            {
                var bhb = gameObject.GetComponent <BlockHealthBar>();

                if (bhb != null)
                {
                    bhb.DamageBlock(1);
                }
            }

            //---------------------------------------------------------------
        }
Example #7
0
 public void Explode()
 {
     //Create Explosion
     OnExplode?.Invoke();
     Destroy(gameObject);
 }
 private void Explode()
 {
     //effect.GetComponent<Light>().enabled = false;
     effect.GetComponentInChildren <ParticleSystem>().Stop();
     OnExplode?.Invoke();
 }