Non idle punches.

Punch(play animation and calculate damage) entity only if time from last punch greater or equal to full punch interval.
This commit is contained in:
Cruelbob 2013-09-28 02:36:18 +04:00
parent fb6a789991
commit 7473306dd3
3 changed files with 22 additions and 7 deletions

View File

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

View File

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

View File

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