aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Müller <34514239+appgurueu@users.noreply.github.com>2020-05-11 21:41:36 +0200
committerGitHub <noreply@github.com>2020-05-11 21:41:36 +0200
commit9ba24f89f5846de6a8f0d7e01c89acfee1254704 (patch)
tree868e0cee87d50271c4fe088d87aa2cb10a849f7f /src
parent6e1372bd894d955300c40d69e5c882e9cc7d7523 (diff)
downloadminetest-9ba24f89f5846de6a8f0d7e01c89acfee1254704.tar.gz
minetest-9ba24f89f5846de6a8f0d7e01c89acfee1254704.tar.bz2
minetest-9ba24f89f5846de6a8f0d7e01c89acfee1254704.zip
Damage texture modifier (#9833)
Adds a new object property "damage_texture_modifier"
Diffstat (limited to 'src')
-rw-r--r--src/client/content_cao.cpp14
-rw-r--r--src/object_properties.cpp5
-rw-r--r--src/object_properties.h1
-rw-r--r--src/script/common/c_content.cpp4
4 files changed, 15 insertions, 9 deletions
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index aadd33bb9..eb1dad22b 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -1532,7 +1532,7 @@ void GenericCAO::processMessage(const std::string &data)
} else if (cmd == AO_CMD_SET_TEXTURE_MOD) {
std::string mod = deSerializeString(is);
- // immediatly reset a engine issued texture modifier if a mod sends a different one
+ // immediately 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);
@@ -1646,13 +1646,11 @@ void GenericCAO::processMessage(const std::string &data)
m_smgr, m_env, m_position,
v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS);
m_env->addSimpleObject(simple);
- } else if (m_reset_textures_timer < 0) {
- // TODO: Execute defined fast response
- // Flashing shall suffice as there is no definition
+ } else if (m_reset_textures_timer < 0 && !m_prop.damage_texture_modifier.empty()) {
m_reset_textures_timer = 0.05;
if(damage >= 2)
m_reset_textures_timer += 0.05 * damage;
- updateTextures(m_current_texture_modifier + "^[brighten");
+ updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier);
}
}
@@ -1723,13 +1721,11 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem,
v2f(m_prop.visual_size.X, m_prop.visual_size.Y) * BS);
m_env->addSimpleObject(simple);
}
- // TODO: Execute defined fast response
- // Flashing shall suffice as there is no definition
- if (m_reset_textures_timer < 0) {
+ if (m_reset_textures_timer < 0 && !m_prop.damage_texture_modifier.empty()) {
m_reset_textures_timer = 0.05;
if (result.damage >= 2)
m_reset_textures_timer += 0.05 * result.damage;
- updateTextures(m_current_texture_modifier + "^[brighten");
+ updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier);
}
}
diff --git a/src/object_properties.cpp b/src/object_properties.cpp
index 4cf180b18..6ff344dce 100644
--- a/src/object_properties.cpp
+++ b/src/object_properties.cpp
@@ -68,6 +68,7 @@ std::string ObjectProperties::dump()
os << ", eye_height=" << eye_height;
os << ", zoom_fov=" << zoom_fov;
os << ", use_texture_alpha=" << use_texture_alpha;
+ os << ", damage_texture_modifier=" << damage_texture_modifier;
return os.str();
}
@@ -114,6 +115,7 @@ void ObjectProperties::serialize(std::ostream &os) const
writeF32(os, eye_height);
writeF32(os, zoom_fov);
writeU8(os, use_texture_alpha);
+ os << serializeString(damage_texture_modifier);
// Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this
@@ -166,4 +168,7 @@ void ObjectProperties::deSerialize(std::istream &is)
eye_height = readF32(is);
zoom_fov = readF32(is);
use_texture_alpha = readU8(is);
+ try {
+ damage_texture_modifier = deSerializeString(is);
+ } catch (SerializationError &e) {}
}
diff --git a/src/object_properties.h b/src/object_properties.h
index 3895f3379..f7848f5a2 100644
--- a/src/object_properties.h
+++ b/src/object_properties.h
@@ -39,6 +39,7 @@ struct ObjectProperties
std::string mesh = "";
v3f visual_size = v3f(1, 1, 1);
std::vector<std::string> textures;
+ std::string damage_texture_modifier = "^[brighten";
std::vector<video::SColor> colors;
v2s16 spritediv = v2s16(1, 1);
v2s16 initial_sprite_basepos;
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 540b7222f..de9634c42 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -327,6 +327,8 @@ void read_object_properties(lua_State *L, int index,
getfloatfield(L, -1, "zoom_fov", prop->zoom_fov);
getboolfield(L, -1, "use_texture_alpha", prop->use_texture_alpha);
+
+ getstringfield(L, -1, "damage_texture_modifier", prop->damage_texture_modifier);
}
/******************************************************************************/
@@ -409,6 +411,8 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
lua_setfield(L, -2, "zoom_fov");
lua_pushboolean(L, prop->use_texture_alpha);
lua_setfield(L, -2, "use_texture_alpha");
+ lua_pushlstring(L, prop->damage_texture_modifier.c_str(), prop->damage_texture_modifier.size());
+ lua_setfield(L, -2, "damage_texture_modifier");
}
/******************************************************************************/