async private void KillEnemy(IEnemyController controllerToKill) { if (controllerToKill.GetEnemyType() == EnemyType.DOGS) { starService.DogsKilled(); } await controllerToKill.PlayAnimation(EnemyStates.DEATH); enemyList.Remove(controllerToKill); controllerToKill.Reset(); signalBus.TryFire(new EnemyDeathSignal() { nodeID = controllerToKill.GetCurrentNodeID() }); }
async public void EnemyDead(EnemyKillSignal _killSignal) { var tempList = enemyList; for (int i = 0; i < tempList.Count; i++) { IEnemyController enemyController = tempList[i]; if (enemyController.GetCurrentNodeID() == _killSignal.nodeID) { if (CheckForKillableEnemy(enemyController, _killSignal.killMode)) { enemyList.Remove(enemyController); await enemyController.PlayAnimation(EnemyStates.DEATH); enemyController.Reset(); } } } bool allDogsKilled = true; foreach (IEnemyController enemyController in enemyList) { if (enemyController.GetEnemyType() == EnemyType.DOGS) { allDogsKilled = false; } } if (allDogsKilled) { starService.AllDogsKilled(); } if (enemyList.Count == 0) { starService.AllDogsKilled(); gameService.ChangeToPlayerState(); } await new WaitForEndOfFrame(); }
async private Task PerformMovement() { if (enemyList.Count == 0) { if (!playerService.PlayerDeathStatus()) { gameService.ChangeToPlayerState(); } return; } List <IEnemyController> KillableEnemies = new List <IEnemyController>(); List <Task> taskToKill = new List <Task>(); Task moveTask; for (int i = 0; i < enemyList.Count; i++) { IEnemyController controller = enemyList[i]; if (!playerService.PlayerDeathStatus()) { if (CheckForEnemyPresence(controller, playerService.GetPlayerNodeID()) && CheckForKillablePlayer(controller.GetEnemyType())) { KillableEnemies.Add(controller); continue; } else { moveTask = controller.Move(); moveTaskList.Add(moveTask); } } } await Task.WhenAll(moveTaskList.ToArray()); moveTaskList.Clear(); IEnemyController controllerToKill; for (int i = 0; i < KillableEnemies.Count; i++) { controllerToKill = KillableEnemies[i]; KillEnemy(controllerToKill); } if (!playerService.PlayerDeathStatus()) { gameService.ChangeToPlayerState(); } }