public void PersonajeDetectado()
 {
     Personaje.PuedeMoverse = false;
     StopAllCoroutines();
     ControladorDatos.Instancia.AniadirCorrutinaACola(CorrutinasComunes.MoverHastaPosicion(this, Personaje.Posicion));
     npc.MostrarDialogo();
 }
    public void EjecutarAccion()
    {
        Conversacion ultimaConversacion = null;

        for (int i = 0; i < secuenciaDeAcciones.Count; i++)
        {
            accionActual = secuenciaDeAcciones[i];

            if (accionActual.npc != null && !accionActual.npc.gameObject.activeSelf)
            {
                accionActual.npc.gameObject.SetActive(true);
            }
            switch (accionActual.TipoDeAccion)
            {
            case AccionSequencia.NPC_MoverAPosicionEspecifica:
                ControladorDatos.Instancia.AniadirCorrutinaACola(CorrutinasComunes.MoverHastaPosicion(accionActual.npc.MoverNPC, accionActual.posicion.position));
                break;

            case AccionSequencia.NPC_MoverASuPosicionInicial:
                ControladorDatos.Instancia.AniadirCorrutinaACola(CorrutinasComunes.MoverHastaPosicion(accionActual.npc.MoverNPC, accionActual.npc.PosicionInicial));
                break;

            case AccionSequencia.NPC_MoverHastaElPersonaje:
                ControladorDatos.Instancia.AniadirCorrutinaACola(CorrutinasComunes.MoverHastaPosicion(accionActual.npc.MoverNPC, Personaje.Posicion));
                break;

            case AccionSequencia.NPC_MostrarConversacion:
                NPC npc = accionActual.npc.GetComponent <NPC>();
                if (npc != null && npc.TieneDialogoPendiente())
                {
                    ultimaConversacion = npc.AniadirDialogoASecuencia(ultimaConversacion);
                }
                break;

            case AccionSequencia.NPC_Ocultar:
                ControladorDatos.Instancia.AniadirCorrutinaACola(DesactivarNPC(accionActual.npc.gameObject));
                break;

            case AccionSequencia.Personaje_MoverAPosicionEspecífica:
                ControladorDatos.Instancia.AniadirCorrutinaACola(CorrutinasComunes.MoverHastaPosicion(Personaje.MoverPersonaje, accionActual.posicion.position));
                break;

            case AccionSequencia.Personaje_TeletransportarAPosicionEspecifica:
                ControladorEventos.Instancia.LanzarEvento(new EventoTeletransportarse(accionActual.posicion.position, accionActual.direccion));
                break;

            case AccionSequencia.Personaje_SeguirNPC:
                ControladorDatos.Instancia.AniadirCorrutinaACola(CorrutinasComunes.SeguirObjeto(Personaje.MoverPersonaje, accionActual.npc.MoverNPC), false, "Seguir");
                break;

            case AccionSequencia.Personaje_DejarDeSeguirNPC:
                ControladorDatos.Instancia.AniadirCorrutinaACola(DetenerSeguimiento("Seguir"), false);
                break;

            case AccionSequencia.EjecutarMetodos:
                ControladorDatos.Instancia.AniadirCorrutinaACola(EjecutarEventoUnity(accionActual.eventoUnity));
                break;

            case AccionSequencia.EsperarTiempo:
                ControladorDatos.Instancia.AniadirCorrutinaACola(DetenerTiempo(accionActual.tiempoDeEspera));
                break;

            case AccionSequencia.ReproducirAnimacion:
                ControladorDatos.Instancia.AniadirCorrutinaACola(ReproducirAnimacion(accionActual.animator, accionActual.nombreAnimacionODialogo));
                break;

            case AccionSequencia.CurarEquipoPokemon:
                ControladorDatos.Instancia.AniadirCorrutinaACola(CentroPokemon());
                break;

            case AccionSequencia.MostrarDialogoEspecifico:
                ControladorDatos.Instancia.AniadirCorrutinaACola(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(accionActual.nombreAnimacionODialogo, true));
                break;
            }
        }

        ControladorDatos.Instancia.AniadirCorrutinaACola(Fin(), false);
    }