public IEnumerator BattleBegin()
    {
        // set playerCanMove false: use converseState
        enemy.refPlayer.stateMachine.SwitchState(enemy.refPlayer.converseState);
        enemy.refPlayer.FaceTo(enemy.aliveGO.transform.position);
        // enemy.npc.npcConversationHandler.gameObject.SetActive(true);
        // enemy.npc.npcConversationHandler.InfoSignAnim.gameObject.SetActive(false);
        // enemy.npc.npcConversationHandler.selectionBox.gameObject.SetActive(false);
        // start conversation
        yield return(new WaitForSeconds(battleBeginDelay));

        NPCEventHandler npcEventHandler = enemy.npc.GetComponentInChildren <NPCEventHandler>();

        enemy.refPlayer.SetNPCEventHandler(npcEventHandler);
        enemy.npc.npcConversationHandler.gameObject.SetActive(true);
        npcEventHandler.OnNPCInteraction();

        yield return(new WaitForEndOfFrame());

        enemy.npc.npcConversationHandler.ResetTotalTime();

        //npcEventHandler.OnNPCInteraction();

        yield return(new WaitWhile(() => npcEventHandler.IsInteraction));

        enemy.npc.gameObject.SetActive(false);
        enemy.refPlayer.stateMachine.SwitchState(enemy.refPlayer.cinemaState);
        enemy.refPlayer.SetNPCEventHandler(null);
        // end conversation

        // yield return new WaitForSeconds(battleBeginDelay);
        var gm = GameObject.Find("GameManager").GetComponent <GameManager>();

        enemy.anim.SetBool("isBattleBegin", true);
        yield return(new WaitUntil(() => isBattleBegin));

        // set player position
        // play ui fade in
        yield return(new WaitForSeconds(gm.uiHandler.uiEffectHandler.OnPlayUIEffect(UIEffect.Transition_CrossFade, UIEffectAnimationClip.start)));

        Vector3 goyePos   = enemy.transform.Find("Combat Field/Goye Position").position;
        Vector3 playerPos = enemy.transform.Find("Combat Field/Player Position").position;

        enemy.refPlayer.SetPosition(playerPos);
        // set goye position
        enemy.objectToAlive.transform.position = goyePos;
        enemy.FaceToPlayer();
        // play ui fade out
        yield return(new WaitForSeconds(gm.uiHandler.uiEffectHandler.OnPlayUIEffect(UIEffect.Transition_CrossFade, UIEffectAnimationClip.end)));

        // set goye rigidbodytype2d to dynamic
        enemy.rb.bodyType = RigidbodyType2D.Dynamic;
        stateMachine.SwitchState(enemy.runState);
        enemy.refPlayer.stateMachine.SwitchState(enemy.refPlayer.idleState);
    }
 void Awake()
 {
     npcEventHandler = GetComponent <NPCEventHandler>();
     npc             = GetComponentInParent <NPC>();
 }
 public void SetNPCEventHandler(NPCEventHandler npcEventHandler) => this.npcEventHandler = npcEventHandler;