diff options
| author | Juan Marín Noguera <juan.marinn@um.es> | 2019-06-27 20:25:01 +0200 |
|---|---|---|
| committer | Juan Marín Noguera <juan.marinn@um.es> | 2019-06-27 20:25:01 +0200 |
| commit | 3228fe41df5fc737efe3ddfde26d6983619458e8 (patch) | |
| tree | 7e6f79f9866a59eb4028dc57ca0c8bcebf8ed0d4 /item.h | |
Real initial commit
Diffstat (limited to 'item.h')
| -rw-r--r-- | item.h | 166 |
1 files changed, 166 insertions, 0 deletions
@@ -0,0 +1,166 @@ +/* + * item.h -- Implementa los objetos (y enemigos) que aparecen en el juego. + * 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.h Implementa los objetos (y enemigos) que aparecen en el juego. + */ + +#ifndef __ITEM_H +#define __ITEM_H +#include "collision_type.h" +#include "player.h" +#include "screen.h" + +/** Representa un tipo de objeto. */ +typedef enum ItemType { + /** Indica que el objeto es un goomba. */ + ITEM_TYPE_GOOMBA, + + /** Indica que el objeto es un koopa. */ + ITEM_TYPE_KOOPA, + + /** Indica que el objeto es un champiñón. */ + ITEM_TYPE_MUSHROOM, + + /** Indica que el objeto es una flor. */ + ITEM_TYPE_FLOWER, + + /** Indica que el objeto es una moneda. */ + ITEM_TYPE_COIN, + + /** Indica que el objeto es una "moneda temporal", es decir, una que + * se muestra al golpear un bloque que devuelve una moneda pero que se + * contabiliza en el momento de golpear el bloque, y no al coger la + * moneda. + */ + ITEM_TYPE_TEMPCOIN +} ItemType; + +/** Tipo de dato objeto. */ +typedef struct Item *Item; + +/** + * \brief Crea un objeto. + * \param type Tipo de objeto, uno de los definidos como ITEM_TYPE_*. + * \param x Coordenada X de la posición inicial del objeto, en + * píxeles respecto del borde izquierdo del mundo. + * \param y Coordenada Y de la posición inicial del objeto, en + * píxeles respecto de la parte inferior del mundo. + */ +Item item_create(ItemType type, double x, double y); + +/** + * \brief Libera un objeto. + * \param i El objeto a liberar. + */ +void item_free(Item i); + +/** + * \brief Libera los recursos utilizados por el TDA de forma global (las + * imágenes. + */ +void item_end(); + +/** + * \brief Obtiene la coordenada X del objeto. + * \param i El objeto. + * \return La coordenada X del objeto, en píxeles desde la parte + * izquierda del mundo. + */ +double item_x(Item i); + +/** + * \brief Obtiene la coordenada Y del objeto. + * \param i El objeto. + * \return La coordenada Y del objeto, en píxeles desde la parte inferior + * del mundo. + */ +double item_y(Item i); + +/** + * \brief Devuelve la velocidad horizontal del objeto. + * \param i El objeto. + * \return La velocidad horizontal del objeto (hacia la derecha) en + * píxeles por frame. + */ +double item_vx(Item i); + +/** + * \brief Devuelve la velocidad vertical del objeto. + * \param i El objeto. + * \return La velocidad vertical del objeto (hacia arriba) en píxeles + * por frame. + */ +double item_vy(Item i); + +/** + * \brief Devuelve el ancho del objeto. + * \param i El objeto. + * \return El ancho del objeto en píxeles. + */ +int item_width(Item i); + +/** + * \brief Devuelve el alto del objeto. + * \param i El objeto. + * \return El alto del objeto en píxeles. + */ +int item_height(Item i); + +/** + * \brief Actualiza la posición y propiedades de un objeto después + * de un frame. + * \param i El objeto en cuestión. + * \return Un valor distinto de 0 si el objeto debe ser eliminado, o 0 si no + * debe serlo. + * \remarks Esta función actúa como si el objeto no chocara con + * nada. Puede ser necesario llamar posteriormente a + * item_correct_on_block_collision o a item_player_collide. + */ +int item_update(Item i); + +/** + * \brief Corrige la posición de un objeto tras colisionar con un bloque. + * \param i El objeto en cuestión. + * \param dir La dirección relativa del bloque con el que choca el objeto + * respecto de la posición del objeto. + */ +void item_correct_on_block_collision(Item i, CollisionType dir); + +/** + * \brief Realiza las acciones necesarias cuando el objeto colisiona con el + * personaje. + * \param i El objeto en cuestión. + * \param p El personaje. + * \param dir La posición relativa del objeto respecto del personaje. + * \return Valor distinto de 0 si debería liberarse y eliminarse el + * objeto, o 0 si no debería. + */ +int item_player_collide(Item i, Player p, CollisionType dir); + +/** + * \brief Dibuja el objeto en la pantalla, siempre que esté en el + * área visible. + * \param scr La ventana donde dibujar el objeto. + * \param i El objeto. + * \param scroll La distancia en píxeles desde la parte izquierda del + * mundo hasta la parte izquierda de la ventana. + */ +void item_render(Screen scr, Item i, int scroll); + +#endif // __ITEM_H |
