public void DequeueCharacterToAct() { switch (currentTeamTurn) { case TeamTurn.player: DungeonBaseController.instance.m_PlayerController.Activate(); SwitchCurrentState(TurnManagerState.idle); bool ready = true; foreach (CharacterBaseController enemy in DungeonBaseController.instance.enemies) { if (!(enemy.currentCharacterStatus == CharacterStatus.idle || enemy.currentCharacterStatus == CharacterStatus.defeated)) { ready = false; } } if (ready) { CharacterBaseController playerController = DungeonBaseController.instance.m_PlayerController; if (playerController.currentCharacterStatus == CharacterStatus.idle) { CharacterBaseController[] allCharacters = new CharacterBaseController[DungeonBaseController.instance.allCharacters.Count]; DungeonBaseController.instance.allCharacters.CopyTo(allCharacters); playerController.Activate(); SwitchCurrentState(TurnManagerState.idle); } } break; case TeamTurn.enemies: if (enemiesToAct.Count > 0) { characterToAct = enemiesToAct.Dequeue(); if (characterToAct != null) { ActivateEnemy(); } else { Debug.Log("No character to act?"); } } else { SwitchCurrentState(TurnManagerState.acting); } break; } }
private void ActivateEnemy() { // Check if hte player is standing on the tile in front of the enemy at the start of their turn. TileBase tile = characterToAct.m_MovementController.CheckTile(characterToAct.transform.forward); if (tile.occupant == DungeonBaseController.instance.m_Player) { DungeonBaseController.instance.enemiesToAttack.Enqueue(characterToAct); DequeueCharacterToAct(); } else { characterToAct.Activate(); SwitchCurrentState(TurnManagerState.idle); } }