1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-06 17:41:04 +00:00

Add Entity get_texture_mod() to Lua API

Send texture modifier to clients connecting later too
This commit is contained in:
sapier 2017-01-14 19:32:10 +01:00
parent 72535d3328
commit c57b4ff9b5
7 changed files with 53 additions and 8 deletions

View file

@ -574,6 +574,8 @@ GenericCAO::GenericCAO(Client *client, ClientEnvironment *env):
m_anim_framelength(0.2),
m_anim_timer(0),
m_reset_textures_timer(-1),
m_previous_texture_modifier(""),
m_current_texture_modifier(""),
m_visuals_expired(false),
m_step_distance_counter(0),
m_last_light(255),
@ -952,7 +954,10 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr,
infostream<<"GenericCAO::addToScene(): \""<<m_prop.visual
<<"\" not supported"<<std::endl;
}
updateTextures("");
/* don't update while punch texture modifier is active */
if (m_reset_textures_timer < 0)
updateTextures(m_current_texture_modifier);
scene::ISceneNode *node = getSceneNode();
if (node && m_prop.nametag != "" && !m_is_local_player) {
@ -1221,9 +1226,9 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
if(m_reset_textures_timer >= 0)
{
m_reset_textures_timer -= dtime;
if(m_reset_textures_timer <= 0){
if(m_reset_textures_timer <= 0) {
m_reset_textures_timer = -1;
updateTextures("");
updateTextures(m_previous_texture_modifier);
}
}
if(getParent() == NULL && fabs(m_prop.automatic_rotate) > 0.001)
@ -1301,7 +1306,7 @@ void GenericCAO::updateTexturePos()
}
}
void GenericCAO::updateTextures(const std::string &mod)
void GenericCAO::updateTextures(const std::string mod)
{
ITextureSource *tsrc = m_client->tsrc();
@ -1309,6 +1314,9 @@ void GenericCAO::updateTextures(const std::string &mod)
bool use_bilinear_filter = g_settings->getBool("bilinear_filter");
bool use_anisotropic_filter = g_settings->getBool("anisotropic_filter");
m_previous_texture_modifier = m_current_texture_modifier;
m_current_texture_modifier = mod;
if(m_spritenode)
{
if(m_prop.visual == "sprite")
@ -1611,6 +1619,12 @@ void GenericCAO::processMessage(const std::string &data)
updateNodePos();
} else if (cmd == GENERIC_CMD_SET_TEXTURE_MOD) {
std::string mod = deSerializeString(is);
// immediatly reset a engine issued texture modifier if a mod sends a different one
if (m_reset_textures_timer > 0) {
m_reset_textures_timer = -1;
updateTextures(m_previous_texture_modifier);
}
updateTextures(mod);
} else if (cmd == GENERIC_CMD_SET_SPRITE) {
v2s16 p = readV2S16(is);
@ -1734,7 +1748,7 @@ void GenericCAO::processMessage(const std::string &data)
m_reset_textures_timer = 0.05;
if(damage >= 2)
m_reset_textures_timer += 0.05 * damage;
updateTextures("^[brighten");
updateTextures(m_current_texture_modifier + "^[brighten");
}
}
} else if (cmd == GENERIC_CMD_UPDATE_ARMOR_GROUPS) {
@ -1802,7 +1816,7 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem,
m_reset_textures_timer = 0.05;
if(result.damage >= 2)
m_reset_textures_timer += 0.05 * result.damage;
updateTextures("^[brighten");
updateTextures(m_current_texture_modifier + "^[brighten");
}
return false;