From 1dc733ca886d92e1e673b9ed434e570cb9c37014 Mon Sep 17 00:00:00 2001 From: QuantumCoderQC Date: Sun, 31 Oct 2021 20:58:27 +0100 Subject: [PATCH 1/3] dont cast decal objects to mesh objects --- Sources/armory/trait/internal/UniformsManager.hx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/armory/trait/internal/UniformsManager.hx b/Sources/armory/trait/internal/UniformsManager.hx index e559fc89..033c2c6a 100644 --- a/Sources/armory/trait/internal/UniformsManager.hx +++ b/Sources/armory/trait/internal/UniformsManager.hx @@ -1,5 +1,6 @@ package armory.trait.internal; +import iron.object.DecalObject; import iron.object.MeshObject; import iron.Trait; import kha.Image; @@ -39,6 +40,7 @@ class UniformsManager extends Trait{ } function init() { + if(object.raw.type != 'mesh_object') return; var materials = cast(object, MeshObject).materials; for (material in materials){ From ec1f25cfec46506e2262494940871d48afacc75e Mon Sep 17 00:00:00 2001 From: QuantumCoderQC Date: Sun, 31 Oct 2021 23:02:45 +0100 Subject: [PATCH 2/3] add support for decal object uniforms --- .../armory/trait/internal/UniformsManager.hx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Sources/armory/trait/internal/UniformsManager.hx b/Sources/armory/trait/internal/UniformsManager.hx index 033c2c6a..af56b0c3 100644 --- a/Sources/armory/trait/internal/UniformsManager.hx +++ b/Sources/armory/trait/internal/UniformsManager.hx @@ -40,16 +40,28 @@ class UniformsManager extends Trait{ } function init() { - if(object.raw.type != 'mesh_object') return; - var materials = cast(object, MeshObject).materials; + if(Std.isOfType(object, MeshObject)){ + var materials = cast(object, MeshObject).materials; - for (material in materials){ + for (material in materials){ + + var exists = registerShaderUniforms(material); + if(exists) { + uniformExists = true; + } + } + } + #if rp_decals + if(Std.isOfType(object, DecalObject)){ + var material = cast(object, DecalObject).material; var exists = registerShaderUniforms(material); if(exists) { uniformExists = true; } + } + #end } static function removeScene() { From e06ca4b9e726b3b1b450c9cb97b8136839e4eae7 Mon Sep 17 00:00:00 2001 From: QuantumCoderQC Date: Sun, 31 Oct 2021 23:03:25 +0100 Subject: [PATCH 3/3] get material from decal object too --- Sources/armory/logicnode/GetMaterialNode.hx | 25 +++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Sources/armory/logicnode/GetMaterialNode.hx b/Sources/armory/logicnode/GetMaterialNode.hx index 900608eb..45545691 100644 --- a/Sources/armory/logicnode/GetMaterialNode.hx +++ b/Sources/armory/logicnode/GetMaterialNode.hx @@ -1,6 +1,7 @@ package armory.logicnode; import iron.object.MeshObject; +import iron.object.DecalObject; class GetMaterialNode extends LogicNode { @@ -9,11 +10,27 @@ class GetMaterialNode extends LogicNode { } override function get(from: Int): Dynamic { - var object: MeshObject = inputs[0].get(); - var slot: Int = inputs[1].get(); - if (object == null) return null; + var object = inputs[0].get(); - return object.materials[slot]; + assert(Error, object != null, "The object input must not be null"); + + #if rp_decals + if (Std.isOfType(object, DecalObject)) { + var decal = cast(object, DecalObject); + return decal.material; + } + #end + + if (Std.isOfType(object, MeshObject)) { + var mesh = cast(object, MeshObject); + var slot: Int = inputs[1].get(); + + if (mesh == null) return null; + + return mesh.materials[slot]; + } + + return null; } }