public void StartBattle(InstancePokemonObject pokemon) { OnBattleStart.Invoke(pokemon); cameraSwitcher.EnterBattle(); //messageText.PlayText(pokemon.name); // TODO make these 2 listeners to OnBattleStart enemyUI.InitializePanel(pokemon); enemyPokemon.SetPokemon(pokemon, false); pokeManager.SendPokemon(); }
public void StartBattle() { print("StartBattle()"); OnBattleStart.Invoke(pkmn); anim.Play("Off"); }
IEnumerator BattleCoroutine(Hero _attacker, Hero _attacked) { DataManager.instance.gameState = GameState.Battle; onStartBattle.Invoke(_attacker, _attacked); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); // First the attacker attack onHeroAttack.Invoke(_attacker, _attacked); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); // If the attacked is alive, then attack if (_attacked.isAlive) { onHeroAttack.Invoke(_attacked, _attacker); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); } // Check for speed superiority : // if one of them has 5 more in speed than the other // then attack a second time in the turn if (_attacker.speed >= _attacked.speed + 5) { onHeroAttack.Invoke(_attacker, _attacked); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); } else if (_attacked.speed >= _attacker.speed + 5) { onHeroAttack.Invoke(_attacked, _attacker); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); } battleCoroutine = null; onEndCutscene.Invoke(); // Wait the end of animation continueBattle = false; yield return(new WaitUntil(() => continueBattle)); if (_attacker.isAlive && _attacker.expChanged) { HeroExpInfo info = _attacker.CheckCurrentLevel(); onExpGain.Invoke(info); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); } if (_attacked.isAlive && _attacked.expChanged) { HeroExpInfo info = _attacked.CheckCurrentLevel(); onExpGain.Invoke(info); continueBattle = false; yield return(new WaitUntil(() => continueBattle)); } DataManager.instance.gameState = GameState.Playing; onEndBattle.Invoke(); }
IEnumerator ActPhase(BattleEvent playerEvent, BattleEvent enemyEvent) { for (int i = 0; i < 2; i++) { bool isFriendlyTurn = i == 0; float previousPlayerHealth = _myPokemon.Health; float previousEnemyHealth = _enemyPokemon.Health; _dialogueController.ClearPages(); if (isFriendlyTurn) // 아군의 턴 { playerEvent.Invoke(_myPokemon, _enemyPokemon); // 상태 이상 if (_myPokemon._effectCount > 0) { _myPokemon._effectCount--; } else { _myPokemon._status = Pokemon.StatusEffect.None; } } else // 적의 턴 { enemyEvent.Invoke(_enemyPokemon, _myPokemon); // 상태 이상 if (_enemyPokemon._effectCount > 0) { _enemyPokemon._effectCount--; } else { _enemyPokemon._status = Pokemon.StatusEffect.None; } } // 대사 1(데미지 판정 이전) _dialogueController.NextDialogue(); yield return(_waitDialogueUpdating); _uiManager._effect.StartAnim(i); yield return(new WaitUntil(() => _uiManager._effect._isAnimating == false)); _uiManager._effect.ResetAnim(); if (_myPokemon.Health != previousPlayerHealth) { if (_myPokemon.Health < previousPlayerHealth) { _uiManager._mainUI.HitPlayer(); StartCoroutine("PlayHitSound"); } _uiManager._mainUI.UpdatePlayerHpUI(_myPokemon.Health, _myPokemon.MaxHealth, true); } if (_enemyPokemon.Health != previousEnemyHealth) { if (_enemyPokemon.Health < previousEnemyHealth) { _uiManager._mainUI.HitEnemy(); StartCoroutine("PlayHitSound"); } _uiManager._mainUI.UpdateEnemyHpUI(_enemyPokemon.Health, _enemyPokemon.MaxHealth, true); } yield return(0.1f); yield return(_waitUIUpdating); // 대사 2(데미지 판정 이후) _dialogueController.NextDialogue(); yield return(_waitDialogueUpdating); yield return(_waitInputing); _dialogueController.EndDialogue(); if (_isGameOver) { break; } } // 게임 종료 체크 if (_isGameOver) { StartCoroutine("EndBattle"); } else { SelectAction(); } }