[Super-tux-commit] supertux/src gameloop.cpp,1.170,1.171 sector.cpp,1.21,1.22 sector.h,1.10,1.11
Brought to you by:
wkendrick
From: Ricardo C. <rm...@us...> - 2004-09-13 18:50:55
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24674/src Modified Files: gameloop.cpp sector.cpp sector.h Log Message: Spawn points should now be working! Index: sector.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/sector.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- sector.h 5 Aug 2004 10:10:19 -0000 1.10 +++ sector.h 13 Sep 2004 18:50:46 -0000 1.11 @@ -72,6 +72,8 @@ /// activates this sector (change music, intialize player class, ...) void activate(const std::string& spawnpoint = "main"); + /// get best spawn point + Vector get_best_spawn_point(Vector pos); void action(float elapsed_time); void update_game_objects(); Index: sector.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/sector.cpp,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- sector.cpp 9 Sep 2004 10:11:56 -0000 1.21 +++ sector.cpp 13 Sep 2004 18:50:46 -0000 1.22 @@ -96,7 +96,7 @@ } else if(token == "background") { background = new Background(reader); add_object(background); - } else if(token == "playerspawn") { + } else if(token == "spawn-points") { SpawnPoint* sp = new SpawnPoint; reader.read_string("name", sp->name); reader.read_float("x", sp->pos.x); @@ -228,7 +228,27 @@ add_object(tilemap); } - // TODO read resetpoints + // read reset-points (now spawn-points) + { + lisp_object_t* cur = 0; + if(reader.read_lisp("reset-points", cur)) { + while(!lisp_nil_p(cur)) { + lisp_object_t* data = lisp_car(cur); + LispReader reader(lisp_cdr(data)); + + Vector sp_pos; + if(reader.read_float("x", sp_pos.x) && reader.read_float("y", sp_pos.y)) + { + SpawnPoint* sp = new SpawnPoint; + sp->name = "main"; + sp->pos = sp_pos; + spawnpoints.push_back(sp); + } + + cur = lisp_cdr(cur); + } + } + } // read objects { @@ -272,11 +292,11 @@ for(SpawnPoints::iterator i = spawnpoints.begin(); i != spawnpoints.end(); ++i) { SpawnPoint* spawn = *i; - writer.start_list("playerspawn"); + writer.start_list("spawn-points"); writer.write_string("name", spawn->name); writer.write_float("x", spawn->pos.x); writer.write_float("y", spawn->pos.y); - writer.end_list("playerspawn"); + writer.end_list("spawn-points"); } // write objects @@ -363,6 +383,22 @@ camera->reset(Vector(player->base.x, player->base.y)); } +Vector +Sector::get_best_spawn_point(Vector pos) +{ +Vector best_reset_point = Vector(-1,-1); + +for(SpawnPoints::iterator i = spawnpoints.begin(); i != spawnpoints.end(); + ++i) { + if((*i)->name != "main") + continue; + if((*i)->pos.x > best_reset_point.x && (*i)->pos.x < pos.x) + best_reset_point = (*i)->pos; + } + +return best_reset_point; +} + void Sector::action(float elapsed_time) { Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.170 retrieving revision 1.171 diff -u -d -r1.170 -r1.171 --- gameloop.cpp 13 Sep 2004 12:08:40 -0000 1.170 +++ gameloop.cpp 13 Sep 2004 18:50:46 -0000 1.171 @@ -60,6 +60,7 @@ #include "worldmap.h" #include "intro.h" #include "misc.h" +#include "camera.h" GameSession* GameSession::current_ = 0; @@ -110,13 +111,11 @@ last_keys.clear(); -#if 0 - float old_x_pos = -1; - if (world) + Vector tux_pos = Vector(-1,-1); + if (currentsector) { // Tux has lost a life, so we try to respawn him at the nearest reset point - old_x_pos = world->get_tux()->base.x; + tux_pos = currentsector->player->base; } -#endif delete level; currentsector = 0; @@ -125,31 +124,24 @@ level->load(levelname); if(flip_level) level->do_vertical_flip(); + currentsector = level->get_sector("main"); if(!currentsector) Termination::abort("Level has no main sector.", ""); currentsector->activate("main"); -#if 0 // TODO // Set Tux to the nearest reset point - if (old_x_pos != -1) + if(tux_pos.x != -1) { - ResetPoint best_reset_point = { -1, -1 }; - for(std::vector<ResetPoint>::iterator i = get_level()->reset_points.begin(); - i != get_level()->reset_points.end(); ++i) - { - if (i->x < old_x_pos && best_reset_point.x < i->x) - best_reset_point = *i; - } - - if (best_reset_point.x != -1) - { - world->get_tux()->base.x = best_reset_point.x; - world->get_tux()->base.y = best_reset_point.y; - } - } -#endif + tux_pos = currentsector->get_best_spawn_point(tux_pos); + currentsector->player->base.x = tux_pos.x; + currentsector->player->base.y = tux_pos.y; + // has to reset camera on swapping + currentsector->camera->reset(Vector(currentsector->player->base.x, + currentsector->player->base.y)); + } + if (st_gl_mode != ST_GL_DEMO_GAME) { if(st_gl_mode == ST_GL_PLAY || st_gl_mode == ST_GL_LOAD_LEVEL_FILE) @@ -377,6 +369,10 @@ } break; default: + break; + } + } + /* Check if chacrater is ASCII */ char ch[2]; if((event.key.keysym.unicode & 0xFF80) == 0) @@ -420,9 +416,7 @@ tux.invincible_timer.start(time_left.get_left()); last_keys.clear(); } - break; - } - } + break; case SDL_JOYAXISMOTION: |