* some new sounds as csound source (you'll need csound
[supertux.git] / src / tile_manager.h
index 67c7512..961e077 100644 (file)
@@ -25,8 +25,9 @@
 #include <vector>
 #include <string>
 #include <map>
-
-class Tile;
+#include <stdint.h>
+#include <assert.h>
+#include "tile.h"
 
 struct TileGroup
 {
@@ -41,37 +42,55 @@ struct TileGroup
 
 class TileManager
 {
- private:
-  TileManager();
-  ~TileManager();
-  
-//  std::vector<Tile*> tiles;
-  typedef std::map<int, Tile*> Tiles;
+private:
+  typedef std::vector<Tile*> Tiles;
   Tiles tiles;
 
   static TileManager* instance_ ;
-  static std::set<TileGroup>* tilegroups_;
-  void load_tileset(std::string filename);
+  std::set<TileGroup> tilegroups;
 
-  std::string current_tileset;
+  std::string tiles_path;
   
- public:
-  static TileManager* instance()
-  { return instance_ ? instance_ : instance_ = new TileManager(); }
-  static void destroy_instance()
-  { delete instance_; instance_ = 0; }
+  void load_tileset(std::string filename);
 
-  void draw_tile(DrawingContext& context, unsigned int id,
-      const Vector& pos, int layer);
-  
-  static std::set<TileGroup>* tilegroups() { if(!instance_) { instance_ = new TileManager(); } return tilegroups_ ? tilegroups_ : tilegroups_ = new std::set<TileGroup>; }
+public:
+  TileManager(const std::string& filename);
+  ~TileManager();
+
+  const std::set<TileGroup>& get_tilegroups() const
+  {
+    return tilegroups;
+  }
+
+  const Tile* get(uint32_t id) const
+  {
+    assert(id < tiles.size());
+    Tile* tile = tiles[id];
+    if(!tile) {
+      std::cout << "TileManager: Invalid tile: " << id << std::endl;
+      return tiles[0];
+    }
 
-  unsigned int total_ids()
-    { return tiles.size(); }
+    if(tile->images.size() == 0 && tile->imagespecs.size() != 0)
+      tile->load_images(tiles_path);
+    
+    return tile;
+  }
 
-  Tile* get(unsigned int id);
+  uint32_t get_max_tileid() const
+  {
+    return tiles.size();
+  }
+
+  int get_default_width() const
+  {
+    return 32;
+  }
+
+  int get_default_height() const
+  {
+    return 32;
+  }
 };
 
 #endif
-
-/* EOF */