diff options
Diffstat (limited to 'item_list.h')
| -rw-r--r-- | item_list.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/item_list.h b/item_list.h new file mode 100644 index 0000000..027e2fe --- /dev/null +++ b/item_list.h @@ -0,0 +1,127 @@ +/* + * item_list.h -- Implementa las listas de objetos. + * Copyright (C) 2018 Juan Marín Noguera + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +/** + * \file item_list.h Implementa las listas de objetos. + */ + +#ifndef __ITEM_LIST_H +#define __ITEM_LIST_H +#include "item.h" +#include "screen.h" + +/** Representa un nodo de la lista de objetos. Usado para iterar sobre esta. */ +typedef struct ItemNode *ItemNode; + +/** Representa una lista de objetos. */ +typedef struct ItemList *ItemList; + +/** + * \brief Crea una lista vacía de objetos. + * \return Una nueva lista vacía de objetos. + */ +ItemList item_list_create(); + +/** + * \brief Libera una lista de objetos, junto con todos sus elementos. + * \param il La lista de objetos a liberar. + * \remarks Si la lista es liberada, todo iterador sobre ella dejará de + * ser válido (ver item_list_begin). + */ +void item_list_free(ItemList il); + +/** + * \brief Devuelve un iterador para la lista, que apunta al primer elemento de + * esta (si existe). + * \param il La lista sobre la que iterar. + * \return Iterador de la lista apuntando al primer elemento. Si la lista + * está vacía, el iterador apunta al final (ver item_list_isend). + */ +ItemNode item_list_begin(ItemList il); + +/** + * \brief Devuelve el objeto apuntado por un iterador de lista de objetos. + * \param in El iterador. + * \return El elemento actual al que apunta el iterador. + */ +Item item_list_current(ItemNode in); + +/** + * \brief Avanza el iterador para que apunte al elemento siguiente al actual. + * \param in El iterador. + */ +void item_list_advance(ItemNode in); + +/** + * \brief Elimina de la lista el elemento actual al que apunta el iterador (el + * devuelto por item_list_current), liberándolo. + * \param in El iterador. + * \remarks Tras llamar a esta función, el iterador apuntará a + * un elemento posterior. No se garantiza que se mantenga el orden de los + * elementos de la lista tras llamar a esta función. + */ +void item_list_delete(ItemNode in); + +/** + * \brief Comprueba si el apuntador pasado como parámetro apunta al + * final. + * \param in El iterador. + * \return Un valor distinto de 0 si el elemento es el final, o 0 si no lo es. + * \remarks Es un error llamar a item_list_current, item_list_next o + * item_list_delete con un iterador que apunta al final, pues es como si + * apuntase al elemento posterior al último. + */ +int item_list_isend(ItemNode in); + +/** + * \brief Libera de memoria un iterador. + * \param in El iterador a liberar. + */ +void item_list_free_node(ItemNode in); + +/** + * \brief Añade un elemento al final de la lista. + * \param il La lista en la que añadir el elemento. + * \param e El elemento a añadir. + */ +void item_list_append(ItemList il, Item e); + +/** + * \brief Actualiza los elementos de la lista de objetos, eliminando los que han + * quedado a la izquierda del área visible del mundo y los que han + * dejado de ser visibles por haber caído por debajo de este área, + * y teniendo en cuenta las posibles colisiones. + * \param il La lista de objetos. + * \param scroll La distancia en píxeles desde el borde izquierdo del + * mundo hasta el borde izquierdo del área visible de este. + * \param w El ancho del área visible del mundo, en píxeles. + * \remarks Esta función no tiene en cuenta posibles colisiones, por + * lo que es necesario manejar las colisiones aparte. + */ +void item_list_update(ItemList il, int scroll, int w); + +/** + * \brief Dibuja todos los elementos de la lista de objetos. + * \param il La lista de objetos. + * \param scr La ventana sobre la que dibujar los objetos. + * \param scroll La distnacia en píxeles desde la parte izquierda del + * mundo hasta la parte izquierda de la ventana. + */ +void item_list_render(Screen scr, ItemList il, int scroll); + +#endif // __ITEM_LIST_H |
