]> git.lizzy.rs Git - minetest.git/blobdiff - src/game.cpp
Add shutdown hook interface to Lua API
[minetest.git] / src / game.cpp
index 19c4707de65a51e384e6355d541d5f2cd07190a8..5ce214cb8d3150c253c63c1be99d028654667f10 100644 (file)
@@ -1235,6 +1235,9 @@ void the_game(
        float object_hit_delay_timer = 0.0;
        float time_from_last_punch = 10;
 
+       float update_draw_list_timer = 0.0;
+       v3f update_draw_list_last_cam_dir;
+
        bool invert_mouse = g_settings->getBool("invert_mouse");
 
        bool respawn_menu_active = false;
@@ -1878,6 +1881,8 @@ void the_game(
                        bool a_jump,
                        bool a_superspeed,
                        bool a_sneak,
+                       bool a_LMB,
+                       bool a_RMB,
                        float a_pitch,
                        float a_yaw*/
                        PlayerControl control(
@@ -1888,10 +1893,24 @@ void the_game(
                                input->isKeyDown(getKeySetting("keymap_jump")),
                                input->isKeyDown(getKeySetting("keymap_special1")),
                                input->isKeyDown(getKeySetting("keymap_sneak")),
+                               input->getLeftState(),
+                               input->getRightState(),
                                camera_pitch,
                                camera_yaw
                        );
                        client.setPlayerControl(control);
+                       u32 keyPressed=
+                       1*(int)input->isKeyDown(getKeySetting("keymap_forward"))+
+                       2*(int)input->isKeyDown(getKeySetting("keymap_backward"))+
+                       4*(int)input->isKeyDown(getKeySetting("keymap_left"))+
+                       8*(int)input->isKeyDown(getKeySetting("keymap_right"))+
+                       16*(int)input->isKeyDown(getKeySetting("keymap_jump"))+
+                       32*(int)input->isKeyDown(getKeySetting("keymap_special1"))+
+                       64*(int)input->isKeyDown(getKeySetting("keymap_sneak"))+
+                       128*(int)input->getLeftState()+
+                       256*(int)input->getRightState();
+                       LocalPlayer* player = client.getEnv().getLocalPlayer();
+                       player->keyPressed=keyPressed;
                }
                
                /*
@@ -2304,6 +2323,13 @@ void the_game(
                                                                <<playeritem.name<<" is "
                                                                <<def.node_placement_prediction<<std::endl;
                                                v3s16 p = neighbourpos;
+                                               // Place inside node itself if buildable_to
+                                               try{
+                                                       MapNode n_under = map.getNode(nodepos);
+                                                       if(nodedef->get(n_under).buildable_to)
+                                                               p = nodepos;
+                                               }catch(InvalidPositionException &e){}
+                                               // Find id of predicted node
                                                content_t id;
                                                bool found =
                                                        nodedef->getId(def.node_placement_prediction, id);
@@ -2690,7 +2716,19 @@ void the_game(
                                item = mlist->getItem(client.getPlayerItem());
                        camera.wield(item);
                }
-               
+
+               /*
+                       Update block draw list every 200ms or when camera direction has
+                       changed much
+               */
+               update_draw_list_timer += dtime;
+               if(update_draw_list_timer >= 0.2 ||
+                               update_draw_list_last_cam_dir.getDistanceFrom(camera_direction) > 0.2){
+                       update_draw_list_timer = 0;
+                       client.getEnv().getClientMap().updateDrawList(driver);
+                       update_draw_list_last_cam_dir = camera_direction;
+               }
+
                /*
                        Drawing begins
                */