ProgressBarTextureMod

This commit is contained in:
Perttu Ahola 2010-12-24 11:44:26 +02:00
parent 1611f00865
commit 705de63dcd
9 changed files with 107 additions and 37 deletions

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
*/ */

@ -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;