#ifndef TERRAINDEFINITION_H #define TERRAINDEFINITION_H #include "definition_global.h" #include "DefinitionNode.h" namespace paysages { namespace definition { typedef struct { double min_height; double max_height; double base_height; } HeightInfo; class DEFINITIONSHARED_EXPORT TerrainDefinition : public DefinitionNode { public: TerrainDefinition(DefinitionNode* parent); virtual ~TerrainDefinition(); virtual void save(PackStream* stream) const override; virtual void load(PackStream* stream) override; virtual void copy(DefinitionNode* destination) const override; virtual void validate() override; inline FloatNode *propWaterHeight() const {return water_height;} double getGridHeight(int x, int z, bool with_painting); double getInterpolatedHeight(double x, double z, bool scaled, bool with_painting, bool water_offset=true); double getWaterOffset() const; unsigned long getMemoryStats(); HeightInfo getHeightInfo(); public: typedef enum { TERRAIN_PRESET_STANDARD } TerrainPreset; void applyPreset(TerrainPreset preset); public: double height; double shadow_smoothing; TerrainHeightMap* height_map; bool has_painting; double _detail; NoiseGenerator* _height_noise; double _min_height; double _max_height; private: FloatNode *water_height; }; } } #endif // TERRAINDEFINITION_H