diff options
-rw-r--r-- | data/tool_stpick.png | bin | 992 -> 990 bytes | |||
-rw-r--r-- | data/tool_wpick.png | bin | 1014 -> 989 bytes | |||
-rw-r--r-- | src/inventory.h | 34 | ||||
-rw-r--r-- | src/irrlichtwrapper.cpp | 56 | ||||
-rw-r--r-- | src/irrlichtwrapper.h | 14 | ||||
-rw-r--r-- | src/main.cpp | 32 | ||||
-rw-r--r-- | src/map.cpp | 4 | ||||
-rw-r--r-- | src/mapblockobject.h | 2 | ||||
-rw-r--r-- | src/server.cpp | 2 |
9 files changed, 107 insertions, 37 deletions
diff --git a/data/tool_stpick.png b/data/tool_stpick.png Binary files differindex 531599f44..9ca3a5e03 100644 --- a/data/tool_stpick.png +++ b/data/tool_stpick.png diff --git a/data/tool_wpick.png b/data/tool_wpick.png Binary files differindex ee7b8222e..359249515 100644 --- a/data/tool_wpick.png +++ b/data/tool_wpick.png diff --git a/src/inventory.h b/src/inventory.h index e97db8ffb..fd2cd8778 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -226,17 +226,39 @@ public: #ifndef SERVER video::ITexture * getImage() { + std::string basename; if(m_toolname == "WPick") - return g_irrlicht->getTexture("../data/tool_wpick.png"); - if(m_toolname == "STPick") - return g_irrlicht->getTexture("../data/tool_stpick.png"); + basename = "../data/tool_wpick.png"; + else if(m_toolname == "STPick") + basename = "../data/tool_stpick.png"; // 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 std::string getText() { - std::ostringstream os; + return ""; + + /*std::ostringstream os; u16 f = 4; u16 d = 65535/f; u16 i; @@ -244,7 +266,7 @@ public: os<<'X'; for(; i<f; i++) os<<'-'; - return os.str(); + return os.str();*/ /*std::ostringstream os; os<<m_toolname; diff --git a/src/irrlichtwrapper.cpp b/src/irrlichtwrapper.cpp index c012b136e..fc9f96b18 100644 --- a/src/irrlichtwrapper.cpp +++ b/src/irrlichtwrapper.cpp @@ -146,39 +146,45 @@ video::ITexture * CrackTextureMod::make(video::ITexture *original, return newtexture; } -#if 0 -video::ITexture * createAlphaBlitTexture(const char *name, video::ITexture *base, - video::ITexture *other, v2u32 size, v2s32 pos_base, v2s32 pos_other) +video::ITexture * ProgressBarTextureMod::make(video::ITexture *original, + const char *newname, video::IVideoDriver* driver) { - if(g_device == NULL) - return NULL; - video::IVideoDriver* driver = g_device->getVideoDriver(); - - core::dimension2d<u32> dim(size.X, size.Y); + core::position2d<s32> pos_base(0, 0); + core::dimension2d<u32> dim = original->getOriginalSize(); - video::IImage *baseimage = driver->createImage( - base, - core::position2d<s32>(pos_base.X, pos_base.Y), - dim); + video::IImage *baseimage = driver->createImage(original, pos_base, dim); assert(baseimage); - - video::IImage *otherimage = driver->createImage( - other, - core::position2d<s32>(pos_other.X, pos_other.Y), - dim); - assert(sourceimage); - otherimage->copyToWithAlpha(baseimage, v2s32(0,0), - core::rect<s32>(v2s32(0,0), dim), - video::SColor(255,255,255,255), - core::rect<s32>(v2s32(0,0), dim)); - otherimage->drop(); + core::dimension2d<u32> size = baseimage->getDimension(); - video::ITexture *newtexture = driver->addTexture(name, baseimage); + u32 barheight = 1; + u32 barpad_x = 1; + u32 barpad_y = 1; + u32 barwidth = size.Width - barpad_x*2; + v2u32 barpos(barpad_x, size.Height - barheight - barpad_y); + + 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(); return newtexture; } -#endif diff --git a/src/irrlichtwrapper.h b/src/irrlichtwrapper.h index 981e3377f..ce54b70c0 100644 --- a/src/irrlichtwrapper.h +++ b/src/irrlichtwrapper.h @@ -97,6 +97,20 @@ struct CrackTextureMod: public TextureMod 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 */ diff --git a/src/main.cpp b/src/main.cpp index ac91b9d3d..df335ad39 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -177,7 +177,8 @@ TODO: Check if the usage of Client::isFetchingBlocks() in 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
======================================================================
@@ -2122,9 +2123,21 @@ int main(int argc, char *argv[]) }
}
}
+ else if(n.d == CONTENT_TORCH)
+ {
+ dig_time_complete = 0.0;
+ }
- dig_index = (u16)((float)CRACK_ANIMATION_LENGTH
- * dig_time/dig_time_complete);
+ if(dig_time_complete >= 0.001)
+ {
+ dig_index = (u16)((float)CRACK_ANIMATION_LENGTH
+ * dig_time/dig_time_complete);
+ }
+ // This is for torches
+ else
+ {
+ 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
/ (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;
diff --git a/src/map.cpp b/src/map.cpp index acaf8436a..fe94d6e97 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1991,7 +1991,9 @@ MapBlock * ServerMap::emergeBlock( coal_rareness = 1; 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( (rand()%(MAP_BLOCKSIZE-2))+1, diff --git a/src/mapblockobject.h b/src/mapblockobject.h index 05d522901..08f535514 100644 --- a/src/mapblockobject.h +++ b/src/mapblockobject.h @@ -809,7 +809,7 @@ public: #ifndef SERVER virtual void clientStep(float dtime) { - m_yaw += dtime * 90; + m_yaw += dtime * 60; if(m_yaw >= 360.) m_yaw -= 360.; diff --git a/src/server.cpp b/src/server.cpp index db4e04228..35f1f8a27 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1785,7 +1785,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) /* 3: Digging completed */ - if(action == 3) + else if(action == 3) { // Mandatory parameter; actually used for nothing core::map<v3s16, MapBlock*> modified_blocks; |