#ifndef __TERRAIN_H__ #define __TERRAIN_H__ class Terrain { public: Terrain(); void place(class Map* m, int x, int y); virtual void placeNew(class Map* m, int x, int y) = 0; // template method virtual ~Terrain(void); }; class SimpleTerrain: public Terrain { private: std::string texture; std::string treeType; public: SimpleTerrain(const std::string& texture); SimpleTerrain(const std::string& texture, const std::string& treeType); static Terrain* parse(const std::string& name); void placeNew(class Map* m, int x, int y); ~SimpleTerrain(void); }; class RandomTerrain: public Terrain { private: std::vector terrains; public: RandomTerrain(const std::vector& terrains); void placeNew(class Map* m, int x, int y); ~RandomTerrain(void); }; extern std::map parsedTerrains; #endif