From 7473306dd32618a332ce94d0592ba30d4f03ea61 Mon Sep 17 00:00:00 2001 From: Cruelbob Date: Sat, 28 Sep 2013 02:36:18 +0400 Subject: [PATCH] Non idle punches. Punch(play animation and calculate damage) entity only if time from last punch greater or equal to full punch interval. --- src/content_sao.h | 5 +++++ src/game.cpp | 14 +++++++++++--- src/server.cpp | 10 ++++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/content_sao.h b/src/content_sao.h index 6b97cb148..36b2e3da4 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -242,6 +242,11 @@ public: m_time_from_last_punch = 0.0; return r; } + float getTimeFromLastPunch() + { + return m_time_from_last_punch; + } + void noCheatDigStart(v3s16 p) { m_nocheat_dig_pos = p; diff --git a/src/game.cpp b/src/game.cpp index 851f5dd9d..9bfec3283 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2818,9 +2818,17 @@ void the_game( v3f objpos = selected_object->getPosition(); v3f dir = (objpos - player_position).normalize(); - bool disable_send = selected_object->directReportPunch( - dir, &playeritem, time_from_last_punch); - time_from_last_punch = 0; + bool disable_send = true; + if(time_from_last_punch >= playeritem.getToolCapabilities(gamedef->idef()).full_punch_interval) + { + disable_send = selected_object->directReportPunch( + dir, &playeritem, time_from_last_punch); + time_from_last_punch = 0; + } + else + { + left_punch = false; + } if(!disable_send) client.interact(0, pointed); } diff --git a/src/server.cpp b/src/server.cpp index 492ad907b..b5ffb0dba 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2925,10 +2925,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) v3f dir = (pointed_object->getBasePosition() - (player->getPosition() + player->getEyeOffset()) ).normalize(); - float time_from_last_punch = - playersao->resetTimeFromLastPunch(); - pointed_object->punch(dir, &toolcap, playersao, - time_from_last_punch); + + if(playersao->getTimeFromLastPunch() >= toolcap.full_punch_interval) + { + pointed_object->punch(dir, &toolcap, playersao, + playersao->resetTimeFromLastPunch()); + } } } // action == 0