void solicitar_recurso(t_solicitud* solicitud,ITEM_NIVEL* listaItems,int*socket,t_list** personajes_deadlock){ ITEM_NIVEL* recurso = buscar_item(solicitud->id_recurso, listaItems); int* data = malloc(sizeof(int)); if((recurso->posx == solicitud->x) && (recurso->posy == solicitud->y)){ t_personaje_deadlock* pj_dl = getPersonajeDeadLock(*personajes_deadlock,solicitud->id_pj); int i = getIndexRecurso(solicitud->id_recurso,pj_dl->recursosAsignados); if (recurso->quantity > 0) { //todo meter las dos fx en una sola restarRecurso(listaItems, solicitud->id_recurso); pj_dl->recursosAsignados[i].cantidad++; data[0]=RECURSO_OTORGADO; sendBytes(socket,data,sizeof(int), logger); }else{ pj_dl->id_peticion = recurso->id; data[0]=NO_HAY_RECURSOS; sendBytes(socket,data,sizeof(int), logger); } }else{ //no estaba en la posicion indicada } }
bool determinarRecursoDisponible(char * recursoSolicitado){ ITEM_NIVEL * item; item=buscarRecursoEnLista(items,recursoSolicitado); char id=item->id; int cantidad=item->quantity; if(cantidad==0) { return false; }else{ restarRecurso(items,id); return true; } }
int verificar_Posicion(t_datosParaPedirInstancia *datos, t_list *listaDeCajas) { char *recurso = malloc(strlen(datos->recurso) + 1); strcpy(recurso,datos->recurso); //busca en la lista de las cajas, la struct con el mismo recurso, para poder ver la posX y la posY bool es_Misma_Caja(t_datosCaja *ptr) { return strcmp(ptr->caja_letra, recurso) == 0; } t_datosCaja *datosCaja = list_remove_by_condition(listaDeCajas, (void *) es_Misma_Caja); //se fija si las posX y posY son iguales, tambien se fija si hay suficientes instancias if((datosCaja->caja_posx == datos->posX) && (datosCaja->caja_posy == datos->posY) && (datosCaja->caja_instancias > 0)) { datosCaja->caja_instancias--; //TODO char letra = datosCaja->caja_letra[0]; restarRecurso(ListaItems, letra); //parte grafica nivel_gui_dibujar(ListaItems); list_add(listaDeCajas, datosCaja); bool es_Mismo_Recurso(t_recursosDisponibles *ptr) { return strcmp(ptr->recurso_letra, recurso) == 0; } //edito la lista de recursos disponibles t_recursosDisponibles *recursoDisponible = list_remove_by_condition(listaDeRecursosDisponibles, (void *) es_Mismo_Recurso); recursoDisponible->recurso_instancias--; list_add(listaDeRecursosDisponibles, recursoDisponible); return YES; }else
int32_t eliminarRecurso(ITEM_NIVEL *ListaItems,char c) { cajaStruct *unRecurso; bool condicionRecurso(void* recurso) { return (((cajaStruct*) recurso)->simbolo == c); } unRecurso = (cajaStruct *) list_find(nivel.cajas,condicionRecurso); if (unRecurso != NULL) { if(unRecurso->instancias == 0) return 1; unRecurso->instancias--; } else { perror("recurso invalido"); return -1; } restarRecurso(ListaItems,c); nivel_gui_dibujar(ListaItems); return 0; }