private void Awake() { // setup events //knightDeathEvent = new KnightDeathEvent(); //EventManager.AddKnightDeathInvoker(this); enemyDeathEvent = new EnemyDeathEvent(); enemyResurrectEvent = new EnemyResurrectEvent(); animator = GetComponent <Animator>(); rb2d = GetComponent <Rigidbody2D>(); isKinematicInitially = rb2d.isKinematic; col2D = GetComponent <CapsuleCollider2D>(); halfColHeight = col2D.size.y / 2; halfColWidth = col2D.size.x / 2; colliderOffsetY = col2D.offset.y; colliderOffsetX = col2D.offset.x; moveTimer = gameObject.AddComponent <Timer>(); moveTimer.AddTimerFinishedEventListener(StartMoving); // rewind setup states = new List <EnemyTimeState>(); // make the enemies be at slightly different depths float offsetZ = Random.Range(-0.01f, 0.01f); Vector3 position = transform.position + offsetZ * Vector3.forward; transform.position = position; }
} // Is the agent alive or not? #endregion #region Methods // Use this for initialization protected virtual void Start() { //Debug.Log("Called"); Alive = true; // Initialize events mouseOverEvent = new EnemyMouseOverEvent(); enemyDeathEvent = new EnemyDeathEvent(); enemyPursueEvent = new EnemyFoundEvent(); // Add this script to the list of invokers for the EnemyMouseOverEvent EventManager.AddEnemyMouseOverInvoker(this); EventManager.AddEnemyDeathInvoker(this); GetComponentInChildren <FOVScript>().AddEnemyFoundEventListener(OnEnemyAttackEvent); // Initialize object variables speed = MAX_SPEED; nextSpot = 0; patrolDirection = PatrolDirection.FORWARD; path = new List <Vector3>(); animator = GetComponent <Animator>(); // Start in the wait state TransitionToWaitState(); }
IEnumerator DeathAnimCoroutine(Enemy enemy) { if (!enemy.isDead) { enemy.canAttack = false; enemy.isDead = true; if (enemy.GetComponent <LookAtPlayer>() != null) { enemy.GetComponent <LookAtPlayer>().canLookAt = false; } var playerPos = GameObject.Find("Player").transform.position; var distance = new Vector3(playerPos.x, enemy.gameObject.transform.position.y, playerPos.z) - enemy.gameObject.transform.position; Vector3 direction = -distance.normalized * 2.5f; var origin = enemy.gameObject.transform.position; var destination = origin + direction; var speedRatio = 10; while (enemy.gameObject.transform.position != destination) { enemy.transform.position = Vector3.Lerp(enemy.gameObject.transform.position, destination, 2f * speedRatio * (Time.deltaTime) * Config.TimeScale); speedRatio++; yield return(0); } yield return(new WaitForSeconds(0.01f)); enemy.gameObject.SetActive(false); var go = GameObject.Instantiate(enemyParticle, enemy.gameObject.transform.position, Quaternion.identity); SFXManager.PlaySFX(SFXManager.Explosion, go.GetComponent <AudioSource>()); go.AddComponent <ParticleStoper>(); EnemyDeathEvent?.Invoke(); enemy.setPositionInitialPOsition(); } }
private void Awake() { onDeathEvent = new EnemyDeathEvent(); movement = GetComponent <Movement>(); attack = GetComponent <Attack>(); health = GetComponent <Health>(); }
private void OnEnemyDeath(EnemyDeathEvent obj) { enemies.Remove(obj.enemy); if (!lastEnemySpawned) { return; } if (enemies.Count == 0) { DispatchWaveFinishedEvent(); } }
public override void Awake() { base.Awake(); OnPlayerShot = new PlayerShotEvent(); OnEnemyDeath = new EnemyDeathEvent(); OnEnemyHitPlayer = new UnityEvent(); OnPlayerDeath = new UnityEvent(); OnUpdateHeath = new UpdateHeathEvent(); OnUpdateScore = new UpdateScoreEvent(); OnUpgradeLevel = new UpgradeLevelEvent(); }
void Awake() { CheckpointReachedEvent.Register(OnCheckpointPassed); EnemyDeathEvent.Register(onEnemyKilled); GameOverEvent.Register(onGameOver); PickUpEvent.Register(onPickup); PlayerDamagedEvent.Register(onPlayerDamaged); PlayerDeathEvent.Register(onPlayerDeath); GameStartEvent.Register(onGameStart); respawnCounter = Lives; RespawnFadeObject = GameObject.Find(RespawnFadeObjectName); }
private void OnAIDeathEvent(EnemyDeathEvent data) { if (data.ParticleEffectType == ParticleEffectType.None) { return; } GameObject gameObject = GetParticleOfType(data.ParticleEffectType, particleEffects[data.ParticleEffectType].ParticleEffectVisual); gameObject.SetActive(true); gameObject.transform.position = data.Position; gameObject.transform.rotation = Random.rotation; PlayParticle(gameObject, particleEffects[data.ParticleEffectType].ParticleDuration); }
public EnemyDeathEvent DeathEventData() { EnemyDeathEvent deathEvent = new EnemyDeathEvent() { GameObject = gameObject, Position = transform.position, ParticleEffectType = ParticleEffectType.EnemyDeath, EnemyType = GetComponent <AI_Behaviour>().EnemyType, HealthPoint = this, AI_Behaviour = GetComponent <AI_Behaviour>(), }; return(deathEvent); }
// Enemy death event private void OnDeathEvent(EnemyDeathEvent deathEvent) { EnemyType enemy = deathEvent.EnemyType; int loops = enemyScore.Length; for (var i = 0; i < loops; i++) { if (enemy == enemyScore[i].enemy) { // Score AddPlayerScore(enemyScore[i].killScore); } } }
protected override void EnemyDeath(EnemyDeathEvent e) { if (e.DeathEnemy is Solider && soilders.Contains((Solider)e.DeathEnemy)) { int index = soilders.IndexOf((Solider)e.DeathEnemy); soilders.RemoveAt(index); GameObject obj = objPool[index]; //objPool.Remove(obj); //Destroy(obj); Debug.Log(soilders.Count + "마리 남았다"); } else { Debug.LogWarning("잘못된 엔티티가 넘어왔습니다."); } }
/// <summary> /// Enemy 사망 시 1회 호출되는 함수. /// </summary> void OnDeath() { //사망 애니메이션 업데이트 AnimController.SetBool("IsDead", true); //컨트롤러 비활성화. Controller.Stop(); ///사망 이벤트 전달. var deathEvent = new EnemyDeathEvent() { Sender = this }; SoundManager.Instance.PlayClipAtPoint("EnemyDeath1", transform.position); MessageSystem.Instance.Publish(deathEvent); //GameObject 비활성화. gameObject.SetActive(false); Debug.Log($"나 {gameObject.name}, 여기서 죽다."); }
public void Handle(EnemyDeathEvent @event) { _inRangeEnemies.Remove(@event.Enemy); FindClosestEnemy(); }
protected abstract void EnemyDeath(EnemyDeathEvent e);
private void AddScore(EnemyDeathEvent e) { score += e.DeathEnemyWorth; }
private void OnDisable() { OnEnemyDeath -= Death; }
private void Awake() { OnEnemyDeath += Death; }
void onEnemyKilled(EnemyDeathEvent enemyDeathEvent) { tempStatsData.EnemiesKilled++; print("KILLED ENEMY TRACKED"); }
void Start() { audioSource = GetComponent <AudioSource>(); EnemyDeathEvent.Register(onEnemyDeath); }
public void Handle(EnemyDeathEvent @event) { _configData.PlayerData.Money += _configData.KillReward; }
private void OnEnemyDeath(EnemyDeathEvent deathEvent) { enemyTypeBehaviour[deathEvent.EnemyType].Remove(deathEvent.AI_Behaviour); enemies.Remove(deathEvent.AI_Behaviour); }
private void OnDeathEvent(EnemyDeathEvent deathEvent) { bool foundID = false; int instanceID = deathEvent.GameObject.GetInstanceID(); int loopsTier1 = arraySize; for (var i = 0; i < loopsTier1; i++) { // Only check limited (list) if (spawnActiveMax[i] == 0) { continue; } List <int> instanceIDList = spawnActiveMaxListHolder[spawnActiveMaxIndex[i]]; int loopsTier2 = spawnActiveMaxListHolder[spawnActiveMaxIndex[i]].Count; for (var j = 0; j < loopsTier2; j++) { // Match if (instanceIDList[j] == instanceID) { instanceIDList.RemoveAt(j); // Stop loop foundID = true; break; } } // Stop loop if (foundID == true) { break; } } // Clear stage if (clearStage == false) { return; } foundID = false; instanceID = deathEvent.GameObject.GetInstanceID(); loopsTier1 = arraySize; for (var i = 0; i < loopsTier1; i++) { // Only check limited (list) if (spawnLimited[i] == false || spawnClearDone[i] == true) { continue; } List <int> instanceIDList = spawnClearListHolder[spawnClearIndex[i]]; int loopsTier2 = spawnClearListHolder[spawnClearIndex[i]].Count; for (var j = 0; j < loopsTier2; j++) { // Match if (instanceIDList[j] == instanceID) { instanceIDList.RemoveAt(j); spawnClearCount[i]++; // List done if (spawnClearCount[i] == spawnLimit[i]) { spawnClearCountDone++; spawnClearDone[i] = true; } // Stop loop foundID = true; break; } } // Stop loop if (foundID == true) { break; } } // Next stage if (spawnClearCountDone == spawnClearCountMax) { nextStage = true; } }
void onEnemyDeath(EnemyDeathEvent enemyDeathEvent) { audioSource.PlayOneShot(audioClip); }