//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA CUANDO SE PULSA SOBRE UN ASPECTO */ public void bApariencia() { //Comprobar si la apariencia esta bloqueada if (bloqueado) { if (infoPersistente.getEnergia() >= precioApariencia) { //Iniciamos proceso de compra solicitarComprar(); } else { //Mostrar mensaje saldo insuficiente string texto = "No tienes suficiente energia para comprar esta apariencia"; ventanaEmergente.GetComponent <VentanaInformacion>().mostrarInfo(texto, "Aceptar"); } } else { //Guardar la interfaz activa refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("aparienciaActiva").SetValueAsync(nombreAspecto); infoPersistente.setAparienciaActiva(nombreAspecto); //Establecer nueva apariencia en la imagen animatorImagen1.SetTrigger(nombreAspecto); animatorImagen2.SetTrigger(nombreAspecto); //Desmarcar todos los objetos for (int i = 0; i < apariencias.Length; i++) { apariencias[i].GetComponent <Apariencia>().desmarcar(); } //Marcar objeto como activo marcar(); } }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA AL CAMBIAR LA SENSIBILIDAD DEL MOVIMIENTO */ public void cambiadoSenMov() { //Obtener valor seleccionado int ajuste = (int)sSenMov.value; //Guardar el nuevo ajuste en el nodo de firebase refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("ajustes").Child("senMov").SetValueAsync(ajuste + ""); //Cambiar directamente el ajuste en el objeto de informacion persistente infoPersistente.setSenMov(ajuste); }
//------------------------------------------------------------------------------------------------------------------ /* * METODO PARA ESTABLECER LOS METODO DE ESCUCHA CONTINUAOS DE LOS NODOS CON INFORMACION NECESARIA DE LA BASE DE DATOS */ public void obtenerDatosContinuos() { //Poner a la escucha el campo correspondiente para obtener la informacion continua refBD.getBaseDatos() .GetReference("usuarios/" + refBD.getUsuario().UserId) .ValueChanged += HandleValueChanged; }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA AL INICIO DE LA EJECUCIÓN PARA REALIZAR REFERENCIAS */ void Awake() { //Obtener referencias infoPersistente = GameObject.Find("InfoPersistente").GetComponent <InfoPersistente>(); refBD = GameObject.Find("ReferenciaBD").GetComponent <ReferenciaBaseDatos>(); //Resetear los nodos de juego de la base de datos infoPersistente.setJugando(true); infoPersistente.setPeticionBatalla("null"); infoPersistente.setRespuestaBatalla("null"); refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/peticion").SetValueAsync("null"); refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/respuesta").SetValueAsync("null"); //Inicializacion txtCuentaAtras.text = tiempoCuentaAtras.ToString("f0"); panelCuentaAtras.gameObject.SetActive(false); txtCuentaAtras.text = tiempoReaparecer.ToString("f0"); panelReaparecer.gameObject.SetActive(false); }
//------------------------------------------------------------------------------------------------------------------ public void bCancelar() { //Indicar rechazo de solicitud de batalla refBD.getBaseDatos().GetReference("usuarios").Child(uidOponente).Child("batalla/respuesta").SetValueAsync("false"); //Reiniciar peticion refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/peticion").SetValueAsync("null"); panelPrincipal.gameObject.SetActive(false); //Reiniciar la lectura de solicitudes de batallas detectorBatallas.reiniciarLecturaBatallas(); }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA AL INICIAR EL SCRIPT */ void Start() { //Obtener referencias refBD = GameObject.Find("ReferenciaBD").GetComponent <ReferenciaBaseDatos>(); infoPersistente = GameObject.Find("InfoPersistente").GetComponent <InfoPersistente>(); //Establecer los datos a null para comenzar refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/peticion").SetValueAsync("null"); refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/respuesta").SetValueAsync("null"); //Poner a la escucha el campo correspondiente para obtener todos los nombres de usuario ocupados de la base de datos refBD.getBaseDatos() .GetReference("usuarios/" + refBD.getUsuario().UserId) .ValueChanged += HandleValueChanged; //Llamada al metodo de actualizar foto por si ha cambiado respecto a la ultima conexion //actualizarFotoPerfil(); //Establecer animacion del personaje animatorImagenWalter.SetTrigger(infoPersistente.getAparienciaActiva()); }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA AL INICIAR EL SCRIPT */ void Start() { //Obtener referencias refBD = GameObject.Find("ReferenciaBD").GetComponent <ReferenciaBaseDatos>(); //Ocultar el panel no tienes amigos panelSinAmigos.gameObject.SetActive(false); //Poner a la escucha el nodo para obtener amigos o solicitudes refBD.getBaseDatos() .GetReference("usuarios/" + refBD.getUsuario().UserId + "/relaciones") .ValueChanged += HandleValueChanged; }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA REPETIDAMENTE CADA FOTOGRAMA DE LA EJECUCION */ void Update() { //Obtener autenticacion FirebaseAuth auth = FirebaseAuth.DefaultInstance; //Comprobar si esta conectado al servidor photon y logueado para cargar la escena principal if (PhotonNetwork.IsConnected && auth != null) { //Ejecutar solo la primera vez if (primeraEjecucion) { primeraEjecucion = false; refBD.setUsuario(auth.CurrentUser); cargarEscenaPrincipal(); } } //Si se activa la variable de escena principal if (escenaPrincipal) { if (obtenerinfo && primeraEjecucion2) { primeraEjecucion2 = false; obtenerinfo = false; //Cargar informacion inicial infoPersistente.obtenerDatosContinuos(); //Iniciar Informacion refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/peticion").SetValueAsync("null"); refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/respuesta").SetValueAsync("null"); } //No cambiar de escena mientras no se recupere toda la informacion inicial if (infoPersistente.isObtenidoTodo()) { //Cargar escena principal SceneManager.LoadScene("Principal"); } } }
//----------------------------------------------------------------------------------------------------- /* * METODO PARA VOLVER A ESCUCHAR PETICIONES DE BATALLA */ public void reiniciarLecturaBatallas() { tiempoAux = tiempoVisualizacion; //Ocultar ventana de notificacion de batalla ventanaBatalla.GetComponent <Batalla>().ocultar(); //restablecer valor en el nodo de peticiones refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/peticion").SetValueAsync("null"); //Indicar que ya no hay mensaje creado contarTiempo = false; crearMensaje = true; //Indicar que no estamos en batalla infoPersistente.setEnBatalla(false); }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA AL INICIAR EL SCRIPT */ void Start() { //Obtener referencias refBD = GameObject.Find("ReferenciaBD").GetComponent <ReferenciaBaseDatos>(); //Añadir listener que llamara un metodo cuando los valores del campo de texto cambien ifUsuarioBuscar.onEndEdit.AddListener(delegate { buscarUsuarioAux(); }); //Inicializar componentes panelInicio.gameObject.SetActive(true); panelSinResultados.gameObject.SetActive(false); //Poner a la escucha el nodo para obtener amigos refBD.getBaseDatos() .GetReference("usuarios/" + refBD.getUsuario().UserId + "/relaciones") .ValueChanged += HandleValueChanged; }
//========> /* * METODO PARA EFECTUAR LA PROPIA ELIMINACIÓN DE LA AMISTAD EN AMBOS USUARIOS AL PULSAR EN ACEPTAR DEL MENSAJE EMERGENTE */ public void borrarAmigo() { //Eliminar la entrada de la relacion para los 2 usuarios refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("relaciones").Child(uid).RemoveValueAsync(); refBD.getBaseDatos().GetReference("usuarios").Child(uid).Child("relaciones").Child(refBD.getUsuario().UserId).RemoveValueAsync(); }
//------------------------------------------------------------------------------------------------------------------ /* * METODO PARA MOSTRAR EL PANEL FINAL DE LA PARTIDA */ public async System.Threading.Tasks.Task mostrarAsync(string estado, int energiaGanada) { //Desconectarnos de la sala de juego creada if (PhotonNetwork.CurrentRoom != null) { PhotonNetwork.LeaveRoom(); } //Obtener referencias refBD = GameObject.Find("ReferenciaBD").GetComponent <ReferenciaBaseDatos>(); infoPersistente = GameObject.Find("InfoPersistente").GetComponent <InfoPersistente>(); //Obtener mi personaje si no lo he obtenido previamente if (miPersonaje == null) { miPersonaje = GameObject.Find("miPersonaje"); } //Bloquear el personaje para no poder interactuar mas con el if (miPersonaje != null) { miPersonaje.GetComponent <EstadoJugador>().setEstado(0); } //Establecer la energia y titulo en funcion de si hemos ganado, perdido, empatado o se ha desconectado el oponente int energia = 0; switch (estado) { case "ganado": energia = energiaGanada + 30; //Sumar el bonus panelBonus.gameObject.SetActive(true); txtTitulo.text = "Has ganado"; break; case "perdido": energia = energiaGanada; panelBonus.gameObject.SetActive(false); txtTitulo.text = "Has perdido"; break; case "empatado": energia = energiaGanada; panelBonus.gameObject.SetActive(false); txtTitulo.text = "Empate"; break; case "desconectado": panelBonus.gameObject.SetActive(true); energia = energiaGanada + 30; //Sumar el bonus txtTitulo.text = "El oponente ha abandonado la partida"; break; } //Mostrar la energia obtenida txtEnergiaGanada.text = ("+" + energiaGanada); //Sumar energia al nodo de firebase await refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("energia").SetValueAsync("" + (infoPersistente.getEnergia() + energia)); //Establecer los datos a null await refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/peticion").SetValueAsync("null"); await refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/respuesta").SetValueAsync("null"); //Cuando sumamos la energia a la base de datos mostramos el propio panel informativo panelContenido.gameObject.SetActive(true); canvasPantalla.gameObject.SetActive(false); }
//------------------------------------------------------------------------------------------------------------------ /* * METODO QUE SE EJECUTA REPETIDAMENTE CADA FOTOGRAMA DE LA EJECUCION */ void Update() { /////////////////////////////////////////////// RECIBIR RESPUESTAS A PETICIONES ///////////////////////////////////////////////// if (solicitado) { if (tiempoAux > 0) { tiempoAux -= Time.deltaTime; } else { //Si ha finalizado el tiempo de vida de la solicitud sin respuesta //Ocultar ventana de espera ventanaEmergente.GetComponent <VentanaEspera>().ocultar(); //Marcar como fin de solicitud solicitado = false; infoPersistente.setEnBatalla(false); //reiniciar tiempo tiempoAux = tiempoEspera; //Mostrar mensaje info string texto = "Tiempo de espera agotado"; ventanaEmergente.GetComponent <VentanaInformacion>().mostrarInfo(texto, "Aceptar"); } } else if (buscando) { if (tiempoAux > 0) { tiempoAux -= Time.deltaTime; } else { //Si ha finalizado el tiempo de vida de la busqueda sin respuesta //Ocultar ventana de espera ventanaEmergente.GetComponent <VentanaEspera>().ocultar(); //Marcar como fin de solicitud buscando = false; infoPersistente.setEnBatalla(false); //Salir de la sala creada gestionPartidas.salirSala(); //reiniciar tiempo tiempoAux = tiempoEspera; //Mostrar mensaje info string texto = "No hay ningun jugador en este momento, intentelo mas tarde"; ventanaEmergente.GetComponent <VentanaInformacion>().mostrarInfo(texto, "Aceptar"); } } if (infoPersistente.getRespuestaBatalla().Equals("true")) { //Crear Sala de juego con el nombre de mi uid gestionPartidas.crearSalaAmigo(refBD.getUsuario().UserId); //Reinicializar la respuesta refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/respuesta").SetValueAsync("null"); //Establecer a nulo la respuesta para evitar que se ejecute mas de una vez infoPersistente.setRespuestaBatalla("null"); } else if (infoPersistente.getRespuestaBatalla().Equals("false")) { //Reinicializar la respuesta refBD.getBaseDatos().GetReference("usuarios").Child(refBD.getUsuario().UserId).Child("batalla/respuesta").SetValueAsync("null"); ventanaEmergente.GetComponent <VentanaEspera>().ocultar(); //Mostrar mensaje info string texto = "El oponente ha rechazado la batalla"; ventanaEmergente.GetComponent <VentanaInformacion>().mostrarInfo(texto, "Aceptar"); //Marcar como fin de solicitud solicitado = false; infoPersistente.setEnBatalla(false); infoPersistente.setRespuestaBatalla("null"); } }
//----------------------------------------------------------------------------------------------------------------------- /* * METODO PARA OBTENER LOS DATOS DEL LISTADO DE UID DE USUARIOS PASADO POR PARAMETRO, AGREGANDOLOS A LA LISTVIEW */ public async System.Threading.Tasks.Task ObtenerDatosPorUIDAsync(List <string> listEncontrados) { string nombreUsu = "", foto = ""; //Recorrer lista de UID correspondientes con usuarios encontrados foreach (var uid in listEncontrados) { bool yaEsAmigo = false, yaEstaPedido = false, esUnaSolicitud = false; //Comprobar si el usuario encontrado ya es amigo nuestro foreach (var uidAmigo in uidAmigos) { if (uidAmigo.Equals(uid)) { yaEsAmigo = true; } } //Comprobar si ya le hemos mandado una solicitud al usuario encontrado foreach (var uidAmigo in uidPeticiones) { if (uidAmigo.Equals(uid)) { yaEstaPedido = true; } } //Comprobar si nos ha mandado una solicitud foreach (var uidAmigo in uidSolicitudes) { if (uidAmigo.Equals(uid)) { esUnaSolicitud = true; } } //Leer el nodo de relaciones del usuario await refBD.getBaseDatos().GetReference("usuarios/" + uid) .GetValueAsync().ContinueWith(task => { if (task.IsFaulted) { } else if (task.IsCompleted) { DataSnapshot snapshot = task.Result; IEnumerable <DataSnapshot> posLeida = snapshot.Children; //Recorrer los resultado leidos del usuario foreach (var linea in posLeida) { //En funcion del dato leido lo alamacenaremos en la variable adecuada if (linea.Key.ToString().Equals("nombreUsu")) { nombreUsu = linea.Value.ToString(); } if (linea.Key.ToString().Equals("foto")) { foto = linea.Value.ToString(); } } } }); //Añadir encontrado Amigo usuario = new Amigo { nombre = nombreUsu, urlFoto = foto, codigoUid = uid }; //Comprobar que no somos nosotros mismos if (uid != refBD.getUsuario().UserId) { //Crear el objeto en el contenedor de la lista GameObject elementoLista = Instantiate(prefabElemento, contenedorLista); //Si ya somos amigos lo indicaremos if (yaEsAmigo) { //Añadir elemento con los botones de un amigo activados elementoLista.GetComponent <ElementoLista>().crearMiAmigo(usuario, ventanaEmergente, solicitarBatalla); } else if (yaEstaPedido) { //Llamada al metodo que le asigna los datos al elemento del listado elementoLista.GetComponent <ElementoLista>().crear(usuario, "peticion", ventanaEmergente); } else if (esUnaSolicitud) { //Llamada al metodo que le asigna los datos al elemento del listado elementoLista.GetComponent <ElementoLista>().crear(usuario, "solicitud", ventanaEmergente); } else { //Llamada al metodo que le asigna los datos al elemento del listado elementoLista.GetComponent <ElementoLista>().crear(usuario, "agregar", ventanaEmergente); } } } }