/// <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> /// Busca la cuenta que tenga el rol en la lista de cuentas en la sa /// </summary> /// <param name="RolDelJugador">El rol del jugador matado</param> /// <returns>La cuenta que tiene ese rol en la sala</returns> private CuentaModel BuscarCuentaPorRol(EnumTipoDeJugador RolDelJugador) { CuentaModel CuentaDelRol = null; foreach (CuentaModel CuentaEnLaSala in ClienteDelJuego.CuentasEnLaSala) { if (CuentaEnLaSala.Jugador.RolDelJugador == RolDelJugador) { CuentaDelRol = CuentaEnLaSala; } } return(CuentaDelRol); }
/// <summary> /// Notifica al cliente del juego que el jugador mato a un jugador en linea /// </summary> /// <param name="RolDelJugadorMatado">El Rol del jugador matado</param> private void NotificarMateAUnJugador(EnumTipoDeJugador RolDelJugadorMatado, int NumeroVidas) { CuentaModel CuentaMuerto = BuscarCuentaPorRol(RolDelJugadorMatado); if (CuentaMuerto != null) { ClienteDelJuego.NotificarMuerteJugador(CuentaMuerto.NombreUsuario, NumeroVidas); } if (CuentaMuerto.Jugador.RolDelJugador == EnumTipoDeJugador.Corredor) { ColocarPersonajesEnPosicionInicial(); } }
/// <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> /// Detecta las colisiones que tiene el personje con otros objetos /// </summary> /// <param name="collision">Collision2D</param> private void OnCollisionEnter2D(Collision2D collision) { if (EstaActivoElScript && RolDelJugador > 0 && collision.gameObject.CompareTag("Corredor") && !EstaActivoTiempoDeMatar) { PuntacionTotal += 1000; EnumTipoDeJugador RolDelJugadorMatado = EnumTipoDeJugador.Corredor; int numeroVidas = collision.gameObject.GetComponent <JugadorEnLinea>().VidasDisponibles; collision.gameObject.GetComponent <JugadorEnLinea>().DescontarVida(numeroVidas - 1); MateAJugador?.Invoke(RolDelJugadorMatado, numeroVidas - 1); } else if (EstaActivoElScript && RolDelJugador == 0 && collision.gameObject.CompareTag("Perseguidor") && EstaActivoTiempoDeMatar) { PuntacionTotal += 100; EnumTipoDeJugador RolDelJugadorMatado = collision.gameObject.GetComponent <JugadorEnLinea>().RolDelJugador; int numeroVidas = collision.gameObject.GetComponent <JugadorEnLinea>().VidasDisponibles; collision.gameObject.GetComponent <JugadorEnLinea>().DescontarVida(numeroVidas - 1); MateAJugador?.Invoke(RolDelJugadorMatado, numeroVidas - 1); } }
/// <summary> /// Establece la información necesaria al Script del Personaje del jugador actual para que pueda estar en la partida /// </summary> /// <param name="MovimientoDelPersonaje">Character_Movement</param> /// <param name="EstaActivo">Boolean</param> /// <param name="EsElJugadorActual">Boolean</param> /// <param name="PosicionInicial">Vector2</param> /// <param name="RolDeJugador">EnumTipoDeJugador</param> /// <param name="VidasDisponibles">int</param> private void InicializarJugador(Jugador MovimientoDelPersonaje, Boolean EstaActivo, Boolean EsElJugadorActual, Vector2 PosicionInicial, EnumTipoDeJugador RolDeJugador, int VidasDisponibles) { MovimientoDelPersonaje.EstaActivoElScript = EstaActivo; MovimientoDelPersonaje.RolDelJugador = RolDeJugador; MovimientoDelPersonaje.PosicionInicial = PosicionInicial; MovimientoDelPersonaje.VidasDisponibles = VidasDisponibles; MovimientoDelPersonaje.EsElJuegadorActual = EsElJugadorActual; JugadorActual.MeMovi += EnviarMiMovimiento; JugadorActual.MateAJugador += NotificarMateAUnJugador; JugadorActual.RecolectoTodasLasMonedas += TerminarPartida; JugadorActual.PuedoComerPerseguidores += NotificarCorredorPuedeComer; }
/// <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); } }