//Al detectar la salida de una colisión con un trigger, comprueba que se trata de un gameObject Accion void OnTriggerExit(Collider other) { //Si se ha colisionado con un gameObject Accion, se desactiva la acción en la clase interactuable if (other.tag == "AccionUI") { AccionObjeto accionObjeto = other.GetComponent <AccionObjeto>(); if (accionObjeto.GetID() == interactuable.ID) { interactuable.SetAccionActivaNull(); } } //Volvemos al material original si hemos dejado de colisionar con el jugador if (other.tag == "Player") { gameObject.GetComponent <Image>().material = Resources.Load("UI") as Material; //Mover la carga del material a otro sitio (Manager) } }
//Al detectar una colisión con un trigger, comprueba que se trata de un gameObject Accion void OnTriggerEnter(Collider other) { //Si se ha colisionado con un gameObject Accion, se activa la acción en la clase interactuable //para que este sepa que acción está en contacto con el cursor if (other.tag == "AccionUI") { AccionObjeto accionObjeto = other.GetComponent <AccionObjeto>(); if (accionObjeto.GetID() == interactuable.ID) { interactuable.AsignarAccionActiva(accionObjeto.GetIndice()); } } //Cada vez que colisionamos con el jugador, cambiamos el material para que el cursor se muestre correctamente sin atravesar la geometría del jugador if (other.tag == "Player") { gameObject.GetComponent <Image>().material = Resources.Load("UI2") as Material; //Mover la carga del material a otro sitio (Manager) } }
//Elimina o añade acciones que dependen de los objetos disponibles en el inventario public void RecargarAcciones(Inventario inventario) { for (int i = acciones.Count - 1; i >= 0; i--) { //Comprobamos si los requisitos para mostrar la accion //son correctos. Si lo son, creamos la accion, solo si no existía anteriormente if (MostrarAccion(acciones[i], inventario)) { //Comprobamos si la acción que queremos añadir ya está actualmente en la lista GameObject accionGO = accionesGO.Where(x => x.name == "Accion" + i.ToString()).SingleOrDefault(); //Si la accion no existe, la añadimos if (accionGO == null) { accionGO = new GameObject("Accion" + i.ToString()); AccionObjeto accionObjeto = accionGO.AddComponent <AccionObjeto>(); accionObjeto.Inicializar(ID, i); CargaAccionGO(accionGO, i); } } //comprobamos si la acción ya existía para eliminarla else { GameObject accionGO = accionesGO.Where(x => x.name == "Accion" + i.ToString()).SingleOrDefault(); //Si la accion existe, la eliminamos if (accionGO != null) { accionesGO.Remove(accionGO); Destroy(accionGO); } } } //Cargamos la UI de las acciones actuales CargarAccionesUI(); //Ocultamos el texto de las acciones DesactivarTextoAcciones(); }
//Rellena las listas de acciones private void CargarAcciones() { accionesGO = new List <GameObject>(); //Si existe un fichero guardado, cargamos ese fichero, sino cargamos el fichero por defecto if (System.IO.File.Exists(Manager.rutaDatosAccionGuardados + ID.ToString() + ".xml")) { acciones = LoadDatosAccion(Manager.rutaDatosAccionGuardados + ID.ToString() + ".xml"); } else { acciones = LoadDatosAccion(Manager.rutaDatosAccion + ID.ToString() + ".xml"); } //Cargamos el inventario, necesario para comprobar si ciertas acciones se muestran Inventario inventario; //Cargamos el inventario si existe, sino lo creamos if (System.IO.File.Exists(Manager.rutaInventario + "Inventario.xml")) { inventario = Inventario.LoadInventario(Manager.rutaInventario + "Inventario.xml"); } else { inventario = new Inventario(); } //Creamos los gameObject que representan las acciones for (int i = 0; i < acciones.Count; i++) { //Comprobamos si los requisitos para mostrar la accion son correctos. Si lo son, creamos la accion if (MostrarAccion(acciones[i], inventario)) { GameObject AccionGO = new GameObject("Accion" + i.ToString()); AccionObjeto accionObjeto = AccionGO.AddComponent <AccionObjeto>(); accionObjeto.Inicializar(ID, i); //Carga la acción en la lista de acciones GameObjects CargaAccionGO(AccionGO, i); } //Carga el dialogo si la accion es de tipo dialogo aunque no se muestre if (acciones[i].GetType() == typeof(DatosAccionDialogo)) { DatosAccionDialogo datosAccionDialogo = acciones[i] as DatosAccionDialogo; datosAccionDialogo.CargaDialogo(); Dialogo dialogo = datosAccionDialogo.DevuelveDialogo(); //Cargamos las intros a distancia de la acciónDialogo (si los tiene) //Si el dialogo es a distancia creamos el box collider for (int j = 0; j < dialogo.DevuelveNumeroIntros(); j++) { if (dialogo.IntroEsADistancia(j)) { CrearDialogoADistanciaArea(dialogo, j); } } } } //Cargamos la UI de las acciones actuales CargarAccionesUI(); //Ocultamos el texto de las acciones DesactivarTextoAcciones(); }