nuclear@4: #ifndef TERRAIN_H_ nuclear@4: #define TERRAIN_H_ nuclear@4: nuclear@4: #include nuclear@4: #include nuclear@5: #include "tinyxml2.h" nuclear@4: nuclear@4: class TerrainNode; nuclear@4: nuclear@4: class Terrain { nuclear@4: private: nuclear@4: TerrainNode *root; nuclear@4: nuclear@5: float size; nuclear@5: nuclear@4: public: nuclear@4: Terrain(); nuclear@4: ~Terrain(); nuclear@4: nuclear@5: bool load(tinyxml2::XMLElement *xelem); nuclear@5: nuclear@5: void set_size(float sz); nuclear@4: float get_height(float x, float y) const; nuclear@5: nuclear@5: void draw() const; nuclear@4: }; nuclear@4: nuclear@4: nuclear@4: class TerrainNode { nuclear@4: private: nuclear@5: int map_xsz, map_ysz; nuclear@5: float map_scale; nuclear@5: unsigned char *hmap; nuclear@4: nuclear@4: public: nuclear@4: TerrainNode *child[4]; nuclear@4: nuclear@4: TerrainNode(); nuclear@4: ~TerrainNode(); nuclear@4: nuclear@5: bool load(tinyxml2::XMLElement *xelem); nuclear@5: bool load_heightmap(const char *fname); nuclear@5: nuclear@5: bool is_leaf() const; nuclear@5: nuclear@4: TerrainNode *get_child(float x, float y); nuclear@4: const TerrainNode *get_child(float x, float y) const; nuclear@4: nuclear@4: float get_height(float x, float y) const; nuclear@5: nuclear@5: void draw(float x, float y, float width, float height) const; nuclear@4: }; nuclear@4: nuclear@4: #endif // TERRAIN_H_