Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add an [opacity:<r> texture modifier. Makes the base image transparen…
…t according to the given ratio. r must be between 0 and 255. 0 means totally transparent. 255 means totally opaque. Useful for texture overlaying.
  • Loading branch information
Thomas--S authored and nerzhul committed Aug 12, 2016
1 parent c4e77b4 commit f21dae6
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
10 changes: 10 additions & 0 deletions doc/lua_api.txt
Expand Up @@ -292,6 +292,16 @@ Example:

default_sandstone.png^[resize:16x16

#### `[opacity:<r>`
Makes the base image transparent according to the given ratio.
r must be between 0 and 255.
0 means totally transparent.
255 means totally opaque.

Example:

default_sandstone.png^[opacity:127

#### `[brighten`
Brightens the texture.

Expand Down
30 changes: 30 additions & 0 deletions src/client/tile.cpp
Expand Up @@ -1735,6 +1735,36 @@ bool TextureSource::generateImagePart(std::string part_of_name,
baseimg->drop();
baseimg = image;
}
/*
[opacity:R
Makes the base image transparent according to the given ratio.
R must be between 0 and 255.
0 means totally transparent.
255 means totally opaque.
*/
else if (str_starts_with(part_of_name, "[opacity:")) {
if (baseimg == NULL) {
errorstream << "generateImagePart(): baseimg == NULL "
<< "for part_of_name=\"" << part_of_name
<< "\", cancelling." << std::endl;
return false;
}

Strfnd sf(part_of_name);
sf.next(":");

u32 ratio = mystoi(sf.next(""), 0, 255);

core::dimension2d<u32> dim = baseimg->getDimension();

for (u32 y = 0; y < dim.Height; y++)
for (u32 x = 0; x < dim.Width; x++)
{
video::SColor c = baseimg->getPixel(x,y);
c.setAlpha(floor((c.getAlpha() * ratio) / 255 + 0.5));
baseimg->setPixel(x,y,c);
}
}
else
{
errorstream << "generateImagePart(): Invalid "
Expand Down

2 comments on commit f21dae6

@est31
Copy link
Contributor

@est31 est31 commented on f21dae6 Aug 13, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nerzhul can you please make commit messages multiline when pushing them? single lines are very annoying. Otherwise thanks for the review + merge.

@nerzhul
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@est31 noted&

Please sign in to comment.