Skip to content

Commit

Permalink
#5568: Use MapExpressionEntry and -Binding for MaterialStageImageMap,…
Browse files Browse the repository at this point in the history
… add expression entry for light fall off image
  • Loading branch information
codereader committed Mar 24, 2021
1 parent d97287f commit 907fb02
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
5 changes: 5 additions & 0 deletions radiant/ui/materials/MapExpressionEntry.h
Expand Up @@ -39,6 +39,11 @@ class MapExpressionEntry :
GetSizer()->Add(_browseButton, 0, wxALIGN_CENTER_VERTICAL, 0);
}

wxTextCtrl* GetTextCtrl()
{
return _textEntry;
}

wxString GetValue()
{
return _textEntry->GetValue();
Expand Down
34 changes: 19 additions & 15 deletions radiant/ui/materials/MaterialEditor.cpp
Expand Up @@ -250,6 +250,7 @@ void MaterialEditor::setupMaterialProperties()

// Place map expression controls where needed
convertTextCtrlToMapExpressionEntry("MaterialStageImageMap");
convertTextCtrlToMapExpressionEntry("MaterialLightFalloffMap");

auto* typeDropdown = getControl<wxChoice>("MaterialType");

Expand Down Expand Up @@ -327,7 +328,8 @@ void MaterialEditor::setupMaterialProperties()
_material->setLightFalloffCubeMapType(shaders::getMapTypeForString(lightFallOffCubeMapType->GetStringSelection().ToStdString()));
});

_materialBindings.emplace(std::make_shared<ExpressionBinding<MaterialPtr>>(getControl<wxTextCtrl>("MaterialLightFalloffMap"),
auto lightFalloffMap = getControl<MapExpressionEntry>("MaterialLightFalloffMap");
_materialBindings.emplace(std::make_shared<ExpressionBinding<MaterialPtr>>(lightFalloffMap->GetTextCtrl(),
[](const MaterialPtr& material)
{
auto expr = material->getLightFalloffExpression();
Expand Down Expand Up @@ -704,6 +706,21 @@ void MaterialEditor::createSpinCtrlDoubleBinding(const std::string& ctrlName,

void MaterialEditor::setupMaterialStageProperties()
{
auto stageImageMap = getControl<MapExpressionEntry>("MaterialStageImageMap");
_stageBindings.emplace(std::make_shared<ExpressionBinding<IShaderLayer::Ptr>>(stageImageMap->GetTextCtrl(),
[](const IShaderLayer::Ptr& stage)
{
auto expr = stage->getMapExpression();
return expr ? expr->getExpressionString() : std::string();
},
[this](const IEditableShaderLayer::Ptr& stage, const std::string& value)
{
if (_stageUpdateInProgress) return;
stage->setMapExpressionFromString(value);
},
[this]() { onMaterialChanged(); },
std::bind(&MaterialEditor::getEditableStageForSelection, this)));

setupStageFlag("MaterialStageFlagMaskRed", IShaderLayer::FLAG_MASK_RED);
setupStageFlag("MaterialStageFlagMaskGreen", IShaderLayer::FLAG_MASK_GREEN);
setupStageFlag("MaterialStageFlagMaskBlue", IShaderLayer::FLAG_MASK_BLUE);
Expand Down Expand Up @@ -1600,20 +1617,8 @@ void MaterialEditor::updateStageControls()
if (selectedStage)
{
selectedStage->evaluateExpressions(0); // initialise the values of this stage

auto mapExpr = selectedStage->getMapExpression();

auto imageMap = getControl<MapExpressionEntry>("MaterialStageImageMap");
imageMap->SetValue(mapExpr ? mapExpr->getExpressionString() : "");

imageMap->Bind(wxEVT_TEXT, [imageMap, this](wxCommandEvent&)
{
if (_stageUpdateInProgress) return;

auto stage = getEditableStageForSelection();
stage->setMapExpressionFromString(imageMap->GetValue().ToStdString());
onMaterialChanged();
});

auto videoMapLoop = getControl<wxCheckBox>("MaterialStageVideoMapLoop");
auto soundMapWave = getControl<wxCheckBox>("MaterialStageSoundMapWaveform");

Expand Down Expand Up @@ -1680,7 +1685,6 @@ void MaterialEditor::updateStageControls()
else
{
getControl<wxRadioButton>("MaterialStageNoVertexColourFlag")->SetValue(true);
getControl<MapExpressionEntry>("MaterialStageImageMap")->SetValue("");
}
}

Expand Down

0 comments on commit 907fb02

Please sign in to comment.