- // remove old GameObjects
- for(GameObjects::iterator i = game_objects.begin();
- i != game_objects.end(); ) {
- GameObject* object = *i;
- if(!object->is_valid()) {
- object->unref();
- i = game_objects.erase(i);
- } else {
- ++i;
+ // position "camera"
+ Vector tux_pos = tux->get_pos();
+ camera_offset.x = tux_pos.x - SCREEN_WIDTH/2;
+ camera_offset.y = tux_pos.y - SCREEN_HEIGHT/2;
+
+ if (camera_offset.x < 0)
+ camera_offset.x = 0;
+ if (camera_offset.y < 0)
+ camera_offset.y = 0;
+
+ if (camera_offset.x > solids->get_width()*32 - SCREEN_WIDTH)
+ camera_offset.x = solids->get_width()*32 - SCREEN_WIDTH;
+ if (camera_offset.y > solids->get_height()*32 - SCREEN_HEIGHT)
+ camera_offset.y = solids->get_height()*32 - SCREEN_HEIGHT;
+
+ // handle input
+ bool enter_level = false;
+ if(main_controller->pressed(Controller::ACTION)
+ || main_controller->pressed(Controller::JUMP)
+ || main_controller->pressed(Controller::MENU_SELECT)) {
+ /* some people define UP and JUMP on the same key... */
+ if(!main_controller->pressed(Controller::UP))
+ enter_level = true;
+ }
+ if(main_controller->pressed(Controller::PAUSE_MENU))
+ on_escape_press();
+
+ // check for teleporters
+ Teleporter* teleporter = at_teleporter(tux->get_tile_pos());
+ if (teleporter && (teleporter->automatic || (enter_level && (!tux->is_moving())))) {
+ enter_level = false;
+ if (teleporter->worldmap != "") {
+ change(teleporter->worldmap, teleporter->spawnpoint);
+ } else {
+ // TODO: an animation, camera scrolling or a fading would be a nice touch
+ sound_manager->play("sounds/warp.wav");
+ tux->back_direction = D_NONE;
+ move_to_spawnpoint(teleporter->spawnpoint);
+ }