/**********************************************************************************/ // взрываем гранату // /**********************************************************************************/ protected virtual void BlowUpGrenade() { Point position = GetGlobalPosition(); List <CIGameObject> unitsInExplosion = GameObjectMapController.GetInstance().SearchEnemiesInRadius(position, ExplosionRadius, PLAYER.NO_PLAYER, false); DamageData dd = new DamageData(damage, DamageData.DAMAGE_TYPE.PHYSICAL, this, DamageData.RESPONSE.NOT_EXPECTED); // наносим урон всем причастным foreach (CIGameObject gmo in unitsInExplosion) { gmo.ApplyDamage(dd); } List <GeneratedEnvironmentCtr> envInExplosion = GameObjectMapController.GetInstance().SearchEnvironmentInRadius(position, ExplosionRadius, false); // наносим урон всем причастным foreach (CIGameObject env in envInExplosion) { env.ApplyDamage(dd); } // проверяем игроков foreach (CIGameObject plObject in m_players) { Point plPosition = plObject.GetGlobalPosition(); Point diff = position - plPosition; if (diff.GetSimpleLength() <= ExplosionRadius) { plObject.ApplyDamage(dd); } } // трясём камеру CameraControllerDuelMode.ShakeCamera(ShakePower); }
/**********************************************************************************/ // переключаем нашу пулю в состояние "взрыва" // /**********************************************************************************/ protected void BurnBullet() { CameraControllerDuelMode.ShakeCamera(ShakePower); // сотрясаем камеру, если нужно m_state = BULLET_STATE.BURN; m_animator.SetBool("Burn", true); PlayBurstSoundEffect(); }
/**********************************************************************************/ // процессинг дроп-пода // /**********************************************************************************/ private void FixedUpdate() { // приостанавливаем всё на время паузы if (GameManager.GamePaused) { if (m_rb2d.velocity.sqrMagnitude != 0.0f) { m_rb2d.velocity = new Vector2(0, 0); } return; } // падаем вниз if (m_dropState == DR_STATE.ACTIVE) { m_currentDropTime -= Time.deltaTime; if (m_currentDropTime <= 0.0f) { m_dropState = DR_STATE.DROPPED; m_animator.SetBool("Burn", true); // включаем звуковой эффект и анимацию частиц if (BurstSoundKey != "") { GameAudioManager.Instance.PlaySound(BurstSoundKey); } BurstSystem.Play(); // трясём камеру CameraControllerDuelMode.ShakeCamera(); } else { MoveGObject(Base.DIREC.DOWN); } } // проверка на окончание анимации // после неё объект возвращается в пулл объектов фабрики // и создаем объект дропа else if (m_dropState == DR_STATE.DROPPED) { if (m_animator.GetCurrentAnimatorStateInfo(0).IsName("Base_Layer.EndOfAnimation")) { m_animator.SetBool("Burn", false); gameObject.SetActive(false); m_dropState = DR_STATE.FINISHED; GameObject go = ObjectFactory.GetInstance().CreateGObject(transform.position, Base.DIREC.DOWN, m_dropType, false); // создаём дроп // устанавливаем производстенную базу в null, в случае с дропом этот механизм не используется BonusCtr bctr = go.GetComponent <BonusCtr>(); if (bctr != null) { bctr.ProductionBase = null; } ObjectFactory.GetInstance().ReturnObjectToCash(gameObject, GOType); // возвращаем объект дроп-пода в кеш фабрики объектов } } }