// SuperTux
-// Copyright (C) 2004 Ingo Ruhnke <grumbel@gmx.de>
+// Copyright (C) 2004 Ingo Ruhnke <grumbel@gmail.com>
// Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
//
// This program is free software: you can redistribute it and/or modify
#include <vector>
#include "control/controller.hpp"
-#include "util/reader_fwd.hpp"
#include "math/vector.hpp"
#include "supertux/console.hpp"
#include "supertux/game_object.hpp"
+#include "supertux/game_object_ptr.hpp"
#include "supertux/level.hpp"
#include "supertux/screen.hpp"
#include "supertux/statistics.hpp"
#include "supertux/tile_manager.hpp"
#include "supertux/timer.hpp"
+#include "util/reader_fwd.hpp"
#include "worldmap/direction.hpp"
#include "worldmap/spawn_point.hpp"
#include "worldmap/special_tile.hpp"
#include "worldmap/sprite_change.hpp"
#include "worldmap/teleporter.hpp"
-class Sprite;
class GameObject;
-class TileMap;
class PlayerStatus;
+class Sprite;
+class TileMap;
+class Savegame;
namespace worldmap {
typedef std::vector<SpriteChange*> SpriteChanges;
typedef std::vector<SpawnPoint*> SpawnPoints;
typedef std::vector<LevelTile*> LevelTiles;
- typedef std::vector<GameObject*> GameObjects;
+ typedef std::vector<GameObjectPtr> GameObjects;
typedef std::vector<HSQOBJECT> ScriptList;
- Tux* tux;
+ std::shared_ptr<Tux> tux;
- PlayerStatus* player_status;
+ Savegame& m_savegame;
TileSet *tileset;
bool free_tileset;
bool panning;
public:
- WorldMap(const std::string& filename, PlayerStatus* player_status, const std::string& force_spawnpoint = "");
+ WorldMap(const std::string& filename, Savegame& savegame, const std::string& force_spawnpoint = "");
~WorldMap();
- void add_object(GameObject* object);
-
- void try_expose(GameObject* object);
- void try_unexpose(GameObject* object);
+ void add_object(GameObjectPtr object);
+
+ void try_expose(const GameObjectPtr& object);
+ void try_unexpose(const GameObjectPtr& object);
static WorldMap* current()
{ return current_; }
Vector get_next_tile(Vector pos, Direction direction);
/**
- * gets a bitfield of Tile::WORLDMAP_NORTH | Tile::WORLDMAP_WEST | ... values,
+ * gets a bitfield of Tile::WORLDMAP_NORTH | Tile::WORLDMAP_WEST | ... values,
* which indicates the directions Tux can move to when at the given position.
*/
int available_directions_at(Vector pos);
/**
- * returns a bitfield representing the union of all Tile::WORLDMAP_XXX values
+ * returns a bitfield representing the union of all Tile::WORLDMAP_XXX values
* of all solid tiles at the given position
*/
int tile_data_at(Vector pos);
void finished_level(Level* level);
/** returns current Tux incarnation */
- Tux* get_tux() { return tux; }
+ Tux* get_tux() { return tux.get(); }
- /** returns player status */
- PlayerStatus* get_player_status() { return player_status; }
+ Savegame& get_savegame() { return m_savegame; }
LevelTile* at_level();
SpecialTile* at_special_tile();
*/
float get_height() const;
+ /**
+ * Mark all levels as solved or unsolved
+ */
+ void set_levels_solved(bool solved, bool perfect);
+
private:
void get_level_title(LevelTile& level);
void get_level_target_time(LevelTile& level);