/// <summary>
 /// Establece la información necesaria del jugador en linea para que pueda estar en la partida
 /// </summary>
 /// <param name="MovimientoDelPersonaje">ChrarcterMovementOnline</param>
 /// <param name="EstaActivo">Boolean</param>
 /// <param name="PosicionInicial">Vector2</param>
 /// <param name="RolDeJugador">EnumTipoDeJugador</param>
 /// <param name="VidasDisponibles">int</param>
 private void InicializarJugadorEnLinea(JugadorEnLinea MovimientoDelPersonaje, Boolean EstaActivo,
                                        Vector2 PosicionInicial, EnumTipoDeJugador RolDeJugador, int VidasDisponibles)
 {
     MovimientoDelPersonaje.EstaActivoElScript = EstaActivo;
     MovimientoDelPersonaje.RolDelJugador      = RolDeJugador;
     MovimientoDelPersonaje.PosicionInicial    = PosicionInicial;
     MovimientoDelPersonaje.VidasDisponibles   = VidasDisponibles;
 }
    /// <summary>
    /// Se activa el tiempo de comer en el jugador actual y en el corredor
    /// </summary>
    private void ActivarTiempoDeComer()
    {
        JugadorActual.ActivaTiempoDeMatar();
        JugadorEnLinea ScriptDelCorredor = RecuperarScriptDePersonaje(EnumTipoDeJugador.Corredor);

        if (ScriptDelCorredor != null)
        {
            ScriptDelCorredor.ActivaTiempoDeMatar();
        }
    }
    /// <summary>
    /// Recupera el script de movimiento del personaje que sea del tipo de personaje
    /// </summary>
    /// <param name="tipoDelPersonaje">EnumTipoDeJugador</param>
    /// <returns>El ChracterMovenent que tiene ese rol</returns>
    private JugadorEnLinea RecuperarScriptDePersonaje(EnumTipoDeJugador tipoDelPersonaje)
    {
        JugadorEnLinea ScriptDelPersonaje = null;

        foreach (JugadorEnLinea ScriptDeMovimiento in ScriptsDeMovimiento.Values)
        {
            if (ScriptDeMovimiento != null)
            {
                if (ScriptDeMovimiento.RolDelJugador == tipoDelPersonaje)
                {
                    ScriptDelPersonaje = ScriptDeMovimiento;
                }
            }
        }
        return(ScriptDelPersonaje);
    }
    /// <summary>
    /// Instancia un Personaje a partir de las cuentas en sesion asi como los inicializa estableciendo la informacion
    /// de su perssonaje
    /// </summary>
    private void InicializarPersonajesEnElMapa()
    {
        foreach (CuentaModel cuentaEnJuego in ClienteDelJuego.CuentasEnLaSala)
        {
            GameObject        PrefabAInstanciar   = ManejadorDePersonajes.ObtenerPrefabDePersonaje(cuentaEnJuego.Jugador);
            GameObject        InstanciaDelObjecto = null;
            JugadorEnLinea    ScriptDeMovimiento  = null;
            Vector2           PosicionInicial     = new Vector2(0, 0);
            EnumTipoDeJugador TipoDeJugador       = EnumTipoDeJugador.Corredor;
            int    CantidadDeVidas   = CANTIDAD_VIDAS_PERSEGUIDOR;
            bool   EsElJugadorActual = EsElJugadorPrincipal(cuentaEnJuego);
            string tag = "Perseguidor";
            switch (cuentaEnJuego.Jugador.RolDelJugador)
            {
            case EnumTipoDeJugador.Corredor:
                InstanciaDelObjecto = ColocarPersonajeEnElMapa(PrefabAInstanciar, POSICION_CORREDOR, EsElJugadorActual);
                PosicionInicial     = POSICION_CORREDOR;
                TipoDeJugador       = EnumTipoDeJugador.Corredor;
                CantidadDeVidas     = CANTIDAD_VIDAS_CORREDOR;
                tag = "Corredor";
                break;

            case EnumTipoDeJugador.Perseguidor1:
                InstanciaDelObjecto = ColocarPersonajeEnElMapa(PrefabAInstanciar, POSICION_PERSEGUIDOR1, EsElJugadorActual);
                PosicionInicial     = POSICION_PERSEGUIDOR1;
                TipoDeJugador       = EnumTipoDeJugador.Perseguidor1;
                break;

            case EnumTipoDeJugador.Perseguidor2:
                InstanciaDelObjecto = ColocarPersonajeEnElMapa(PrefabAInstanciar, POSICION_PERSEGUIDOR2, EsElJugadorActual);
                PosicionInicial     = POSICION_PERSEGUIDOR2;
                TipoDeJugador       = EnumTipoDeJugador.Perseguidor2;
                break;

            case EnumTipoDeJugador.Perseguidor3:
                InstanciaDelObjecto = ColocarPersonajeEnElMapa(PrefabAInstanciar, POSICION_PERSEGUIDOR3, EsElJugadorActual);
                PosicionInicial     = POSICION_PERSEGUIDOR3;
                TipoDeJugador       = EnumTipoDeJugador.Perseguidor3;
                break;

            case EnumTipoDeJugador.Perseguidor4:
                InstanciaDelObjecto = ColocarPersonajeEnElMapa(PrefabAInstanciar, POSICION_PERSEGUIDOR4, EsElJugadorActual);
                PosicionInicial     = POSICION_PERSEGUIDOR4;
                TipoDeJugador       = EnumTipoDeJugador.Perseguidor4;
                break;
            }
            if (EsElJugadorActual)
            {
                CuentaDelJugadorPrincipal = cuentaEnJuego;
                InstanciaDelObjecto.GetComponent <JugadorEnLinea>().EstaActivoElScript = false;
                JugadorActual         = InstanciaDelObjecto.GetComponent <Jugador>();
                JugadorActual.enabled = true;
                InicializarJugador(JugadorActual, true, EsElJugadorActual, PosicionInicial,
                                   TipoDeJugador, CantidadDeVidas);
                JugadorActual.EstaActivoTiempoDeMatar = true;
            }
            else
            {
                InstanciaDelObjecto.GetComponent <Jugador>().EstaActivoElScript = false;
                InstanciaDelObjecto.GetComponent <Jugador>().enabled            = false;
                ScriptDeMovimiento         = InstanciaDelObjecto.GetComponent <JugadorEnLinea>();
                ScriptDeMovimiento.enabled = true;
                InicializarJugadorEnLinea(ScriptDeMovimiento, true, PosicionInicial,
                                          TipoDeJugador, CantidadDeVidas);
            }
            InstanciaDelObjecto.tag = tag;
            ScriptsDeMovimiento.Add(cuentaEnJuego, ScriptDeMovimiento);
            Jugadores.Add(cuentaEnJuego, InstanciaDelObjecto);
        }
    }