mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
ProgressBarTextureMod
This commit is contained in:
parent
1611f00865
commit
705de63dcd
Binary file not shown.
Before Width: | Height: | Size: 992 B After Width: | Height: | Size: 990 B |
Binary file not shown.
Before Width: | Height: | Size: 1014 B After Width: | Height: | Size: 989 B |
@ -226,17 +226,39 @@ public:
|
|||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
video::ITexture * getImage()
|
video::ITexture * getImage()
|
||||||
{
|
{
|
||||||
|
std::string basename;
|
||||||
if(m_toolname == "WPick")
|
if(m_toolname == "WPick")
|
||||||
return g_irrlicht->getTexture("../data/tool_wpick.png");
|
basename = "../data/tool_wpick.png";
|
||||||
if(m_toolname == "STPick")
|
else if(m_toolname == "STPick")
|
||||||
return g_irrlicht->getTexture("../data/tool_stpick.png");
|
basename = "../data/tool_stpick.png";
|
||||||
// Default to cloud texture
|
// Default to cloud texture
|
||||||
return g_irrlicht->getTexture(tile_texture_path_get(TILE_CLOUD));
|
else
|
||||||
|
basename = tile_texture_path_get(TILE_CLOUD);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Calculate some progress value with sane amount of
|
||||||
|
maximum states
|
||||||
|
*/
|
||||||
|
u32 maxprogress = 30;
|
||||||
|
u32 toolprogress = (65535-m_wear)/(65535/maxprogress);
|
||||||
|
|
||||||
|
// Make texture name for the new texture with a progress bar
|
||||||
|
std::ostringstream os;
|
||||||
|
os<<basename<<"-toolprogress-"<<toolprogress;
|
||||||
|
std::string finalname = os.str();
|
||||||
|
|
||||||
|
float value_f = (float)toolprogress / (float)maxprogress;
|
||||||
|
|
||||||
|
// Get such a texture
|
||||||
|
TextureMod *mod = new ProgressBarTextureMod(value_f);
|
||||||
|
return g_irrlicht->getTexture(TextureSpec(finalname, basename, mod));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
std::string getText()
|
std::string getText()
|
||||||
{
|
{
|
||||||
std::ostringstream os;
|
return "";
|
||||||
|
|
||||||
|
/*std::ostringstream os;
|
||||||
u16 f = 4;
|
u16 f = 4;
|
||||||
u16 d = 65535/f;
|
u16 d = 65535/f;
|
||||||
u16 i;
|
u16 i;
|
||||||
@ -244,7 +266,7 @@ public:
|
|||||||
os<<'X';
|
os<<'X';
|
||||||
for(; i<f; i++)
|
for(; i<f; i++)
|
||||||
os<<'-';
|
os<<'-';
|
||||||
return os.str();
|
return os.str();*/
|
||||||
|
|
||||||
/*std::ostringstream os;
|
/*std::ostringstream os;
|
||||||
os<<m_toolname;
|
os<<m_toolname;
|
||||||
|
@ -146,39 +146,45 @@ video::ITexture * CrackTextureMod::make(video::ITexture *original,
|
|||||||
return newtexture;
|
return newtexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
video::ITexture * ProgressBarTextureMod::make(video::ITexture *original,
|
||||||
video::ITexture * createAlphaBlitTexture(const char *name, video::ITexture *base,
|
const char *newname, video::IVideoDriver* driver)
|
||||||
video::ITexture *other, v2u32 size, v2s32 pos_base, v2s32 pos_other)
|
|
||||||
{
|
{
|
||||||
if(g_device == NULL)
|
core::position2d<s32> pos_base(0, 0);
|
||||||
return NULL;
|
core::dimension2d<u32> dim = original->getOriginalSize();
|
||||||
video::IVideoDriver* driver = g_device->getVideoDriver();
|
|
||||||
|
|
||||||
core::dimension2d<u32> dim(size.X, size.Y);
|
video::IImage *baseimage = driver->createImage(original, pos_base, dim);
|
||||||
|
|
||||||
video::IImage *baseimage = driver->createImage(
|
|
||||||
base,
|
|
||||||
core::position2d<s32>(pos_base.X, pos_base.Y),
|
|
||||||
dim);
|
|
||||||
assert(baseimage);
|
assert(baseimage);
|
||||||
|
|
||||||
video::IImage *otherimage = driver->createImage(
|
core::dimension2d<u32> size = baseimage->getDimension();
|
||||||
other,
|
|
||||||
core::position2d<s32>(pos_other.X, pos_other.Y),
|
|
||||||
dim);
|
|
||||||
assert(sourceimage);
|
|
||||||
|
|
||||||
otherimage->copyToWithAlpha(baseimage, v2s32(0,0),
|
u32 barheight = 1;
|
||||||
core::rect<s32>(v2s32(0,0), dim),
|
u32 barpad_x = 1;
|
||||||
video::SColor(255,255,255,255),
|
u32 barpad_y = 1;
|
||||||
core::rect<s32>(v2s32(0,0), dim));
|
u32 barwidth = size.Width - barpad_x*2;
|
||||||
otherimage->drop();
|
v2u32 barpos(barpad_x, size.Height - barheight - barpad_y);
|
||||||
|
|
||||||
video::ITexture *newtexture = driver->addTexture(name, baseimage);
|
u32 barvalue_i = round((float)barwidth * value);
|
||||||
|
|
||||||
|
video::SColor active(255,255,0,0);
|
||||||
|
video::SColor inactive(255,0,0,0);
|
||||||
|
for(u32 x0=0; x0<barwidth; x0++)
|
||||||
|
{
|
||||||
|
video::SColor *c;
|
||||||
|
if(x0 < barvalue_i)
|
||||||
|
c = &active;
|
||||||
|
else
|
||||||
|
c = &inactive;
|
||||||
|
u32 x = x0 + barpos.X;
|
||||||
|
for(u32 y=barpos.Y; y<barpos.Y+barheight; y++)
|
||||||
|
{
|
||||||
|
baseimage->setPixel(x,y, *c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
video::ITexture *newtexture = driver->addTexture(newname, baseimage);
|
||||||
|
|
||||||
baseimage->drop();
|
baseimage->drop();
|
||||||
|
|
||||||
return newtexture;
|
return newtexture;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -97,6 +97,20 @@ struct CrackTextureMod: public TextureMod
|
|||||||
u16 progression;
|
u16 progression;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ProgressBarTextureMod: public TextureMod
|
||||||
|
{
|
||||||
|
// value is from 0.0 to 1.0
|
||||||
|
ProgressBarTextureMod(float a_value)
|
||||||
|
{
|
||||||
|
value = a_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual video::ITexture * make(video::ITexture *original,
|
||||||
|
const char *newname, video::IVideoDriver* driver);
|
||||||
|
|
||||||
|
float value;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A class for specifying a requested texture
|
A class for specifying a requested texture
|
||||||
*/
|
*/
|
||||||
|
28
src/main.cpp
28
src/main.cpp
@ -177,7 +177,8 @@ TODO: Check if the usage of Client::isFetchingBlocks() in
|
|||||||
Doing now:
|
Doing now:
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
TODO: Tool capability table
|
TODO: Tool capability table: Which materials, at what speed, how much
|
||||||
|
wearing
|
||||||
TODO: Transferring of the table from server to client
|
TODO: Transferring of the table from server to client
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -2122,9 +2123,21 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(n.d == CONTENT_TORCH)
|
||||||
|
{
|
||||||
|
dig_time_complete = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dig_time_complete >= 0.001)
|
||||||
|
{
|
||||||
dig_index = (u16)((float)CRACK_ANIMATION_LENGTH
|
dig_index = (u16)((float)CRACK_ANIMATION_LENGTH
|
||||||
* dig_time/dig_time_complete);
|
* dig_time/dig_time_complete);
|
||||||
|
}
|
||||||
|
// This is for torches
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dig_index = CRACK_ANIMATION_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
if(dig_index < CRACK_ANIMATION_LENGTH)
|
if(dig_index < CRACK_ANIMATION_LENGTH)
|
||||||
{
|
{
|
||||||
@ -2142,6 +2155,19 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
nodig_delay_counter = dig_time_complete
|
nodig_delay_counter = dig_time_complete
|
||||||
/ (float)CRACK_ANIMATION_LENGTH;
|
/ (float)CRACK_ANIMATION_LENGTH;
|
||||||
|
|
||||||
|
// We don't want a corresponding delay to
|
||||||
|
// very time consuming nodes
|
||||||
|
if(nodig_delay_counter > 0.5)
|
||||||
|
{
|
||||||
|
nodig_delay_counter = 0.5;
|
||||||
|
}
|
||||||
|
// We want a slight delay to very little
|
||||||
|
// time consuming nodes
|
||||||
|
if(nodig_delay_counter < 0.15)
|
||||||
|
{
|
||||||
|
nodig_delay_counter = 0.15;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dig_time += dtime;
|
dig_time += dtime;
|
||||||
|
@ -1991,7 +1991,9 @@ MapBlock * ServerMap::emergeBlock(
|
|||||||
coal_rareness = 1;
|
coal_rareness = 1;
|
||||||
if(rand()%coal_rareness == 0)
|
if(rand()%coal_rareness == 0)
|
||||||
{
|
{
|
||||||
for(s16 i=0; i<coal_amount; i++)
|
u16 a = rand() % 16;
|
||||||
|
u16 amount = coal_amount * a*a*a / 1000;
|
||||||
|
for(s16 i=0; i<amount; i++)
|
||||||
{
|
{
|
||||||
v3s16 cp(
|
v3s16 cp(
|
||||||
(rand()%(MAP_BLOCKSIZE-2))+1,
|
(rand()%(MAP_BLOCKSIZE-2))+1,
|
||||||
|
@ -809,7 +809,7 @@ public:
|
|||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
virtual void clientStep(float dtime)
|
virtual void clientStep(float dtime)
|
||||||
{
|
{
|
||||||
m_yaw += dtime * 90;
|
m_yaw += dtime * 60;
|
||||||
if(m_yaw >= 360.)
|
if(m_yaw >= 360.)
|
||||||
m_yaw -= 360.;
|
m_yaw -= 360.;
|
||||||
|
|
||||||
|
@ -1785,7 +1785,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||||||
/*
|
/*
|
||||||
3: Digging completed
|
3: Digging completed
|
||||||
*/
|
*/
|
||||||
if(action == 3)
|
else if(action == 3)
|
||||||
{
|
{
|
||||||
// Mandatory parameter; actually used for nothing
|
// Mandatory parameter; actually used for nothing
|
||||||
core::map<v3s16, MapBlock*> modified_blocks;
|
core::map<v3s16, MapBlock*> modified_blocks;
|
||||||
|
Loading…
Reference in New Issue
Block a user