diff --git a/Engine/source/terrain/terrData.cpp b/Engine/source/terrain/terrData.cpp index 1dd89d7b3..913232298 100644 --- a/Engine/source/terrain/terrData.cpp +++ b/Engine/source/terrain/terrData.cpp @@ -174,6 +174,18 @@ ConsoleFunction(getTerrainUnderWorldPoint, S32, 2, 4, "(Point3F x/y/z) Gets the } +typedef TerrainBlock::BaseTexFormat baseTexFormat; +DefineEnumType(baseTexFormat); + +ImplementEnumType(baseTexFormat, + "Description\n" + "@ingroup ?\n\n") +{ TerrainBlock::NONE, "NONE", "No cached terrain.\n" }, +{ TerrainBlock::DDS, "DDS", "Cache the terrain in a DDS format.\n" }, +{ TerrainBlock::PNG, "PNG", "Cache the terrain in a PNG format.\n" }, +{ TerrainBlock::JPG, "JPG", "Cache the terrain in a JPG format.\n" }, +EndImplementEnumType; + TerrainBlock::TerrainBlock() : mSquareSize( 1.0f ), mCastShadows( true ), @@ -270,6 +282,27 @@ bool TerrainBlock::_setBaseTexSize( void *obj, const char *index, const char *da return false; } +bool TerrainBlock::_setBaseTexFormat(void *obj, const char *index, const char *data) +{ + TerrainBlock *terrain = static_cast(obj); + + EngineEnumTable eTable = _baseTexFormat::_sEnumTable; + + for (U8 i = 0; i < eTable.getNumValues(); i++) + { + if (strcasecmp(eTable[i].mName, data) == 0) + { + terrain->mBaseTexFormat = (BaseTexFormat)eTable[i].mInt; + terrain->_updateMaterials(); + terrain->_updateLayerTexture(); + terrain->_updateBaseTexture(true); + break; + } + } + + return false; +} + bool TerrainBlock::_setLightMapSize( void *obj, const char *index, const char *data ) { TerrainBlock *terrain = static_cast(obj); @@ -1105,6 +1138,10 @@ void TerrainBlock::initPersistFields() &TerrainBlock::_setBaseTexSize, &defaultProtectedGetFn, "Size of base texture size per meter." ); + addProtectedField("baseTexFormat", TYPEID(), Offset(mBaseTexFormat, TerrainBlock), + &TerrainBlock::_setBaseTexFormat, &defaultProtectedGetFn, + ""); + addProtectedField( "lightMapSize", TypeS32, Offset( mLightMapSize, TerrainBlock ), &TerrainBlock::_setLightMapSize, &defaultProtectedGetFn, "Light map dimensions in pixels." ); diff --git a/Engine/source/terrain/terrData.h b/Engine/source/terrain/terrData.h index b3433dfb1..91618df73 100644 --- a/Engine/source/terrain/terrData.h +++ b/Engine/source/terrain/terrData.h @@ -74,6 +74,8 @@ protected: NextFreeMask = Parent::NextFreeMask << 6, }; +public: + enum BaseTexFormat { NONE, DDS, PNG, JPG @@ -94,6 +96,8 @@ protected: } }; +protected: + Box3F mBounds; /// @@ -235,7 +239,8 @@ protected: // Protected fields static bool _setTerrainFile( void *obj, const char *index, const char *data ); static bool _setSquareSize( void *obj, const char *index, const char *data ); - static bool _setBaseTexSize( void *obj, const char *index, const char *data ); + static bool _setBaseTexSize(void *obj, const char *index, const char *data); + static bool _setBaseTexFormat(void *obj, const char *index, const char *data); static bool _setLightMapSize( void *obj, const char *index, const char *data ); public: