summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2010-12-23 12:10:46 +0200
committerPerttu Ahola <celeron55@gmail.com>2010-12-23 12:10:46 +0200
commita55850e4dcc3440fdadb9fc94df3f2ef02f5a34d (patch)
treeacd394bb791dc81aff2515083351e23e25346430 /src
parent03d67af9e85b9641556c8ea2276aa07f6fca175e (diff)
downloadminetest-a55850e4dcc3440fdadb9fc94df3f2ef02f5a34d.tar.gz
minetest-a55850e4dcc3440fdadb9fc94df3f2ef02f5a34d.tar.bz2
minetest-a55850e4dcc3440fdadb9fc94df3f2ef02f5a34d.zip
fixed crack animation timing in client
Diffstat (limited to 'src')
-rw-r--r--src/client.cpp4
-rw-r--r--src/client.h9
-rw-r--r--src/constants.h3
-rw-r--r--src/main.cpp15
4 files changed, 27 insertions, 4 deletions
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="<<dr<<std::endl;
+ dout_client<<DTIME<<"Client: changing day-night ratio"<<std::endl;
m_env.setDayNightRatio(dr);
m_env.expireMeshes(true);
}
@@ -1037,6 +1038,9 @@ bool Client::AsyncProcessPacket(LazyMeshUpdater &mesh_updater)
p.Z = readS16(&data[6]);
//TimeTaker t1("TOCLIENT_REMOVENODE", g_device);
+
+ // This will clear the cracking animation after digging
+ ((ClientMap&)m_env.getMap()).clearTempMod(p);
core::map<v3s16, MapBlock*> 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="<<dig_index<<std::endl;
client.setTempMod(nodepos, NodeMod(NODEMOD_CRACK, dig_index));
}
+
+ dig_time += dtime;
}
if(g_input->getRightClicked())