X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy.h;h=29d5a19f8f7d101eed092b0f6cd32a7b6889a121;hb=d90b605a623f214534b57cc39f9f2dfda9b91b8f;hp=5c7ed10e31f041b50663cfbe0e4163047d385875;hpb=a2715d2de23913e3bd458cbea162924e2f379495;p=supertux.git diff --git a/src/badguy.h b/src/badguy.h index 5c7ed10e3..29d5a19f8 100644 --- a/src/badguy.h +++ b/src/badguy.h @@ -1,51 +1,41 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2000 Bill Kendrick +// Copyright (C) 2004 Tobias Glaesser +// Copyright (C) 2004 Matthias Braun // -// Interface: badguy -// -// Description: -// -// -// Author: Tobias Glaesser (C) 2003 -// -// Copyright: See COPYING file that comes with this distribution -// +// 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 2 +// 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, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. #ifndef SUPERTUX_BADGUY_H #define SUPERTUX_BADGUY_H #include "SDL.h" +#include "defines.h" #include "bitmask.h" #include "type.h" #include "timer.h" #include "texture.h" #include "physic.h" #include "collision.h" +#include "sprite.h" -extern texture_type img_bsod_left[4]; -extern texture_type img_bsod_right[4]; -extern texture_type img_laptop_left[3]; -extern texture_type img_money_left[2]; - -/* Enemy modes: */ -enum { - NORMAL=0, - FLAT, - KICK, - HELD, - - MONEY_JUMP, - - BOMB_TICKING, - BOMB_EXPLODE, - - STALACTITE_SHAKING, - STALACTITE_FALL, - - FISH_WAIT, - - FLY_UP, - FLY_DOWN -}; +extern Sprite* img_bsod_left; +extern Sprite* img_bsod_right; +extern Sprite* img_laptop_left; /* Bad guy kinds: */ enum BadGuyKind { @@ -73,12 +63,13 @@ struct BadGuyData BadGuyKind kind; int x; int y; + bool stay_on_platform; - BadGuyData(BadGuyKind kind_, int x_, int y_) - : kind(kind_), x(x_), y(y_) {} + BadGuyData(BadGuyKind kind_, int x_, int y_, bool stay_on_platform_) + : kind(kind_), x(x_), y(y_), stay_on_platform(stay_on_platform_) {} BadGuyData() - : kind(BAD_BSOD), x(0), y(0) {} + : kind(BAD_BSOD), x(0), y(0), stay_on_platform(false) {} }; class Player; @@ -87,32 +78,58 @@ class Player; class BadGuy { public: - DyingType dying; - base_type base; + /* Enemy modes: */ + enum BadGuyMode { + NORMAL=0, + FLAT, + KICK, + HELD, + + MONEY_JUMP, + + BOMB_TICKING, + BOMB_EXPLODE, + + STALACTITE_SHAKING, + STALACTITE_FALL, + + FISH_WAIT, + + FLY_UP, + FLY_DOWN + }; +public: + DyingType dying; + base_type base; BadGuyKind kind; - int mode; - int dir; + BadGuyMode mode; + + /** If true the enemy will stay on its current platform, ie. if he + reaches the edge he will turn around and walk into the other + direction, if false the enemy will jump or walk of the edge */ + bool stay_on_platform; + + Direction dir; private: bool seen; base_type old_base; - timer_type timer; + Timer timer; Physic physic; - texture_type* texture_left; - texture_type* texture_right; + Sprite* sprite_left; + Sprite* sprite_right; + int animation_offset; - size_t animation_length; - float animation_speed; public: - void init(float x, float y, BadGuyKind kind); + void init(float x, float y, BadGuyKind kind, bool stay_on_platform); - void action(); + void action(float frame_ratio); void draw(); void collision(void* p_c_object, int c_object, - CollisionType type = COLLISION_NORMAL); + CollisionType type = COLLISION_NORMAL); /** this functions tries to kill the badguy and lets him fall off the * screen. Some badguys like the flame might ignore this. @@ -120,18 +137,18 @@ public: void kill_me(); private: - void action_bsod(); - void action_laptop(); - void action_money(); - void action_bomb(); - void action_mrbomb(); - void action_stalactite(); - void action_flame(); - void action_fish(); - void action_bouncingsnowball(); - void action_flyingsnowball(); - void action_spiky(); - void action_snowball(); + void action_bsod(float frame_ratio); + void action_laptop(float frame_ratio); + void action_money(float frame_ratio); + void action_bomb(float frame_ratio); + void action_mrbomb(float frame_ratio); + void action_stalactite(float frame_ratio); + void action_flame(float frame_ratio); + void action_fish(float frame_ratio); + void action_bouncingsnowball(float frame_ratio); + void action_flyingsnowball(float frame_ratio); + void action_spiky(float frame_ratio); + void action_snowball(float frame_ratio); /** handles falling down. disables gravity calculation when we're back on * ground */ @@ -154,10 +171,12 @@ private: /** squish ourself, give player score and set dying to DYING_SQICHED */ void squish_me(Player* player); /** set image of the badguy */ - void set_texture(texture_type* left, texture_type* right, - int animlength = 1, float animspeed = 1); + void set_sprite(Sprite* left, Sprite* right); }; #endif /*SUPERTUX_BADGUY_H*/ +/* Local Variables: */ +/* mode:c++ */ +/* End: */