コード例 #1
0
ファイル: nivel.c プロジェクト: ignaciohugog/SISOP
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
	}

}
コード例 #2
0
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
コード例 #4
0
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;
}