326 lines
7.9 KiB
C
326 lines
7.9 KiB
C
/*******************************************************************
|
|
*
|
|
* Project: FreeNukum 2D Jump'n Run
|
|
* File: Bot struct
|
|
*
|
|
* *****************************************************************
|
|
*
|
|
* Copyright 2008 Wolfgang Silbermayr
|
|
*
|
|
* *****************************************************************
|
|
*
|
|
* This file is part of Freenukum.
|
|
*
|
|
* Freenukum 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.
|
|
*
|
|
* Freenukum 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 <http://www.gnu.org/licenses/>.
|
|
*
|
|
*******************************************************************/
|
|
|
|
#ifndef FN_BOT_H
|
|
#define FN_BOT_H
|
|
|
|
#include <SDL.h>
|
|
|
|
#include "fn_hero.h"
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
typedef enum fn_bot_type_e fn_bot_type_e;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
typedef struct fn_bot_t fn_bot_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
typedef union fn_bot_data_u fn_bot_data_u;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
enum fn_bot_type_e {
|
|
FN_BOT_TYPE_FIREWHEEL,
|
|
FN_BOT_TYPE_FLAMEGNOME,
|
|
FN_BOT_TYPE_FLYINGBOT,
|
|
FN_BOT_TYPE_FOOTBOT,
|
|
FN_BOT_TYPE_HELICOPTER,
|
|
FN_BOT_TYPE_RABBITOID,
|
|
FN_BOT_TYPE_REDBALL_JUMPING,
|
|
FN_BOT_TYPE_REDBALL_LYING,
|
|
FN_BOT_TYPE_SNAKEBOT,
|
|
FN_BOT_TYPE_TANKBOT,
|
|
FN_BOT_TYPE_WALLCRAWLER_LEFT,
|
|
FN_BOT_TYPE_WALLCRAWLER_RIGHT,
|
|
FN_BOT_TYPE_DRPROTON
|
|
};
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a firewheel bot.
|
|
*/
|
|
typedef struct fn_bot_firewheel_data_t {
|
|
} fn_bot_firewheel_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a flamegnome bot.
|
|
*/
|
|
typedef struct fn_bot_flamegnome_data_t {
|
|
} fn_bot_flamegnome_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a flying bot.
|
|
*/
|
|
typedef struct fn_bot_flyingbot_data_t {
|
|
} fn_bot_flyingbot_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a helicopter bot.
|
|
*/
|
|
typedef struct fn_bot_helicopter_data_t {
|
|
} fn_bot_helicopter_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a rabbitoid bot.
|
|
*/
|
|
typedef struct fn_bot_rabbitoid_data_t {
|
|
} fn_bot_rabbitoid_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a jumping red ball bot.
|
|
*/
|
|
typedef struct fn_bot_redball_jumping_data_t {
|
|
} fn_bot_redball_jumping_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a lying red ball bot.
|
|
*/
|
|
typedef struct fn_bot_redball_lying_data_t {
|
|
} fn_bot_redball_lying_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a snake bot.
|
|
*/
|
|
typedef struct fn_bot_snakebot_data_t {
|
|
} fn_bot_snakebot_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a tank bot.
|
|
*/
|
|
typedef struct fn_bot_tankbot_data_t {
|
|
} fn_bot_tankbot_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a left-sided wallcrawler bot.
|
|
*/
|
|
typedef struct fn_bot_wallcrawler_left_data_t {
|
|
} fn_bot_wallcrawler_left_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a right-sided wallcrawler bot.
|
|
*/
|
|
typedef struct fn_bot_wallcrawler_right_data_t {
|
|
} fn_bot_wallcrawler_right_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for dr proton.
|
|
*/
|
|
typedef struct fn_bot_drproton_data_t {
|
|
} fn_bot_drproton_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* The data needed for a camera.
|
|
*/
|
|
typedef struct fn_bot_camera_data_t {
|
|
} fn_bot_camera_data_t;
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
union fn_bot_data_u {
|
|
fn_bot_firewheel_data_t firewheel;
|
|
fn_bot_flamegnome_data_t flamegnome;
|
|
fn_bot_flyingbot_data_t flyingbot;
|
|
fn_bot_helicopter_data_t helicopter;
|
|
fn_bot_rabbitoid_data_t rabbitoid;
|
|
fn_bot_redball_jumping_data_t redball_jumping;
|
|
fn_bot_redball_lying_data_t redball_lying;
|
|
fn_bot_snakebot_data_t snakebot;
|
|
fn_bot_tankbot_data_t tankbot;
|
|
fn_bot_wallcrawler_left_data_t wallcrawler_left;
|
|
fn_bot_wallcrawler_right_data_t wallcrawler_right;
|
|
fn_bot_drproton_data_t drproton;
|
|
fn_bot_camera_data_t camera;
|
|
};
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
struct fn_bot_t {
|
|
/**
|
|
* The bot type.
|
|
*/
|
|
fn_bot_type_e type;
|
|
|
|
/**
|
|
* The level inside which the bot is located.
|
|
*/
|
|
fn_hero_t * hero;
|
|
|
|
/**
|
|
* The tilecache from which to blit the bot.
|
|
*/
|
|
fn_tilecache_t * tilecache;
|
|
|
|
/**
|
|
* The size of one pixel.
|
|
*/
|
|
size_t pixelsize;
|
|
|
|
/**
|
|
* The x position in the level.
|
|
*/
|
|
Uint16 x;
|
|
|
|
/**
|
|
* The y position in the level.
|
|
*/
|
|
Uint16 y;
|
|
|
|
/**
|
|
* The data of the different bot types.
|
|
*/
|
|
fn_bot_data_u data;
|
|
};
|
|
|
|
/* --------------------------------------------------------------- */
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Create a bot.
|
|
*
|
|
* @param type The type of the bot.
|
|
* @param level The level inside which the bot is located.
|
|
* @param tilecache The tilecache to use for blitting.
|
|
* @param x The x position of the bot (in half-tiles)
|
|
* @param y The y position of the bot (in half-tiles)
|
|
*
|
|
* @return The newly created bot.
|
|
*/
|
|
fn_bot_t * fn_bot_create(
|
|
fn_bot_type_e type,
|
|
fn_hero_t * hero,
|
|
fn_tilecache_t * tilecache,
|
|
Uint8 pixelsize,
|
|
size_t x,
|
|
size_t y);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Delete a created bot.
|
|
*
|
|
* @param bot The bot to delete.
|
|
*/
|
|
void fn_bot_free(fn_bot_t * bot);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Blit the bot into the level.
|
|
*
|
|
* @param bot The bot to blit.
|
|
* @param target The target surface.
|
|
*/
|
|
void fn_bot_blit(fn_bot_t * bot, SDL_Surface * target);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Get the x position of the bot.
|
|
*
|
|
* @param bot The bot.
|
|
*
|
|
* @return The x position (in half-tiles) of the bot.
|
|
*/
|
|
size_t fn_bot_get_x(fn_bot_t * bot);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Get the y position of the bot.
|
|
*
|
|
* @param bot The bot.
|
|
*
|
|
* @return The y position (in half-tiles) of the bot.
|
|
*/
|
|
size_t fn_bot_get_y(fn_bot_t * bot);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Hit the bot with a shot from our hero.
|
|
*
|
|
* @param bot The bot which gets hit.
|
|
*
|
|
* @return non-zero if the bot gets hit, otherwise 0.
|
|
*/
|
|
int fn_bot_get_shot(fn_bot_t * bot);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Animate another animation frame of our bot.
|
|
*
|
|
* @param bot The bot which should be animated.
|
|
*/
|
|
void fn_bot_next_animation_frame(fn_bot_t * bot);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
/**
|
|
* Progress in the bot's actions (bot behaviour).
|
|
*
|
|
* @param bot The bot which acts.
|
|
*
|
|
* @return zero if the bot was killed, otherwise non-zero.
|
|
* If zero was returned, the creator of the bot should delete it.
|
|
*/
|
|
int fn_bot_action_progress(fn_bot_t * bot);
|
|
|
|
/* --------------------------------------------------------------- */
|
|
|
|
#endif /* FN_BOT_H */
|
|
|