diff --git a/src/client.cpp b/src/client.cpp index 32f62e3ba..23f9d2a55 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -176,6 +176,7 @@ void Client::step(float dtime) if(dr != m_env.getDayNightRatio()) { //dstream<<"dr="< modified_blocks; diff --git a/src/client.h b/src/client.h index bfec7730d..3c8bbfaf6 100644 --- a/src/client.h +++ b/src/client.h @@ -251,6 +251,15 @@ public: v3s16 blockpos = ((ClientMap&)m_env.getMap()).clearTempMod(p); m_env.getMap().updateMeshes(blockpos, m_env.getDayNightRatio()); } + + float getAvgRtt() + { + JMutexAutoLock lock(m_con_mutex); + con::Peer *peer = m_con.GetPeerNoEx(PEER_ID_SERVER); + if(peer == NULL) + return 0.0; + return peer->avg_rtt; + } private: diff --git a/src/constants.h b/src/constants.h index 8b7e77c42..cf394ca02 100644 --- a/src/constants.h +++ b/src/constants.h @@ -79,5 +79,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #define WATER_LEVEL (0) +// Length of cracking animation in count of images +#define CRACK_ANIMATION_LENGTH 4 + #endif diff --git a/src/main.cpp b/src/main.cpp index 5d6712df6..aacf4d775 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2114,6 +2114,7 @@ int main(int argc, char *argv[]) static v3s16 nodepos_old(-32768,-32768,-32768); static float dig_time = 0.0; + static u16 dig_index = 0; if(nodepos != nodepos_old) { @@ -2146,19 +2147,25 @@ int main(int argc, char *argv[]) } if(g_input->getLeftState()) { - dig_time += dtime; - float dig_time_complete = 0.5; MapNode n = client.getNode(nodepos); if(n.d == CONTENT_STONE) dig_time_complete = 1.5; + + float dig_time_complete0 = dig_time_complete+client.getAvgRtt()*2; + if(dig_time_complete0 < 0.0) + dig_time_complete0 = 0.0; - u16 dig_index = (u16)(3.99*dig_time/dig_time_complete); - if(dig_time > 0.125) + dig_index = (u16)((float)CRACK_ANIMATION_LENGTH + * dig_time/dig_time_complete0); + + if(dig_time > 0.125 && dig_index < CRACK_ANIMATION_LENGTH) { //dstream<<"dig_index="<getRightClicked())