mirror of
https://github.com/luanti-org/luanti.git
synced 2025-10-12 16:15:20 +02:00
Reuse object_shader for "wielditem" and "item" entity drawtypes (#9537)
This commit is contained in:
@@ -542,7 +542,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
|
||||
m_wieldnode->setPosition(wield_position);
|
||||
m_wieldnode->setRotation(wield_rotation);
|
||||
|
||||
m_wieldnode->setColor(player->light_color);
|
||||
m_wieldnode->setNodeLightColor(player->light_color);
|
||||
|
||||
// Set render distance
|
||||
updateViewingRange();
|
||||
|
@@ -826,11 +826,12 @@ void GenericCAO::setNodeLight(u8 light)
|
||||
video::SColor color(255, light, light, light);
|
||||
|
||||
if (m_prop.visual == "wielditem" || m_prop.visual == "item") {
|
||||
// Since these types of visuals are using their own shader
|
||||
// they should be handled separately
|
||||
if (m_wield_meshnode)
|
||||
m_wield_meshnode->setColor(color);
|
||||
} else if (m_enable_shaders) {
|
||||
m_wield_meshnode->setNodeLightColor(color);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_enable_shaders) {
|
||||
scene::ISceneNode *node = getSceneNode();
|
||||
|
||||
if (node == nullptr)
|
||||
|
@@ -347,7 +347,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
|
||||
scene::SMesh *mesh = nullptr;
|
||||
|
||||
if (m_enable_shaders) {
|
||||
u32 shader_id = shdrsrc->getShader("wielded_shader", TILE_MATERIAL_BASIC, NDT_NORMAL);
|
||||
u32 shader_id = shdrsrc->getShader("object_shader", TILE_MATERIAL_BASIC, NDT_NORMAL);
|
||||
m_material_type = shdrsrc->getShaderInfo(shader_id).material;
|
||||
}
|
||||
|
||||
@@ -471,6 +471,21 @@ void WieldMeshSceneNode::setColor(video::SColor c)
|
||||
}
|
||||
}
|
||||
|
||||
void WieldMeshSceneNode::setNodeLightColor(video::SColor color)
|
||||
{
|
||||
if (!m_meshnode)
|
||||
return;
|
||||
|
||||
if (m_enable_shaders) {
|
||||
for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) {
|
||||
video::SMaterial &material = m_meshnode->getMaterial(i);
|
||||
material.EmissiveColor = color;
|
||||
}
|
||||
} else {
|
||||
setColor(color);
|
||||
}
|
||||
}
|
||||
|
||||
void WieldMeshSceneNode::render()
|
||||
{
|
||||
// note: if this method is changed to actually do something,
|
||||
|
@@ -87,6 +87,8 @@ public:
|
||||
// Must only be used if the constructor was called with lighting = false
|
||||
void setColor(video::SColor color);
|
||||
|
||||
void setNodeLightColor(video::SColor color);
|
||||
|
||||
scene::IMesh *getMesh() { return m_meshnode->getMesh(); }
|
||||
|
||||
virtual void render();
|
||||
|
Reference in New Issue
Block a user