void SetSettings(const sEnvironmentSettings& s) { CmpPtr<ICmpWaterManager> cmpWaterManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY); ENSURE(cmpWaterManager); cmpWaterManager->SetWaterLevel(entity_pos_t::FromFloat(s.waterheight * (65536.f * HEIGHT_SCALE))); WaterManager* wm = g_Renderer.GetWaterManager(); wm->m_Waviness = s.waterwaviness; wm->m_Murkiness = s.watermurkiness; wm->m_WindAngle = s.windangle; if (wm->m_WaterType != *s.watertype) { wm->m_WaterType = *s.watertype; wm->ReloadWaterNormalTextures(); } #define COLOR(A, B) B = CColor(A->r/255.f, A->g/255.f, A->b/255.f, 1.f) COLOR(s.watercolor, wm->m_WaterColor); COLOR(s.watertint, wm->m_WaterTint); #undef COLOR g_LightEnv.SetRotation(s.sunrotation); g_LightEnv.SetElevation(s.sunelevation); CStrW posteffect = *s.posteffect; if (posteffect.length() == 0) posteffect = L"default"; g_Renderer.GetPostprocManager().SetPostEffect(posteffect); CStrW skySet = *s.skyset; if (skySet.length() == 0) skySet = L"default"; g_Renderer.GetSkyManager()->SetSkySet(skySet); g_LightEnv.m_FogFactor = s.fogfactor; g_LightEnv.m_FogMax = s.fogmax; g_LightEnv.m_Brightness = s.brightness; g_LightEnv.m_Contrast = s.contrast; g_LightEnv.m_Saturation = s.saturation; g_LightEnv.m_Bloom = s.bloom; #define COLOR(A, B) B = RGBColor(A->r/255.f, A->g/255.f, A->b/255.f) COLOR(s.suncolor, g_LightEnv.m_SunColor); g_LightEnv.m_SunColor *= s.sunoverbrightness; COLOR(s.terraincolor, g_LightEnv.m_TerrainAmbientColor); COLOR(s.unitcolor, g_LightEnv.m_UnitsAmbientColor); COLOR(s.fogcolor, g_LightEnv.m_FogColor); #undef COLOR cmpWaterManager->RecomputeWaterData(); }