From afa6d8c552354f39abb6dae8ffd780e6e30b27af Mon Sep 17 00:00:00 2001 From: Marius DAVID Date: Sat, 30 Aug 2025 13:14:09 +0200 Subject: [PATCH] CS: Make the terrain editing error preview match with the new correction algorithm. --- apps/opencs/view/render/terrainstorage.cpp | 32 ++++++++-------------- apps/opencs/view/render/terrainstorage.hpp | 3 -- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/apps/opencs/view/render/terrainstorage.cpp b/apps/opencs/view/render/terrainstorage.cpp index 4bb9e15dcb..e9f3c1fedc 100644 --- a/apps/opencs/view/render/terrainstorage.cpp +++ b/apps/opencs/view/render/terrainstorage.cpp @@ -107,14 +107,14 @@ namespace CSVRender int TerrainStorage::getUpHeight(int col, int row, std::span heightData) const { - return heightData[(col - 1) * ESM::Land::LAND_SIZE + row] - + mAlteredHeight[static_cast((col - 1) * ESM::Land::LAND_SIZE + row)]; + return heightData[(col + 1) * ESM::Land::LAND_SIZE + row] + + mAlteredHeight[static_cast((col + 1) * ESM::Land::LAND_SIZE + row)]; } int TerrainStorage::getDownHeight(int col, int row, std::span heightData) const { - return heightData[(col + 1) * ESM::Land::LAND_SIZE + row] - + mAlteredHeight[static_cast((col + 1) * ESM::Land::LAND_SIZE + row)]; + return heightData[(col - 1) * ESM::Land::LAND_SIZE + row] + + mAlteredHeight[static_cast((col - 1) * ESM::Land::LAND_SIZE + row)]; } int TerrainStorage::getHeightDifferenceToLeft(int col, int row, std::span heightData) const @@ -137,29 +137,19 @@ namespace CSVRender return abs(getThisHeight(col, row, heightData) - getDownHeight(col, row, heightData)); } - bool TerrainStorage::leftOrUpIsOverTheLimit( - int col, int row, int heightWarningLimit, std::span heightData) const - { - return getHeightDifferenceToLeft(col, row, heightData) >= heightWarningLimit - || getHeightDifferenceToUp(col, row, heightData) >= heightWarningLimit; - } - - bool TerrainStorage::rightOrDownIsOverTheLimit( - int col, int row, int heightWarningLimit, std::span heightData) const - { - return getHeightDifferenceToRight(col, row, heightData) >= heightWarningLimit - || getHeightDifferenceToDown(col, row, heightData) >= heightWarningLimit; - } - void TerrainStorage::adjustColor(int col, int row, const ESM::LandData* heightData, osg::Vec4ub& color) const { if (!heightData) return; // Highlight broken height changes int heightWarningLimit = 1024; - if (((col > 0 && row > 0) && leftOrUpIsOverTheLimit(col, row, heightWarningLimit, heightData->getHeights())) - || ((col < ESM::Land::LAND_SIZE - 1 && row < ESM::Land::LAND_SIZE - 1) - && rightOrDownIsOverTheLimit(col, row, heightWarningLimit, heightData->getHeights()))) + if ((row > 0 && (getHeightDifferenceToRight(col, row, heightData->getHeights()) >= heightWarningLimit)) + || (row > 0 && row < ESM::Land::LAND_SIZE + && (getHeightDifferenceToLeft(col, row, heightData->getHeights()) >= heightWarningLimit)) + || (row == 0 && col > 0 + && (getHeightDifferenceToDown(col, row, heightData->getHeights()) >= heightWarningLimit)) + || (row == 0 && col < ESM::Land::LAND_SIZE + && (getHeightDifferenceToUp(col, row, heightData->getHeights()) >= heightWarningLimit))) { color.r() = 255; color.g() = 0; diff --git a/apps/opencs/view/render/terrainstorage.hpp b/apps/opencs/view/render/terrainstorage.hpp index 7906c75cf6..3477306e3e 100644 --- a/apps/opencs/view/render/terrainstorage.hpp +++ b/apps/opencs/view/render/terrainstorage.hpp @@ -52,9 +52,6 @@ namespace CSVRender int getHeightDifferenceToRight(int col, int row, std::span heightData) const; int getHeightDifferenceToUp(int col, int row, std::span heightData) const; int getHeightDifferenceToDown(int col, int row, std::span heightData) const; - bool leftOrUpIsOverTheLimit(int col, int row, int heightWarningLimit, std::span heightData) const; - bool rightOrDownIsOverTheLimit( - int col, int row, int heightWarningLimit, std::span heightData) const; void adjustColor(int col, int row, const ESM::LandData* heightData, osg::Vec4ub& color) const override; float getAlteredHeight(int col, int row) const override;