From 8b0f7aed97149643da8b8ad12f270c6f02c63c91 Mon Sep 17 00:00:00 2001 From: codereader Date: Sun, 11 Apr 2021 11:07:51 +0200 Subject: [PATCH] #5585: Expose material surface flags --- install/scripts/materialtest.py | 4 +++ .../interfaces/ShaderSystemInterface.cpp | 34 +++++++++++++++++++ .../script/interfaces/ShaderSystemInterface.h | 19 ++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/install/scripts/materialtest.py b/install/scripts/materialtest.py index 7acd57abd9..a361abd980 100644 --- a/install/scripts/materialtest.py +++ b/install/scripts/materialtest.py @@ -39,6 +39,7 @@ 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) @@ -46,12 +47,15 @@ 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) diff --git a/plugins/script/interfaces/ShaderSystemInterface.cpp b/plugins/script/interfaces/ShaderSystemInterface.cpp index 433866ede2..37354c9133 100644 --- a/plugins/script/interfaces/ShaderSystemInterface.cpp +++ b/plugins/script/interfaces/ShaderSystemInterface.cpp @@ -130,6 +130,37 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa .value("ISLIGHTGEMSURF", Material::FLAG_ISLIGHTGEMSURF) .export_values(); + py::enum_(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()); material.def("getName", &ScriptMaterial::getName); material.def("getShaderFileName", &ScriptMaterial::getShaderFileName); @@ -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 diff --git a/plugins/script/interfaces/ShaderSystemInterface.h b/plugins/script/interfaces/ShaderSystemInterface.h index 1978375b9a..c1c087da23 100644 --- a/plugins/script/interfaces/ShaderSystemInterface.h +++ b/plugins/script/interfaces/ShaderSystemInterface.h @@ -141,7 +141,7 @@ class ScriptMaterial if (_material) _material->setCullType(type); } - int getMaterialFlags() const + int getMaterialFlags() { return _material ? _material->getMaterialFlags() : 0; } @@ -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() {