mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Implement override.txt support for special tiles (#10140)
Add override targets for all special_tiles entries in node definitions, allowing texture packs to replace these textures. This makes overrides work properly with a variety of drawtypes. The targets are named special1 through special6, covering the the current length of the special_tiles array.
This commit is contained in:
parent
d22fd6fc34
commit
93ecc589bc
6 changed files with 84 additions and 16 deletions
|
@ -24,6 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include <algorithm>
|
||||
#include <fstream>
|
||||
|
||||
#define override_cast static_cast<override_t>
|
||||
|
||||
TextureOverrideSource::TextureOverrideSource(std::string filepath)
|
||||
{
|
||||
std::ifstream infile(filepath.c_str());
|
||||
|
@ -56,25 +58,37 @@ TextureOverrideSource::TextureOverrideSource(std::string filepath)
|
|||
std::vector<std::string> targets = str_split(splitted[1], ',');
|
||||
for (const std::string &target : targets) {
|
||||
if (target == "top")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::TOP);
|
||||
texture_override.target |= override_cast(OverrideTarget::TOP);
|
||||
else if (target == "bottom")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::BOTTOM);
|
||||
texture_override.target |= override_cast(OverrideTarget::BOTTOM);
|
||||
else if (target == "left")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::LEFT);
|
||||
texture_override.target |= override_cast(OverrideTarget::LEFT);
|
||||
else if (target == "right")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::RIGHT);
|
||||
texture_override.target |= override_cast(OverrideTarget::RIGHT);
|
||||
else if (target == "front")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::FRONT);
|
||||
texture_override.target |= override_cast(OverrideTarget::FRONT);
|
||||
else if (target == "back")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::BACK);
|
||||
texture_override.target |= override_cast(OverrideTarget::BACK);
|
||||
else if (target == "inventory")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::INVENTORY);
|
||||
texture_override.target |= override_cast(OverrideTarget::INVENTORY);
|
||||
else if (target == "wield")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::WIELD);
|
||||
texture_override.target |= override_cast(OverrideTarget::WIELD);
|
||||
else if (target == "special1")
|
||||
texture_override.target |= override_cast(OverrideTarget::SPECIAL_1);
|
||||
else if (target == "special2")
|
||||
texture_override.target |= override_cast(OverrideTarget::SPECIAL_2);
|
||||
else if (target == "special3")
|
||||
texture_override.target |= override_cast(OverrideTarget::SPECIAL_3);
|
||||
else if (target == "special4")
|
||||
texture_override.target |= override_cast(OverrideTarget::SPECIAL_4);
|
||||
else if (target == "special5")
|
||||
texture_override.target |= override_cast(OverrideTarget::SPECIAL_5);
|
||||
else if (target == "special6")
|
||||
texture_override.target |= override_cast(OverrideTarget::SPECIAL_6);
|
||||
else if (target == "sides")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::SIDES);
|
||||
texture_override.target |= override_cast(OverrideTarget::SIDES);
|
||||
else if (target == "all" || target == "*")
|
||||
texture_override.target |= static_cast<u8>(OverrideTarget::ALL_FACES);
|
||||
texture_override.target |= override_cast(OverrideTarget::ALL_FACES);
|
||||
else {
|
||||
// Report invalid target
|
||||
warningstream << filepath << ":" << line_index
|
||||
|
@ -85,7 +99,7 @@ TextureOverrideSource::TextureOverrideSource(std::string filepath)
|
|||
}
|
||||
|
||||
// If there are no valid targets, skip adding this override
|
||||
if (texture_override.target == static_cast<u8>(OverrideTarget::INVALID)) {
|
||||
if (texture_override.target == override_cast(OverrideTarget::INVALID)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -112,7 +126,7 @@ std::vector<TextureOverride> TextureOverrideSource::getNodeTileOverrides()
|
|||
std::vector<TextureOverride> found_overrides;
|
||||
|
||||
for (const TextureOverride &texture_override : m_overrides) {
|
||||
if (texture_override.hasTarget(OverrideTarget::ALL_FACES))
|
||||
if (texture_override.hasTarget(OverrideTarget::NODE_TARGETS))
|
||||
found_overrides.push_back(texture_override);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue