https://github.com/xbpeng/DeepTerrainRL
Tip revision: ed82e2ebe5f14fa875cc3d0a2180c64980408e8f authored by Glen on 19 October 2016, 17:49:36 UTC
Update README.md
Update README.md
Tip revision: ed82e2e
TerrainGen2D.h
#pragma once
#include <vector>
#include "util/Rand.h"
#include "util/ArgParser.h"
#include "util/MathUtil.h"
#include "util/JsonUtil.h"
class cTerrainGen2D
{
public:
enum eType
{
eTypeFlat,
eTypeGaps,
eTypeSteps,
eTypeWalls,
eTypeBumps,
eTypeMixed,
eTypeNarrowGaps,
eTypeSlopes,
eTypeSlopesGaps,
eTypeSlopesWalls,
eTypeSlopesSteps,
eTypeSlopesMixed,
eTypeSlopesNarrowGaps,
eTypeCliffs,
eTypeMax
};
enum eParams
{
eParamsGapSpacingMin,
eParamsGapSpacingMax,
eParamsGapWidthMin,
eParamsGapWidthMax,
eParamsGapDepthMin,
eParamsGapDepthMax,
eParamsWallSpacingMin,
eParamsWallSpacingMax,
eParamsWallWidthMin,
eParamsWallWidthMax,
eParamsWallHeightMin,
eParamsWallHeightMax,
eParamsStepSpacingMin,
eParamsStepSpacingMax,
eParamsStepHeight0Min,
eParamsStepHeight0Max,
eParamsStepHeight1Min,
eParamsStepHeight1Max,
eParamsBumpHeightMin,
eParamsBumpHeightMax,
eParamsNarrowGapSpacingMin,
eParamsNarrowGapSpacingMax,
eParamsNarrowGapDistMin,
eParamsNarrowGapDistMax,
eParamsNarrowGapWidthMin,
eParamsNarrowGapWidthMax,
eParamsNarrowGapDepthMin,
eParamsNarrowGapDepthMax,
eParamsNarrowGapCountMin,
eParamsNarrowGapCountMax,
eParamsCliffSpacingMin,
eParamsCliffSpacingMax,
eParamsCliffHeight0Min,
eParamsCliffHeight0Max,
eParamsCliffHeight1Min,
eParamsCliffHeight1Max,
eParamsCliffMiniCountMax,
eParamsSlopeDeltaRange,
eParamsSlopeDeltaMin,
eParamsSlopeDeltaMax,
eParamsMax
};
typedef Eigen::Matrix<double, eParamsMax, 1> tParams;
struct tParamDef
{
std::string mName;
double mDefaultVal;
};
static const std::string gTypeKey;
static const std::string gParamsKey;
static const tParamDef gParamDefs[];
static tParams GetDefaultParams();
static void LoadParams(const Json::Value& root, Eigen::VectorXd& out_params);
static void ParseType(const std::string& str, eType& out_type);
typedef double (*tTerrainFunc)(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static tTerrainFunc GetTerrainFunc(eType terrain_type);
static const float gVertSpacing;
static double BuildFlat(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildGaps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSteps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildWalls(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildBumps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildMixed(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildNarrowGaps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSlopes(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSlopesGaps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSlopesSteps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSlopesWalls(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSlopesMixed(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildSlopesNarrowGaps(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double BuildCliffs(double width, const tParams& params, cRand& rand, std::vector<float>& out_data);
static double AddFlat(double width, std::vector<float>& out_data);
static double AddStep(double width, double height, std::vector<float>& out_data);
static double AddBox(double spacing, double width, double depth, std::vector<float>& out_data);
static double AddSlope(double width, double slope, std::vector<float>& out_data);
static void OverlaySlopes(double delta_range, double delta_min, double delta_max, double init_slope, int beg_idx, int end_idx, cRand& rand, std::vector<float>& out_data);
static void OverlayBumps(double min_delta_h, double max_delta_h, int beg_idx, int end_idx, cRand& rand, std::vector<float>& out_data);
protected:
static int CalcNumVerts(double w);
};