]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Send Position packet on event, don't check it at each AsyncRunStep.
authorLoic Blot <loic.blot@unix-experience.fr>
Wed, 4 Mar 2015 11:19:26 +0000 (12:19 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Wed, 4 Mar 2015 11:19:26 +0000 (12:19 +0100)
* This permit to cleanup the player checking loop

src/content_sao.cpp
src/content_sao.h
src/network/packethandlers/server.cpp
src/server.cpp
src/server.h

index ad48f95fbb3d00d2c7d1b6367d7121f4218c1bf4..9dadcede9b404f9cf5c765c93d425e6de38a026c 100644 (file)
@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "tool.h" // For ToolCapabilities
 #include "gamedef.h"
 #include "player.h"
+#include "server.h"
 #include "scripting_game.h"
 #include "genericobject.h"
 #include "log.h"
@@ -716,7 +717,6 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
        m_attachment_parent_id(0),
        m_attachment_sent(false),
        // public
-       m_moved(false),
        m_physics_override_speed(1),
        m_physics_override_jump(1),
        m_physics_override_gravity(1),
@@ -867,7 +867,7 @@ void PlayerSAO::step(float dtime, bool send_recommended)
                m_attachment_position = v3f(0,0,0);
                m_attachment_rotation = v3f(0,0,0);
                m_player->setPosition(m_last_good_position);
-               m_moved = true;
+               ((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
        }
 
        //dstream<<"PlayerSAO::step: dtime: "<<dtime<<std::endl;
@@ -982,8 +982,7 @@ void PlayerSAO::setPos(v3f pos)
        m_player->setPosition(pos);
        // Movement caused by this command is always valid
        m_last_good_position = pos;
-       // Force position change on client
-       m_moved = true;
+       ((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
 }
 
 void PlayerSAO::moveTo(v3f pos, bool continuous)
@@ -993,22 +992,19 @@ void PlayerSAO::moveTo(v3f pos, bool continuous)
        m_player->setPosition(pos);
        // Movement caused by this command is always valid
        m_last_good_position = pos;
-       // Force position change on client
-       m_moved = true;
+       ((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
 }
 
 void PlayerSAO::setYaw(float yaw)
 {
        m_player->setYaw(yaw);
-       // Force change on client
-       m_moved = true;
+       ((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
 }
 
 void PlayerSAO::setPitch(float pitch)
 {
        m_player->setPitch(pitch);
-       // Force change on client
-       m_moved = true;
+       ((Server*)m_env->getGameDef())->SendMovePlayer(m_peer_id);
 }
 
 int PlayerSAO::punch(v3f dir,
@@ -1241,7 +1237,6 @@ bool PlayerSAO::checkMovementCheat()
                                        <<" moved too fast; resetting position"
                                        <<std::endl;
                        m_player->setPosition(m_last_good_position);
-                       m_moved = true;
                        cheated = true;
                }
        }
index a9302915490bf27946ceb277ca6048dd04ae48c0..cc372ff5572a67b910f583a286248a41e5696d3a 100644 (file)
@@ -314,9 +314,6 @@ class PlayerSAO : public ServerActiveObject
        bool m_attachment_sent;
 
 public:
-       // Some flags used by Server
-       bool m_moved;
-
        float m_physics_override_speed;
        float m_physics_override_jump;
        float m_physics_override_gravity;
index 9dd1c95dd2536f8e8f6be7d01a7a07e2bfd8de84..526c17344e57b5803324927e3ac9d3da5f738d63 100644 (file)
@@ -579,10 +579,10 @@ void Server::handleCommand_PlayerPos(NetworkPacket* pkt)
        player->control.LMB = (keyPressed & 128);
        player->control.RMB = (keyPressed & 256);
 
-       bool cheated = playersao->checkMovementCheat();
-       if (cheated) {
+       if (playersao->checkMovementCheat()) {
                // Call callbacks
                m_script->on_cheat(playersao, "moved_too_fast");
+               SendMovePlayer(pkt->getPeerId());
        }
 }
 
index d2af9f5acf1e238c635eaae97a286f4a605bb517..625ab223152779482e1a5d4e862ccd75b6d293b9 100644 (file)
@@ -581,32 +581,6 @@ void Server::AsyncRunStep(bool initial_step)
                Do background stuff
        */
 
-       /*
-               Handle players
-       */
-       {
-               JMutexAutoLock lock(m_env_mutex);
-
-               std::list<u16> clientids = m_clients.getClientIDs();
-
-               ScopeProfiler sp(g_profiler, "Server: handle players");
-
-               for(std::list<u16>::iterator
-                       i = clientids.begin();
-                       i != clientids.end(); ++i)
-               {
-                       PlayerSAO *playersao = getPlayerSAO(*i);
-                       if(playersao == NULL)
-                               continue;
-
-
-                       if(playersao->m_moved) {
-                               SendMovePlayer(*i);
-                               playersao->m_moved = false;
-                       }
-               }
-       }
-
        /* Transform liquids */
        m_liquid_transform_timer += dtime;
        if(m_liquid_transform_timer >= m_liquid_transform_every)
@@ -2590,6 +2564,7 @@ void Server::RespawnPlayer(u16 peer_id)
        bool repositioned = m_script->on_respawnplayer(playersao);
        if(!repositioned){
                v3f pos = findSpawnPos(m_env->getServerMap());
+               // setPos will send the new position to client
                playersao->setPos(pos);
        }
 }
index b3d5d0fec434fa42c5b14260d46b7d5a94165c77..2fea0db4ccef9c603373a35822bcd58118e7e8e0 100644 (file)
@@ -374,9 +374,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 
        void SendPlayerHPOrDie(u16 peer_id, bool die) { die ? DiePlayer(peer_id) : SendPlayerHP(peer_id); }
        void SendPlayerBreath(u16 peer_id);
-
-       // Envlock and conlock should be locked when calling these
        void SendInventory(u16 peer_id);
+       void SendMovePlayer(u16 peer_id);
 
        // Bind address
        Address m_bind_addr;
@@ -402,7 +401,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed);
        void SendPlayerHP(u16 peer_id);
 
-       void SendMovePlayer(u16 peer_id);
        void SendLocalPlayerAnimations(u16 peer_id, v2s32 animation_frames[4], f32 animation_speed);
        void SendEyeOffset(u16 peer_id, v3f first, v3f third);
        void SendPlayerPrivileges(u16 peer_id);