Skip to content

Commit 45e3574

Browse files
author
Roberto De Ioris
authored
Merge pull request 20tab#365 from jiamingfeng/master
Added "set static switch parameter" for material instance
2 parents ac46648 + 09157b7 commit 45e3574

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

Source/UnrealEnginePython/Private/UEPyModule.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,6 +1075,7 @@ static PyMethodDef ue_PyUObject_methods[] = {
10751075
{ "set_material", (PyCFunction)py_ue_set_material, METH_VARARGS, "" },
10761076
{ "set_material_by_name", (PyCFunction)py_ue_set_material_by_name, METH_VARARGS, "" },
10771077
{ "set_material_scalar_parameter", (PyCFunction)py_ue_set_material_scalar_parameter, METH_VARARGS, "" },
1078+
{ "set_material_static_switch_parameter", (PyCFunction)py_ue_set_material_static_switch_parameter, METH_VARARGS, "" },
10781079
{ "set_material_vector_parameter", (PyCFunction)py_ue_set_material_vector_parameter, METH_VARARGS, "" },
10791080
{ "set_material_texture_parameter", (PyCFunction)py_ue_set_material_texture_parameter, METH_VARARGS, "" },
10801081
{ "get_material_scalar_parameter", (PyCFunction)py_ue_get_material_scalar_parameter, METH_VARARGS, "" },

Source/UnrealEnginePython/Private/UObject/UEPyMaterial.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,73 @@ PyObject *py_ue_set_material_scalar_parameter(ue_PyUObject *self, PyObject * arg
116116

117117
}
118118

119+
PyObject *py_ue_set_material_static_switch_parameter(ue_PyUObject *self, PyObject * args)
120+
{
121+
122+
ue_py_check(self);
123+
124+
char *switchName = nullptr;
125+
PyObject *py_bool = nullptr;
126+
if (!PyArg_ParseTuple(args, "sO:set_material_static_switch_parameter", &switchName, &py_bool))
127+
{
128+
return NULL;
129+
}
130+
131+
FName parameterName(UTF8_TO_TCHAR(switchName));
132+
133+
bool switchValue = false;
134+
if (PyObject_IsTrue(py_bool))
135+
{
136+
switchValue = true;
137+
}
138+
139+
bool valid = false;
140+
141+
#if WITH_EDITOR
142+
if (self->ue_object->IsA<UMaterialInstance>())
143+
{
144+
UMaterialInstance *material_instance = (UMaterialInstance *)self->ue_object;
145+
valid = true;
146+
FStaticParameterSet staticParameterSet = material_instance->GetStaticParameters();
147+
148+
bool isExisting = false;
149+
for (auto& parameter : staticParameterSet.StaticSwitchParameters)
150+
{
151+
if (parameter.bOverride && parameter.ParameterInfo.Name == parameterName)
152+
{
153+
parameter.Value = switchValue;
154+
isExisting = true;
155+
break;
156+
}
157+
}
158+
159+
if (!isExisting)
160+
{
161+
FStaticSwitchParameter SwitchParameter;
162+
SwitchParameter.ParameterInfo.Name = parameterName;
163+
SwitchParameter.Value = switchValue;
164+
165+
SwitchParameter.bOverride = true;
166+
staticParameterSet.StaticSwitchParameters.Add(SwitchParameter);
167+
}
168+
169+
170+
material_instance->UpdateStaticPermutation(staticParameterSet);
171+
172+
}
173+
174+
175+
#endif
176+
177+
if (!valid)
178+
{
179+
return PyErr_Format(PyExc_Exception, "uobject is not a MaterialInstance");
180+
}
181+
182+
Py_RETURN_NONE;
183+
184+
}
185+
119186
PyObject *py_ue_get_material_scalar_parameter(ue_PyUObject *self, PyObject * args)
120187
{
121188

Source/UnrealEnginePython/Private/UObject/UEPyMaterial.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66

77
PyObject *py_ue_set_material_scalar_parameter(ue_PyUObject *, PyObject *);
8+
PyObject *py_ue_set_material_static_switch_parameter(ue_PyUObject *, PyObject *);
89
PyObject *py_ue_set_material_vector_parameter(ue_PyUObject *, PyObject *);
910
PyObject *py_ue_set_material_texture_parameter(ue_PyUObject *, PyObject *);
1011

0 commit comments

Comments
 (0)