Skip to content

Commit

Permalink
#5585: Expose material surface flags
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Apr 11, 2021
1 parent 2ded0a7 commit 8b0f7ae
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 1 deletion.
4 changes: 4 additions & 0 deletions install/scripts/materialtest.py
Expand Up @@ -39,19 +39,23 @@
print('Cull type: {0}'.format(newMaterial.getCullType()))
print('Clamp type: {0}'.format(newMaterial.getClampType()))
print('Flags: {0}'.format(newMaterial.getMaterialFlags()))
print('Surface Flags: {0}'.format(newMaterial.getSurfaceFlags()))

# There are a couple of pre-defined sort requests, corresponding to the engine code
newMaterial.setSortRequest(dr.Material.SortRequest.NEAREST)
newMaterial.setClampType(dr.Material.ClampType.NOREPEAT) # clamp
newMaterial.setCullType(dr.Material.CullType.NONE) # twosided
newMaterial.setPolygonOffset(0.3)
newMaterial.setMaterialFlag(dr.Material.Flag.NOSHADOWS)
newMaterial.setSurfaceFlag(dr.Material.SurfaceFlag.LADDER)
newMaterial.setSurfaceFlag(dr.Material.SurfaceFlag.NONSOLID)

print('Full Material definition:\n{0}\n{{{1}}}'.format(newMaterial.getName(), newMaterial.getDefinition()))

GlobalMaterialManager.saveMaterial(newMaterial.getName())

newMaterial.clearMaterialFlag(dr.Material.Flag.NOSHADOWS)
newMaterial.clearSurfaceFlag(dr.Material.SurfaceFlag.NONSOLID)

fullPath = GlobalFileSystem.findFile(filename) + filename
print(fullPath)
Expand Down
34 changes: 34 additions & 0 deletions plugins/script/interfaces/ShaderSystemInterface.cpp
Expand Up @@ -130,6 +130,37 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa
.value("ISLIGHTGEMSURF", Material::FLAG_ISLIGHTGEMSURF)
.export_values();

py::enum_<Material::SurfaceFlags>(material, "SurfaceFlag")
.value("SOLID", Material::SURF_SOLID)
.value("OPAQUE", Material::SURF_OPAQUE)
.value("WATER", Material::SURF_WATER)
.value("PLAYERCLIP", Material::SURF_PLAYERCLIP)
.value("MONSTERCLIP", Material::SURF_MONSTERCLIP)
.value("MOVEABLECLIP", Material::SURF_MOVEABLECLIP)
.value("IKCLIP", Material::SURF_IKCLIP)
.value("BLOOD", Material::SURF_BLOOD)
.value("TRIGGER", Material::SURF_TRIGGER)
.value("AASSOLID", Material::SURF_AASSOLID)
.value("AASOBSTACLE", Material::SURF_AASOBSTACLE)
.value("FLASHLIGHT_TRIGGER", Material::SURF_FLASHLIGHT_TRIGGER)
.value("NONSOLID", Material::SURF_NONSOLID)
.value("NULLNORMAL", Material::SURF_NULLNORMAL)
.value("AREAPORTAL", Material::SURF_AREAPORTAL)
.value("NOCARVE", Material::SURF_NOCARVE)
.value("DISCRETE", Material::SURF_DISCRETE)
.value("NOFRAGMENT", Material::SURF_NOFRAGMENT)
.value("SLICK", Material::SURF_SLICK)
.value("COLLISION", Material::SURF_COLLISION)
.value("NOIMPACT", Material::SURF_NOIMPACT)
.value("NODAMAGE", Material::SURF_NODAMAGE)
.value("LADDER", Material::SURF_LADDER)
.value("NOSTEPS", Material::SURF_NOSTEPS)
.value("GUISURF", Material::SURF_GUISURF)
.value("ENTITYGUI", Material::SURF_ENTITYGUI)
.value("ENTITYGUI2", Material::SURF_ENTITYGUI2)
.value("ENTITYGUI3", Material::SURF_ENTITYGUI3)
.export_values();

material.def(py::init<const MaterialPtr&>());
material.def("getName", &ScriptMaterial::getName);
material.def("getShaderFileName", &ScriptMaterial::getShaderFileName);
Expand Down Expand Up @@ -157,6 +188,9 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa
material.def("getMaterialFlags", &ScriptMaterial::getMaterialFlags);
material.def("setMaterialFlag", &ScriptMaterial::setMaterialFlag);
material.def("clearMaterialFlag", &ScriptMaterial::clearMaterialFlag);
material.def("getSurfaceFlags", &ScriptMaterial::getSurfaceFlags);
material.def("setSurfaceFlag", &ScriptMaterial::setSurfaceFlag);
material.def("clearSurfaceFlag", &ScriptMaterial::clearSurfaceFlag);

// Expose the MaterialVisitor interface

Expand Down
19 changes: 18 additions & 1 deletion plugins/script/interfaces/ShaderSystemInterface.h
Expand Up @@ -141,7 +141,7 @@ class ScriptMaterial
if (_material) _material->setCullType(type);
}

int getMaterialFlags() const
int getMaterialFlags()
{
return _material ? _material->getMaterialFlags() : 0;
}
Expand All @@ -158,6 +158,23 @@ class ScriptMaterial
if (_material) _material->clearMaterialFlag(flag);
}

int getSurfaceFlags()
{
return _material ? _material->getSurfaceFlags() : 0;
}

void setSurfaceFlag(Material::SurfaceFlags flag)
{
throwIfMaterialCannotBeModified();
if (_material) _material->setSurfaceFlag(flag);
}

void clearSurfaceFlag(Material::SurfaceFlags flag)
{
throwIfMaterialCannotBeModified();
if (_material) _material->clearSurfaceFlag(flag);
}

private:
void throwIfMaterialCannotBeModified()
{
Expand Down

0 comments on commit 8b0f7ae

Please sign in to comment.