61 lines
1.4 KiB
C++
61 lines
1.4 KiB
C++
|
#include "WaterCoveragePreviewRenderer.h"
|
||
|
|
||
|
#include "BasePreview.h"
|
||
|
#include "Scenery.h"
|
||
|
|
||
|
// TEMP
|
||
|
#include "RenderingScenery.h"
|
||
|
#include "terrain/public.h"
|
||
|
#include "water/public.h"
|
||
|
|
||
|
WaterCoveragePreviewRenderer::WaterCoveragePreviewRenderer(WaterDefinition* definition):
|
||
|
definition(definition)
|
||
|
{
|
||
|
highlight = true;
|
||
|
}
|
||
|
|
||
|
void WaterCoveragePreviewRenderer::bindEvent(BasePreview* preview)
|
||
|
{
|
||
|
preview->addOsd("geolocation");
|
||
|
// TODO Translation
|
||
|
preview->addToggle("highlight", "Coverage highlight", true);
|
||
|
|
||
|
preview->configScaling(20.0, 1000.0, 20.0, 200.0);
|
||
|
preview->configScrolling(-1000.0, 1000.0, 0.0, -1000.0, 1000.0, 0.0);
|
||
|
// TODO Keep camera above center (for reflections)
|
||
|
}
|
||
|
|
||
|
void WaterCoveragePreviewRenderer::updateEvent()
|
||
|
{
|
||
|
getScenery()->setTerrain(RenderingScenery::getCurrent()->getTerrain());
|
||
|
getScenery()->setWater(definition);
|
||
|
prepare();
|
||
|
|
||
|
terrainAlterPreviewRenderer(this);
|
||
|
}
|
||
|
|
||
|
Color WaterCoveragePreviewRenderer::getColor2D(double x, double y, double scaling)
|
||
|
{
|
||
|
double height;
|
||
|
|
||
|
height = terrain->getHeight(this, x, y, 1);
|
||
|
if (height > terrain->getWaterHeight(this))
|
||
|
{
|
||
|
return terrainGetPreviewColor(this, x, y, scaling);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Color base;
|
||
|
|
||
|
base = water->getResult(this, x, y).final;
|
||
|
|
||
|
if (highlight)
|
||
|
{
|
||
|
Color mask = {0.5, 0.5, 1.0, 0.5};
|
||
|
colorMask(&base, &mask);
|
||
|
}
|
||
|
|
||
|
return base;
|
||
|
}
|
||
|
}
|