mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-27 05:10:26 +00:00
Split complex if-logic into multiple reasonably named functions
This commit is contained in:
parent
0ce971c1bb
commit
45b0f034c3
2 changed files with 77 additions and 18 deletions
|
@ -78,27 +78,74 @@ namespace CSVRender
|
||||||
throw std::runtime_error("getBounds not implemented");
|
throw std::runtime_error("getBounds not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getThisHeight(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return heightData->mHeights[col*ESM::Land::LAND_SIZE + row] +
|
||||||
|
mAlteredHeight[static_cast<unsigned int>(col*ESM::Land::LAND_SIZE + row)];
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getLeftHeight(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return heightData->mHeights[(col)*ESM::Land::LAND_SIZE + row - 1] +
|
||||||
|
mAlteredHeight[static_cast<unsigned int>((col)*ESM::Land::LAND_SIZE + row - 1)];
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getRightHeight(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return heightData->mHeights[col*ESM::Land::LAND_SIZE + row + 1] +
|
||||||
|
mAlteredHeight[static_cast<unsigned int>(col*ESM::Land::LAND_SIZE + row + 1)];
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getUpHeight(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return heightData->mHeights[(col - 1)*ESM::Land::LAND_SIZE + row] +
|
||||||
|
mAlteredHeight[static_cast<unsigned int>((col - 1)*ESM::Land::LAND_SIZE + row)];
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getDownHeight(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return heightData->mHeights[(col + 1)*ESM::Land::LAND_SIZE + row] +
|
||||||
|
mAlteredHeight[static_cast<unsigned int>((col + 1)*ESM::Land::LAND_SIZE + row)];
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getHeightDifferenceToLeft(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return abs(getThisHeight(col, row, heightData) - getLeftHeight(col, row, heightData));
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getHeightDifferenceToRight(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return abs(getThisHeight(col, row, heightData) - getRightHeight(col, row, heightData));
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getHeightDifferenceToUp(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return abs(getThisHeight(col, row, heightData) - getUpHeight(col, row, heightData));
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerrainStorage::getHeightDifferenceToDown(int col, int row, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return abs(getThisHeight(col, row, heightData) - getDownHeight(col, row, heightData));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TerrainStorage::LeftOrUpIsOverTheLimit(int col, int row, int heightWarningLimit, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return getHeightDifferenceToLeft(col, row, heightData) >= heightWarningLimit ||
|
||||||
|
getHeightDifferenceToUp(col, row, heightData) >= heightWarningLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TerrainStorage::RightOrDownIsOverTheLimit(int col, int row, int heightWarningLimit, const ESM::Land::LandData *heightData) const
|
||||||
|
{
|
||||||
|
return getHeightDifferenceToRight(col, row, heightData) >= heightWarningLimit ||
|
||||||
|
getHeightDifferenceToDown(col, row, heightData) >= heightWarningLimit;
|
||||||
|
}
|
||||||
|
|
||||||
void TerrainStorage::adjustColor(int col, int row, const ESM::Land::LandData *heightData, osg::Vec4ub& color) const
|
void TerrainStorage::adjustColor(int col, int row, const ESM::Land::LandData *heightData, osg::Vec4ub& color) const
|
||||||
{
|
{
|
||||||
// Highlight broken height changes
|
// Highlight broken height changes
|
||||||
if ( ((col > 0 && row > 0) &&
|
int heightWarningLimit = 1024;
|
||||||
((abs(heightData->mHeights[col*ESM::Land::LAND_SIZE + row] +
|
if (((col > 0 && row > 0) && LeftOrUpIsOverTheLimit(col, row, heightWarningLimit, heightData)) ||
|
||||||
mAlteredHeight[static_cast<unsigned int>(col*ESM::Land::LAND_SIZE + row)] -
|
((col < ESM::Land::LAND_SIZE - 1 && row < ESM::Land::LAND_SIZE - 1) && RightOrDownIsOverTheLimit(col, row, heightWarningLimit, heightData)))
|
||||||
(heightData->mHeights[(col)*ESM::Land::LAND_SIZE + row - 1] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>((col)*ESM::Land::LAND_SIZE + row - 1)])) >= 1024 ) ||
|
|
||||||
abs(heightData->mHeights[col*ESM::Land::LAND_SIZE + row] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>(col*ESM::Land::LAND_SIZE + row)] -
|
|
||||||
(heightData->mHeights[(col - 1)*ESM::Land::LAND_SIZE + row] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>((col - 1)*ESM::Land::LAND_SIZE + row)])) >= 1024 )) ||
|
|
||||||
((col < ESM::Land::LAND_SIZE - 1 && row < ESM::Land::LAND_SIZE - 1) &&
|
|
||||||
((abs(heightData->mHeights[col*ESM::Land::LAND_SIZE + row] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>(col*ESM::Land::LAND_SIZE + row)] -
|
|
||||||
(heightData->mHeights[(col)*ESM::Land::LAND_SIZE + row + 1] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>((col)*ESM::Land::LAND_SIZE + row + 1)])) >= 1024 ) ||
|
|
||||||
abs(heightData->mHeights[col*ESM::Land::LAND_SIZE + row] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>(col*ESM::Land::LAND_SIZE + row)] -
|
|
||||||
(heightData->mHeights[(col + 1)*ESM::Land::LAND_SIZE + row] +
|
|
||||||
mAlteredHeight[static_cast<unsigned int>((col + 1)*ESM::Land::LAND_SIZE + row)])) >= 1024 )))
|
|
||||||
{
|
{
|
||||||
color.r() = 255;
|
color.r() = 255;
|
||||||
color.g() = 0;
|
color.g() = 0;
|
||||||
|
|
|
@ -30,6 +30,18 @@ namespace CSVRender
|
||||||
|
|
||||||
virtual void getBounds(float& minX, float& maxX, float& minY, float& maxY) override;
|
virtual void getBounds(float& minX, float& maxX, float& minY, float& maxY) override;
|
||||||
|
|
||||||
|
int getThisHeight(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getLeftHeight(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getRightHeight(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getUpHeight(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getDownHeight(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getHeightDifferenceToLeft(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getHeightDifferenceToRight(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getHeightDifferenceToUp(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
int getHeightDifferenceToDown(int col, int row, const ESM::Land::LandData *heightData) const;
|
||||||
|
bool LeftOrUpIsOverTheLimit(int col, int row, int heightWarningLimit, const ESM::Land::LandData *heightData) const;
|
||||||
|
bool RightOrDownIsOverTheLimit(int col, int row, int heightWarningLimit, const ESM::Land::LandData *heightData) const;
|
||||||
|
|
||||||
void adjustColor(int col, int row, const ESM::Land::LandData *heightData, osg::Vec4ub& color) const override;
|
void adjustColor(int col, int row, const ESM::Land::LandData *heightData, osg::Vec4ub& color) const override;
|
||||||
float getAlteredHeight(int col, int row) const override;
|
float getAlteredHeight(int col, int row) const override;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue