1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Add minimap feature

This commit is contained in:
RealBadAngel 2015-06-22 04:34:56 +02:00 committed by est31
parent 3376d2e114
commit ffd16e3fec
23 changed files with 883 additions and 30 deletions

View file

@ -382,6 +382,8 @@ public:
video::IImage* generateImage(const std::string &name);
video::ITexture* getNormalTexture(const std::string &name);
video::SColor getTextureAverageColor(const std::string &name);
private:
// The id of the thread that is allowed to use irrlicht directly
@ -2008,3 +2010,41 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name)
}
return NULL;
}
video::SColor TextureSource::getTextureAverageColor(const std::string &name)
{
video::IVideoDriver *driver = m_device->getVideoDriver();
video::SColor c(0, 0, 0, 0);
u32 id;
video::ITexture *texture = getTexture(name, &id);
video::IImage *image = driver->createImage(texture,
core::position2d<s32>(0, 0),
texture->getOriginalSize());
u32 total = 0;
u32 tR = 0;
u32 tG = 0;
u32 tB = 0;
core::dimension2d<u32> dim = image->getDimension();
u16 step = 1;
if (dim.Width > 16)
step = dim.Width / 16;
for (u16 x = 0; x < dim.Width; x += step) {
for (u16 y = 0; y < dim.Width; y += step) {
c = image->getPixel(x,y);
if (c.getAlpha() > 0) {
total++;
tR += c.getRed();
tG += c.getGreen();
tB += c.getBlue();
}
}
}
image->drop();
if (total > 0) {
c.setRed(tR / total);
c.setGreen(tG / total);
c.setBlue(tB / total);
}
c.setAlpha(255);
return c;
}