diff options
author | Auke Kok <sofar@foo-projects.org> | 2017-09-11 14:50:06 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2017-09-11 20:54:20 +0200 |
commit | 5b3fbf9cf75f9f637c666d34e2489fef0cc035d9 (patch) | |
tree | 689ae2c108a895f6b2ca3afc826b1da46baf156d /src/game.cpp | |
parent | d10cccee3108b45cf7085ffdbff9b5f2a4045ea7 (diff) | |
download | minetest-5b3fbf9cf75f9f637c666d34e2489fef0cc035d9.tar.gz minetest-5b3fbf9cf75f9f637c666d34e2489fef0cc035d9.tar.bz2 minetest-5b3fbf9cf75f9f637c666d34e2489fef0cc035d9.zip |
Implement client node dig prediction
Dig prediction allows clients to remove dug nodes without
waiting for server acknowledgement.
This patch allows mods to override dig prediction,
it can either be turned off or a different "prediction node"
can be selected.
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/game.cpp b/src/game.cpp index 04688e476..d85e34d35 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4104,7 +4104,17 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, client->getScript()->on_dignode(nodepos, wasnode)) { return; } - client->removeNode(nodepos); + + const ContentFeatures &f = client->ndef()->get(wasnode); + if (f.node_dig_prediction == "air") { + client->removeNode(nodepos); + } else if (!f.node_dig_prediction.empty()) { + content_t id; + bool found = client->ndef()->getId(f.node_dig_prediction, id); + if (found) + client->addNode(nodepos, id, true); + } + // implicit else: no prediction } client->interact(2, pointed); |