1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-02 16:38:41 +00:00

Framework for the attachment system, new object property which allows changing the color and alpha of mesh materials

New object property which allows changing the color and alpha of mesh materials. Due to the current lighting systems it doesn't work yet, but the full implementation is there

Framework for the attachment system, with no actual functionality yet

Send bone and player object to the setAttachment function in content_sao.cpp, but we need a way to translate it there and send it to the client

I will also want position and rotation offsets to be possible to apply to attachments

Network object ID from server to client. This will be used to identify the parent client-side and know what to attach to
This commit is contained in:
MirceaKitsune 2012-10-27 01:49:01 +03:00 committed by Perttu Ahola
parent 118285e6ba
commit e42eeec8f6
11 changed files with 181 additions and 4 deletions

View file

@ -555,6 +555,7 @@ private:
std::string m_name;
bool m_is_player;
bool m_is_local_player; // determined locally
int m_id;
// Property-ish things
ObjectProperties m_prop;
//
@ -596,6 +597,7 @@ public:
//
m_is_player(false),
m_is_local_player(false),
m_id(0),
//
m_smgr(NULL),
m_irr(NULL),
@ -640,6 +642,7 @@ public:
}
m_name = deSerializeString(is);
m_is_player = readU8(is);
m_id = readS16(is);
m_position = readV3F1000(is);
m_yaw = readF1000(is);
m_hp = readS16(is);
@ -930,6 +933,7 @@ public:
addToScene(m_smgr, m_gamedef->tsrc(), m_irr);
updateAnimations();
updateBonePosRot();
updateAttachment();
}
if(m_prop.physical){
@ -1062,6 +1066,10 @@ public:
texturestring += mod;
m_spritenode->setMaterialTexture(0,
tsrc->getTextureRaw(texturestring));
// Does not work yet with the current lighting settings
m_meshnode->getMaterial(0).AmbientColor = m_prop.colors[0];
m_meshnode->getMaterial(0).DiffuseColor = m_prop.colors[0];
}
}
if(m_animated_meshnode)
@ -1087,6 +1095,12 @@ public:
material.setFlag(video::EMF_LIGHTING, false);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
}
for (u32 i = 0; i < m_prop.colors.size(); ++i)
{
// Does not work yet with the current lighting settings
m_animated_meshnode->getMaterial(i).AmbientColor = m_prop.colors[i];
m_animated_meshnode->getMaterial(i).DiffuseColor = m_prop.colors[i];
}
}
}
if(m_meshnode)
@ -1113,6 +1127,10 @@ public:
material.setTexture(0, atlas);
material.getTextureMatrix(0).setTextureTranslate(pos.X, pos.Y);
material.getTextureMatrix(0).setTextureScale(size.X, size.Y);
// Does not work yet with the current lighting settings
m_meshnode->getMaterial(i).AmbientColor = m_prop.colors[i];
m_meshnode->getMaterial(i).DiffuseColor = m_prop.colors[i];
}
}
else if(m_prop.visual == "upright_sprite")
@ -1126,6 +1144,10 @@ public:
scene::IMeshBuffer *buf = mesh->getMeshBuffer(0);
buf->getMaterial().setTexture(0,
tsrc->getTextureRaw(tname));
// Does not work yet with the current lighting settings
m_meshnode->getMaterial(0).AmbientColor = m_prop.colors[0];
m_meshnode->getMaterial(0).DiffuseColor = m_prop.colors[0];
}
{
std::string tname = "unknown_object.png";
@ -1137,6 +1159,10 @@ public:
scene::IMeshBuffer *buf = mesh->getMeshBuffer(1);
buf->getMaterial().setTexture(0,
tsrc->getTextureRaw(tname));
// Does not work yet with the current lighting settings
m_meshnode->getMaterial(1).AmbientColor = m_prop.colors[1];
m_meshnode->getMaterial(1).DiffuseColor = m_prop.colors[1];
}
}
}
@ -1168,6 +1194,11 @@ public:
}
}
void updateAttachment()
{
// Code for attachments goes here
}
void processMessage(const std::string &data)
{
//infostream<<"GenericCAO: Got message"<<std::endl;
@ -1254,6 +1285,15 @@ public:
updateBonePosRot();
expireVisuals();
}
else if(cmd == GENERIC_CMD_SET_ATTACHMENT)
{
// Part of the attachment structure, not used yet!
// Get properties here.
updateAttachment();
expireVisuals();
}
else if(cmd == GENERIC_CMD_PUNCHED)
{
/*s16 damage =*/ readS16(is);