[Super-tux-commit] supertux/src badguy.cpp,1.30,1.31 resources.cpp,1.6,1.7 resources.h,1.2,1.3 speci
Brought to you by:
wkendrick
From: Ingo R. <gr...@us...> - 2004-04-12 19:11:29
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25398 Modified Files: badguy.cpp resources.cpp resources.h special.cpp special.h world.cpp Log Message: - commited MatzeB's update patch Index: resources.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/resources.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- resources.h 11 Apr 2004 14:55:59 -0000 1.2 +++ resources.h 12 Apr 2004 18:57:36 -0000 1.3 @@ -10,8 +10,6 @@ extern texture_type img_box_full; extern texture_type img_box_empty; -extern texture_type img_mints; -extern texture_type img_coffee; extern texture_type img_super_bkgd; extern texture_type img_red_glow; Index: special.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/special.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- special.cpp 11 Apr 2004 16:23:08 -0000 1.14 +++ special.cpp 12 Apr 2004 18:57:36 -0000 1.15 @@ -10,6 +10,7 @@ // // +#include <assert.h> #include "SDL.h" #include "defines.h" #include "special.h" @@ -23,12 +24,9 @@ texture_type img_bullet; texture_type img_golden_herring; -bitmask* bm_bullet; - -void create_special_bitmasks() -{ - bm_bullet = bitmask_create_SDL(img_bullet.sdl_surface); -} +texture_type img_growup; +texture_type img_iceflower; +texture_type img_1up; void Bullet::init(float x, float y, float xm, int dir) @@ -53,6 +51,21 @@ } void +Bullet::remove_me() +{ + std::vector<Bullet>& bullets = World::current()->bullets; + for(std::vector<Bullet>::iterator i = bullets.begin(); + i != bullets.end(); ++i) { + if( & (*i) == this) { + bullets.erase(i); + return; + } + } + + assert(false); +} + +void Bullet::action(double frame_ratio) { base.x = base.x + base.xm * frame_ratio; @@ -75,7 +88,7 @@ issolid(base.x + 4, base.y + 2) || issolid(base.x, base.y + 2)) { - World::current()->bullets.erase(static_cast<std::vector<Bullet>::iterator>(this)); + remove_me(); } } @@ -95,101 +108,112 @@ Bullet::collision(int c_object) { if(c_object == CO_BADGUY) { - std::vector<Bullet>::iterator i; - - for(i = World::current()->bullets.begin(); i != World::current()->bullets.end(); ++i) - { - if(&(*i) == this) - { - World::current()->bullets.erase(i); - return; - } - } + remove_me(); } } void Upgrade::init(float x_, float y_, int dir_, int kind_) { + kind = kind_; + dir = dir_; + base.width = 32; base.height = 0; - kind = kind_; base.x = x_; base.y = y_; + old_base = base; - if(dir_ == LEFT) - base.xm = -2; - else - base.xm = 2; + physic.reset(); + physic.enable_gravity(false); - base.ym = -2; - base.height = 0; - old_base = base; + if(kind == UPGRADE_1UP || kind == UPGRADE_HERRING) { + physic.set_velocity(dir == LEFT ? -1 : 1, 4); + physic.enable_gravity(true); + base.height = 32; + } else if (kind == UPGRADE_ICEFLOWER) { + // nothing + } else { + physic.set_velocity(dir == LEFT ? -2 : 2, 0); + } +} + +void +Upgrade::remove_me() +{ + std::vector<Upgrade>& upgrades = World::current()->upgrades; + for(std::vector<Upgrade>::iterator i = upgrades.begin(); + i != upgrades.end(); ++i) { + if( & (*i) == this) { + upgrades.erase(i); + return; + } + } + + assert(false); } void Upgrade::action(double frame_ratio) { - if (base.height < 32) - { + if (kind == UPGRADE_ICEFLOWER || kind == UPGRADE_GROWUP) { + if (base.height < 32) { /* Rise up! */ - base.height = base.height + 0.7 * frame_ratio; if(base.height > 32) base.height = 32; - } - else - { - /* Move around? */ - - if (kind == UPGRADE_MINTS || - kind == UPGRADE_HERRING) - { - base.x = base.x + base.xm * frame_ratio; - base.y = base.y + base.ym * frame_ratio; - - collision_swept_object_map(&old_base,&base); - - /* Off the screen? Kill it! */ - if (base.x < scroll_x - base.width) - World::current()->upgrades.erase(static_cast<std::vector<Upgrade>::iterator>(this)); - if (base.y > screen->h) - World::current()->upgrades.erase(static_cast<std::vector<Upgrade>::iterator>(this)); + return; + } + } - if (issolid(base.x + 1, base.y + 32.) || - issolid(base.x + 31., base.y + 32.)) - { - if (base.ym > 0) - { - if (kind == UPGRADE_MINTS) - { - base.ym = 0; - } - else if (kind == UPGRADE_HERRING) - { - base.ym = -8; - } + /* Off screen? Kill it! */ + if(base.x < scroll_x - base.width || base.y > screen->h) { + remove_me(); + return; + } - base.y = (int)(base.y / 32) * 32; - } - } - else - base.ym = base.ym + GRAVITY * frame_ratio; + /* Move around? */ + physic.apply(frame_ratio, base.x, base.y); + if(kind == UPGRADE_GROWUP) { + collision_swept_object_map(&old_base, &base); + } - if (issolid(base.x - 1, (int) base.y)) - { - if(base.xm < 0) - base.xm = -base.xm; - } - else if (issolid(base.x + base.width, (int) base.y)) - { - if(base.xm > 0) - base.xm = -base.xm; - } + // fall down? + if(kind == UPGRADE_GROWUP || kind == UPGRADE_HERRING) { + // falling? + if(physic.get_velocity_y() != 0) { + if(issolid(base.x, base.y + base.height)) { + base.y = int(base.y / 32) * 32; + old_base = base; + if(kind == UPGRADE_GROWUP) { + physic.enable_gravity(false); + physic.set_velocity(dir == LEFT ? -2 : 2, 0); + } else if(kind == UPGRADE_HERRING) { + physic.set_velocity(dir == LEFT ? -2 : 2, 3); } + } + } else { + if((physic.get_velocity_x() < 0 + && !issolid(base.x+base.width, base.y + base.height)) + || (physic.get_velocity_x() > 0 + && !issolid(base.x, base.y + base.height))) { + physic.enable_gravity(true); + physic.set_velocity(0, physic.get_velocity_y()); + } + } + } + // horizontal bounce? + if(kind == UPGRADE_GROWUP || kind == UPGRADE_HERRING) { + if ( (physic.get_velocity_x() < 0 + && issolid(base.x, (int) base.y + base.height/2)) + || (physic.get_velocity_x() > 0 + && issolid(base.x + base.width, (int) base.y + base.height/2))) { + physic.set_velocity(-physic.get_velocity_x(),physic.get_velocity_y()); + dir = dir == LEFT ? RIGHT : LEFT; } + } } void @@ -205,23 +229,25 @@ dest.w = 32; dest.h = (int)base.height; - if (kind == UPGRADE_MINTS) - texture_draw_part(&img_mints,0,0,dest.x,dest.y,dest.w,dest.h); - else if (kind == UPGRADE_COFFEE) - texture_draw_part(&img_coffee,0,0,dest.x,dest.y,dest.w,dest.h); + if (kind == UPGRADE_GROWUP) + texture_draw_part(&img_growup,0,0,dest.x,dest.y,dest.w,dest.h); + else if (kind == UPGRADE_ICEFLOWER) + texture_draw_part(&img_iceflower,0,0,dest.x,dest.y,dest.w,dest.h); else if (kind == UPGRADE_HERRING) texture_draw_part(&img_golden_herring,0,0,dest.x,dest.y,dest.w,dest.h); + else if (kind == UPGRADE_1UP) + texture_draw_part(&img_1up, 0, 0, dest.x, dest.y, dest.w, dest.h); } else { - if (kind == UPGRADE_MINTS) + if (kind == UPGRADE_GROWUP) { - texture_draw(&img_mints, + texture_draw(&img_growup, base.x - scroll_x, base.y); } - else if (kind == UPGRADE_COFFEE) + else if (kind == UPGRADE_ICEFLOWER) { - texture_draw(&img_coffee, + texture_draw(&img_iceflower, base.x - scroll_x, base.y); } else if (kind == UPGRADE_HERRING) @@ -229,6 +255,10 @@ texture_draw(&img_golden_herring, base.x - scroll_x, base.y); } + else if (kind == UPGRADE_1UP) + { + texture_draw(&img_1up, base.x - scroll_x, base.y); + } } } @@ -245,11 +275,9 @@ /* p_c_object is CO_PLAYER, so assign it to pplayer */ pplayer = (Player*) p_c_object; - World::current()->upgrades.erase(static_cast<std::vector<Upgrade>::iterator>(this)); - /* Affect the player: */ - if (kind == UPGRADE_MINTS) + if (kind == UPGRADE_GROWUP) { play_sound(sounds[SND_EXCELLENT], SOUND_CENTER_SPEAKER); pplayer->size = BIG; @@ -262,7 +290,7 @@ pplayer->duck = true; } } - else if (kind == UPGRADE_COFFEE) + else if (kind == UPGRADE_ICEFLOWER) { play_sound(sounds[SND_COFFEE], SOUND_CENTER_SPEAKER); pplayer->got_coffee = true; @@ -278,7 +306,39 @@ play_current_music(); } } - break; + else if (kind == UPGRADE_1UP) + { + if(pplayer->lives < MAX_LIVES) { + pplayer->lives++; + play_sound(sounds[SND_LIFEUP], SOUND_CENTER_SPEAKER); + } + } + + remove_me(); + return; } } +void load_special_gfx() +{ + texture_load(&img_growup, datadir + "/images/shared/egg.png", USE_ALPHA); + texture_load(&img_iceflower, datadir + "/images/shared/iceflower.png", + USE_ALPHA); + texture_load(&img_golden_herring, datadir + + "/images/shared/star.png", USE_ALPHA); + texture_load(&img_1up, datadir + "/images/shared/1up.png", + USE_ALPHA); + + texture_load(&img_bullet, datadir + "/images/shared/bullet.png", + USE_ALPHA); +} + +void free_special_gfx() +{ + texture_free(&img_growup); + texture_free(&img_iceflower); + texture_free(&img_1up); + texture_free(&img_golden_herring); + texture_free(&img_bullet); +} + Index: badguy.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/badguy.cpp,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- badguy.cpp 12 Apr 2004 13:16:06 -0000 1.30 +++ badguy.cpp 12 Apr 2004 18:57:24 -0000 1.31 @@ -233,7 +233,8 @@ { Player& tux = *World::current()->get_tux(); - fall(); + if(dying == DYING_NOT) + fall(); /* Move left/right: */ if (mode == NORMAL || mode == KICK) Index: world.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/world.cpp,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- world.cpp 11 Apr 2004 20:46:31 -0000 1.22 +++ world.cpp 12 Apr 2004 18:57:37 -0000 1.23 @@ -465,10 +465,12 @@ else col_side = LEFT; + int posx = ((int)(x+1) / 32) * 32; + int posy = (int)(y/32) * 32 - 32; switch(tile->data) { case 1: // Box with a distro! - add_bouncy_distro(((int)(x + 1) / 32) * 32, (int)(y / 32) * 32 - 32); + add_bouncy_distro(posx, posy); play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER); player_status.score = player_status.score + SCORE_DISTRO; player_status.distros++; @@ -476,14 +478,18 @@ case 2: // Add an upgrade! if (tux.size == SMALL) /* Tux is small, add mints! */ - add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_MINTS); - else /* Tux is big, add coffee: */ - add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_COFFEE); + add_upgrade(posx, posy, col_side, UPGRADE_GROWUP); + else /* Tux is big, add an iceflower: */ + add_upgrade(posx, posy, col_side, UPGRADE_ICEFLOWER); play_sound(sounds[SND_UPGRADE], SOUND_CENTER_SPEAKER); break; case 3: // Add a golden herring - add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_HERRING); + add_upgrade(posx, posy, col_side, UPGRADE_HERRING); + break; + + case 4: // Add a 1up extra + add_upgrade(posx, posy, col_side, UPGRADE_1UP); break; default: break; Index: special.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/special.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- special.h 11 Apr 2004 15:28:26 -0000 1.12 +++ special.h 12 Apr 2004 18:57:36 -0000 1.13 @@ -22,26 +22,40 @@ #include "texture.h" #include "collision.h" #include "player.h" +#include "physic.h" /* Upgrade types: */ enum { - UPGRADE_MINTS, - UPGRADE_COFFEE, - UPGRADE_HERRING + UPGRADE_GROWUP, + UPGRADE_ICEFLOWER, + UPGRADE_HERRING, + UPGRADE_1UP }; +void load_special_gfx(); +void free_special_gfx(); + class Upgrade { - public: +public: int kind; + int dir; base_type base; base_type old_base; + Physic physic; void init(float x, float y, int dir, int kind); void action(double frame_ratio); void draw(); void collision(void* p_c_object, int c_object); + +private: + /** removes the Upgrade from the global upgrade list. Note that after this + * call the class doesn't exist anymore! So don't use any member variables + * anymore then + */ + void remove_me(); }; class Bullet @@ -54,13 +68,13 @@ void action(double frame_ratio); void draw(); void collision(int c_object); -}; - -extern texture_type img_bullet; -extern bitmask* bm_bullet; - -void create_special_bitmasks(); -extern texture_type img_golden_herring; +private: + /** removes the Upgrade from the global upgrade list. Note that after this + * call the class doesn't exist anymore! So don't use any member variables + * anymore then + */ + void remove_me(); +}; #endif /*SUPERTUX_SPECIAL_H*/ Index: resources.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/resources.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- resources.cpp 11 Apr 2004 15:07:29 -0000 1.6 +++ resources.cpp 12 Apr 2004 18:57:36 -0000 1.7 @@ -15,8 +15,6 @@ texture_type img_box_full; texture_type img_box_empty; -texture_type img_mints; -texture_type img_coffee; texture_type img_red_glow; /* Load graphics/sounds shared between all levels: */ @@ -244,20 +242,12 @@ load_badguy_gfx(); /* Upgrades: */ - - texture_load(&img_mints, datadir + "/images/shared/mints.png", USE_ALPHA); - texture_load(&img_coffee, datadir + "/images/shared/coffee.png", USE_ALPHA); - + load_special_gfx(); /* Weapons: */ - - texture_load(&img_bullet, datadir + "/images/shared/bullet.png", USE_ALPHA); - texture_load(&img_red_glow, datadir + "/images/shared/red-glow.png", USE_ALPHA); - - /* Distros: */ texture_load(&img_distro[0], datadir + "/images/shared/distro-0.png", USE_ALPHA); @@ -277,12 +267,6 @@ texture_load(&tux_life, datadir + "/images/shared/tux-life.png", USE_ALPHA); - /* Herring: */ - - texture_load(&img_golden_herring, datadir + "/images/shared/golden-herring.png", - USE_ALPHA); - - /* Sound effects: */ /* if (use_sound) // this will introduce SERIOUS bugs here ! because "load_sound" @@ -305,6 +289,8 @@ { int i; + free_special_gfx(); + for (i = 0; i < 3; i++) { texture_free(&tux_right[i]); @@ -345,9 +331,6 @@ for (i = 0; i < 2; i++) texture_free(&img_flag[i]); - texture_free(&img_mints); - texture_free(&img_coffee); - for (i = 0; i < 4; i++) { texture_free(&img_distro[i]); @@ -355,8 +338,6 @@ texture_free(&img_cloud[1][i]); } - texture_free(&img_golden_herring); - for (i = 0; i < NUM_SOUNDS; i++) free_chunk(sounds[i]); |