diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-06-10 12:46:48 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-06-10 12:46:48 +0300 |
commit | 6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e (patch) | |
tree | d5c31cd32d0a1c73d8eaf9065a7b01235b0fff57 /src/game.cpp | |
parent | 7ba72f27630112286456aa5dd4e1738fde58ae6f (diff) | |
download | minetest-6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e.tar.gz minetest-6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e.tar.bz2 minetest-6a0388bb4bedc1b1c6318d7bfebaf1ec67ccf94e.zip |
Node placement client-side prediction
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/game.cpp b/src/game.cpp index 485bcbb50..6ccf02677 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2366,8 +2366,41 @@ void the_game( // Otherwise report right click to server else { + // Report to server client.interact(3, pointed); camera.setDigging(1); // right click animation + + // If the wielded item has node placement prediction, + // make that happen + const ItemDefinition &def = + playeritem.getDefinition(itemdef); + if(def.node_placement_prediction != "") + do{ // breakable + verbosestream<<"Node placement prediction for " + <<playeritem.name<<" is " + <<def.node_placement_prediction<<std::endl; + v3s16 p = neighbourpos; + content_t id; + bool found = + nodedef->getId(def.node_placement_prediction, id); + if(!found){ + errorstream<<"Node placement prediction failed for " + <<playeritem.name<<" (places " + <<def.node_placement_prediction + <<") - Name not known"<<std::endl; + break; + } + MapNode n(id); + try{ + // This triggers the required mesh update too + client.addNode(p, n); + }catch(InvalidPositionException &e){ + errorstream<<"Node placement prediction failed for " + <<playeritem.name<<" (places " + <<def.node_placement_prediction + <<") - Position not loaded"<<std::endl; + } + }while(0); } } } |