Skip to content

Commit 09157b7

Browse files
committed
Added "set static switch parameter" for material instance
1 parent b44186f commit 09157b7

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
@@ -943,6 +943,7 @@ static PyMethodDef ue_PyUObject_methods[] = {
943943
// Material
944944
{ "set_material", (PyCFunction)py_ue_set_material, METH_VARARGS, "" },
945945
{ "set_material_scalar_parameter", (PyCFunction)py_ue_set_material_scalar_parameter, METH_VARARGS, "" },
946+
{ "set_material_static_switch_parameter", (PyCFunction)py_ue_set_material_static_switch_parameter, METH_VARARGS, "" },
946947
{ "set_material_vector_parameter", (PyCFunction)py_ue_set_material_vector_parameter, METH_VARARGS, "" },
947948
{ "set_material_texture_parameter", (PyCFunction)py_ue_set_material_texture_parameter, METH_VARARGS, "" },
948949
{ "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
@@ -48,6 +48,73 @@ PyObject *py_ue_set_material_scalar_parameter(ue_PyUObject *self, PyObject * arg
4848

4949
}
5050

51+
PyObject *py_ue_set_material_static_switch_parameter(ue_PyUObject *self, PyObject * args)
52+
{
53+
54+
ue_py_check(self);
55+
56+
char *switchName = nullptr;
57+
PyObject *py_bool = nullptr;
58+
if (!PyArg_ParseTuple(args, "sO:set_material_static_switch_parameter", &switchName, &py_bool))
59+
{
60+
return NULL;
61+
}
62+
63+
FName parameterName(UTF8_TO_TCHAR(switchName));
64+
65+
bool switchValue = false;
66+
if (PyObject_IsTrue(py_bool))
67+
{
68+
switchValue = true;
69+
}
70+
71+
bool valid = false;
72+
73+
#if WITH_EDITOR
74+
if (self->ue_object->IsA<UMaterialInstance>())
75+
{
76+
UMaterialInstance *material_instance = (UMaterialInstance *)self->ue_object;
77+
valid = true;
78+
FStaticParameterSet staticParameterSet = material_instance->GetStaticParameters();
79+
80+
bool isExisting = false;
81+
for (auto& parameter : staticParameterSet.StaticSwitchParameters)
82+
{
83+
if (parameter.bOverride && parameter.ParameterInfo.Name == parameterName)
84+
{
85+
parameter.Value = switchValue;
86+
isExisting = true;
87+
break;
88+
}
89+
}
90+
91+
if (!isExisting)
92+
{
93+
FStaticSwitchParameter SwitchParameter;
94+
SwitchParameter.ParameterInfo.Name = parameterName;
95+
SwitchParameter.Value = switchValue;
96+
97+
SwitchParameter.bOverride = true;
98+
staticParameterSet.StaticSwitchParameters.Add(SwitchParameter);
99+
}
100+
101+
102+
material_instance->UpdateStaticPermutation(staticParameterSet);
103+
104+
}
105+
106+
107+
#endif
108+
109+
if (!valid)
110+
{
111+
return PyErr_Format(PyExc_Exception, "uobject is not a MaterialInstance");
112+
}
113+
114+
Py_RETURN_NONE;
115+
116+
}
117+
51118
PyObject *py_ue_get_material_scalar_parameter(ue_PyUObject *self, PyObject * args)
52119
{
53120

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)