diff --git a/Editor/WeatherWindow.cpp b/Editor/WeatherWindow.cpp index 1118874f1..d6f90bd82 100644 --- a/Editor/WeatherWindow.cpp +++ b/Editor/WeatherWindow.cpp @@ -26,21 +26,11 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) float y = 20; float step = 32; - - newWeatherButton = new wiButton("New Weather"); - newWeatherButton->SetPos(XMFLOAT2(x, y += step)); - newWeatherButton->OnClick([&](wiEventArgs args) { - Entity entity = CreateEntity(); - wiRenderer::GetScene().weathers.Create(entity); - SetEntity(entity); - }); - weatherWindow->AddWidget(newWeatherButton); - fogStartSlider = new wiSlider(0, 5000, 0, 100000, "Fog Start: "); fogStartSlider->SetSize(XMFLOAT2(100, 30)); fogStartSlider->SetPos(XMFLOAT2(x, y += step)); fogStartSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->fogStart = args.fValue; + GetWeather().fogStart = args.fValue; }); weatherWindow->AddWidget(fogStartSlider); @@ -48,7 +38,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) fogEndSlider->SetSize(XMFLOAT2(100, 30)); fogEndSlider->SetPos(XMFLOAT2(x, y += step)); fogEndSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->fogEnd = args.fValue; + GetWeather().fogEnd = args.fValue; }); weatherWindow->AddWidget(fogEndSlider); @@ -56,7 +46,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) fogHeightSlider->SetSize(XMFLOAT2(100, 30)); fogHeightSlider->SetPos(XMFLOAT2(x, y += step)); fogHeightSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->fogHeight = args.fValue; + GetWeather().fogHeight = args.fValue; }); weatherWindow->AddWidget(fogHeightSlider); @@ -64,7 +54,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) cloudinessSlider->SetSize(XMFLOAT2(100, 30)); cloudinessSlider->SetPos(XMFLOAT2(x, y += step)); cloudinessSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->cloudiness = args.fValue; + GetWeather().cloudiness = args.fValue; }); weatherWindow->AddWidget(cloudinessSlider); @@ -72,7 +62,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) cloudScaleSlider->SetSize(XMFLOAT2(100, 30)); cloudScaleSlider->SetPos(XMFLOAT2(x, y += step)); cloudScaleSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->cloudScale = args.fValue; + GetWeather().cloudScale = args.fValue; }); weatherWindow->AddWidget(cloudScaleSlider); @@ -80,7 +70,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) cloudSpeedSlider->SetSize(XMFLOAT2(100, 30)); cloudSpeedSlider->SetPos(XMFLOAT2(x, y += step)); cloudSpeedSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->cloudSpeed = args.fValue; + GetWeather().cloudSpeed = args.fValue; }); weatherWindow->AddWidget(cloudSpeedSlider); @@ -88,7 +78,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) windSpeedSlider->SetSize(XMFLOAT2(100, 30)); windSpeedSlider->SetPos(XMFLOAT2(x, y += step)); windSpeedSlider->OnSlide([&](wiEventArgs args) { - if (GetWeather() != nullptr) GetWeather()->windDirection = XMFLOAT3(args.fValue, 0, 0); + GetWeather().windDirection = XMFLOAT3(args.fValue, 0, 0); }); weatherWindow->AddWidget(windSpeedSlider); @@ -148,17 +138,14 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) preset1Button->SetPos(XMFLOAT2(x - 100, y += step * 2)); preset1Button->OnClick([=](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->ambient = XMFLOAT3(0.1f, 0.1f, 0.1f); - weather->horizon = XMFLOAT3(0.3f, 0.3f, 0.4f); - weather->zenith = XMFLOAT3(0.05f, 0.05f, 0.5f); - weather->cloudiness = 0.4f; - weather->fogStart = 100; - weather->fogEnd = 1000; - weather->fogHeight = 0; - } + auto& weather = GetWeather(); + weather.ambient = XMFLOAT3(0.1f, 0.1f, 0.1f); + weather.horizon = XMFLOAT3(0.3f, 0.3f, 0.4f); + weather.zenith = XMFLOAT3(0.05f, 0.05f, 0.5f); + weather.cloudiness = 0.4f; + weather.fogStart = 100; + weather.fogEnd = 1000; + weather.fogHeight = 0; InvalidateProbes(); @@ -171,17 +158,14 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) preset2Button->SetPos(XMFLOAT2(x - 100, y += step)); preset2Button->OnClick([=](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->ambient = XMFLOAT3(0.02f, 0.02f, 0.02f); - weather->horizon = XMFLOAT3(0.2f, 0.05f, 0.15f); - weather->zenith = XMFLOAT3(0.4f, 0.05f, 0.1f); - weather->cloudiness = 0.36f; - weather->fogStart = 50; - weather->fogEnd = 600; - weather->fogHeight = 0; - } + auto& weather = GetWeather(); + weather.ambient = XMFLOAT3(0.02f, 0.02f, 0.02f); + weather.horizon = XMFLOAT3(0.2f, 0.05f, 0.15f); + weather.zenith = XMFLOAT3(0.4f, 0.05f, 0.1f); + weather.cloudiness = 0.36f; + weather.fogStart = 50; + weather.fogEnd = 600; + weather.fogHeight = 0; InvalidateProbes(); @@ -194,17 +178,14 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) preset3Button->SetPos(XMFLOAT2(x - 100, y += step)); preset3Button->OnClick([=](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->ambient = XMFLOAT3(0.1f, 0.1f, 0.1f); - weather->horizon = XMFLOAT3(0.38f, 0.38f, 0.38f); - weather->zenith = XMFLOAT3(0.42f, 0.42f, 0.42f); - weather->cloudiness = 0.75f; - weather->fogStart = 0; - weather->fogEnd = 500; - weather->fogHeight = 0; - } + auto& weather = GetWeather(); + weather.ambient = XMFLOAT3(0.1f, 0.1f, 0.1f); + weather.horizon = XMFLOAT3(0.38f, 0.38f, 0.38f); + weather.zenith = XMFLOAT3(0.42f, 0.42f, 0.42f); + weather.cloudiness = 0.75f; + weather.fogStart = 0; + weather.fogEnd = 500; + weather.fogHeight = 0; InvalidateProbes(); @@ -217,17 +198,14 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) preset4Button->SetPos(XMFLOAT2(x - 100, y += step)); preset4Button->OnClick([=](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->ambient = XMFLOAT3(0.01f, 0.01f, 0.02f); - weather->horizon = XMFLOAT3(0.02f, 0.05f, 0.1f); - weather->zenith = XMFLOAT3(0.01f, 0.02f, 0.04f); - weather->cloudiness = 0.28f; - weather->fogStart = 10; - weather->fogEnd = 400; - weather->fogHeight = 0; - } + auto& weather = GetWeather(); + weather.ambient = XMFLOAT3(0.01f, 0.01f, 0.02f); + weather.horizon = XMFLOAT3(0.02f, 0.05f, 0.1f); + weather.zenith = XMFLOAT3(0.01f, 0.02f, 0.04f); + weather.cloudiness = 0.28f; + weather.fogStart = 10; + weather.fogEnd = 400; + weather.fogHeight = 0; InvalidateProbes(); @@ -259,11 +237,8 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) ambientColorPicker->SetVisible(false); ambientColorPicker->SetEnabled(true); ambientColorPicker->OnColorChanged([&](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->ambient = XMFLOAT3(args.color.x, args.color.y, args.color.z); - } + auto& weather = GetWeather(); + weather.ambient = XMFLOAT3(args.color.x, args.color.y, args.color.z); }); weatherWindow->AddWidget(ambientColorPicker); @@ -274,11 +249,8 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) horizonColorPicker->SetVisible(false); horizonColorPicker->SetEnabled(true); horizonColorPicker->OnColorChanged([&](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->horizon = XMFLOAT3(args.color.x, args.color.y, args.color.z); - } + auto& weather = GetWeather(); + weather.horizon = XMFLOAT3(args.color.x, args.color.y, args.color.z); }); weatherWindow->AddWidget(horizonColorPicker); @@ -290,18 +262,12 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) zenithColorPicker->SetVisible(false); zenithColorPicker->SetEnabled(true); zenithColorPicker->OnColorChanged([&](wiEventArgs args) { - auto weather = GetWeather(); - if (weather != nullptr) - { - weather->zenith = XMFLOAT3(args.color.x, args.color.y, args.color.z); - } + auto& weather = GetWeather(); + weather.zenith = XMFLOAT3(args.color.x, args.color.y, args.color.z); }); weatherWindow->AddWidget(zenithColorPicker); - SetEntity(INVALID_ENTITY); - - weatherWindow->Translate(XMFLOAT3(30, 30, 0)); weatherWindow->SetVisible(false); } @@ -316,60 +282,25 @@ WeatherWindow::~WeatherWindow() void WeatherWindow::UpdateFromRenderer() { - WeatherComponent* weather = GetWeather(); + auto& weather = GetWeather(); - if (weather != nullptr) - { - fogStartSlider->SetValue(weather->fogStart); - fogEndSlider->SetValue(weather->fogEnd); - fogHeightSlider->SetValue(weather->fogHeight); - cloudinessSlider->SetValue(weather->cloudiness); - cloudScaleSlider->SetValue(weather->cloudScale); - cloudSpeedSlider->SetValue(weather->cloudSpeed); - windSpeedSlider->SetValue(weather->windDirection.x); - } + fogStartSlider->SetValue(weather.fogStart); + fogEndSlider->SetValue(weather.fogEnd); + fogHeightSlider->SetValue(weather.fogHeight); + cloudinessSlider->SetValue(weather.cloudiness); + cloudScaleSlider->SetValue(weather.cloudScale); + cloudSpeedSlider->SetValue(weather.cloudSpeed); + windSpeedSlider->SetValue(weather.windDirection.x); } -void WeatherWindow::SetEntity(Entity entity) -{ - this->entity = entity; - - WeatherComponent* weather = GetWeather(); - - if (weather != nullptr) - { - fogStartSlider->SetEnabled(true); - fogEndSlider->SetEnabled(true); - fogHeightSlider->SetEnabled(true); - cloudinessSlider->SetEnabled(true); - cloudScaleSlider->SetEnabled(true); - cloudSpeedSlider->SetEnabled(true); - windSpeedSlider->SetEnabled(true); - skyButton->SetEnabled(true); - ambientColorPicker->SetEnabled(true); - horizonColorPicker->SetEnabled(true); - zenithColorPicker->SetEnabled(true); - } - else - { - fogStartSlider->SetEnabled(false); - fogEndSlider->SetEnabled(false); - fogHeightSlider->SetEnabled(false); - cloudinessSlider->SetEnabled(false); - cloudScaleSlider->SetEnabled(false); - cloudSpeedSlider->SetEnabled(false); - windSpeedSlider->SetEnabled(false); - skyButton->SetEnabled(false); - ambientColorPicker->SetEnabled(false); - horizonColorPicker->SetEnabled(false); - zenithColorPicker->SetEnabled(false); - } -} - -WeatherComponent* WeatherWindow::GetWeather() const +WeatherComponent& WeatherWindow::GetWeather() const { Scene& scene = wiRenderer::GetScene(); - return scene.weathers.GetComponent(entity); + if (scene.weathers.GetCount() == 0) + { + scene.weathers.Create(CreateEntity()); + } + return scene.weathers[0]; } void WeatherWindow::InvalidateProbes() const diff --git a/Editor/WeatherWindow.h b/Editor/WeatherWindow.h index de6e701b5..d7df55219 100644 --- a/Editor/WeatherWindow.h +++ b/Editor/WeatherWindow.h @@ -14,19 +14,14 @@ public: WeatherWindow(wiGUI* gui); ~WeatherWindow(); - wiECS::Entity entity = wiECS::INVALID_ENTITY; - void UpdateFromRenderer(); - void SetEntity(wiECS::Entity entity); - - wiSceneSystem::WeatherComponent* GetWeather() const; + wiSceneSystem::WeatherComponent& GetWeather() const; void InvalidateProbes() const; wiGUI* GUI; wiWindow* weatherWindow; - wiButton* newWeatherButton; wiSlider* fogStartSlider; wiSlider* fogEndSlider; wiSlider* fogHeightSlider;