Cleanup & bugfix
authorLoic Blot <loic.blot@unix-experience.fr>
Thu, 8 Mar 2018 21:19:25 +0000 (22:19 +0100)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Thu, 8 Mar 2018 22:00:17 +0000 (23:00 +0100)
* ObjectRef::set_local_animation: fix wrong lua return (should push a boolean, currently returns nil)
* ObjectRef::set_eye_offset: fix wrong lua return (should push a boolean, currently returns nil)
* Fix various Server functions which depends on RemotePlayer objet and return true/false when player object is nil whereas it's a caller implementation error. Change those bool functions to void and add sanitize_check call instead. Current callers are always checking player object validity
* Optimize Server::setClouds : use CloudParams object ref instead of attribute deserialization from structure & perform RemotePlayer::setCloudParams directly in server class like many other calls
* Optimize Server::SendCloudParams: use CloudParams object ref instead of deserialized attributes

src/script/lua_api/l_object.cpp
src/server.cpp
src/server.h

index 03bd84d5249e6885188f79cfcf780cfea6f7aedc..f72a81d322a28d1864d9e10ed88bcf765e8d406b 100644 (file)
@@ -493,11 +493,9 @@ int ObjectRef::l_set_local_animation(lua_State *L)
        if (!lua_isnil(L, 6))
                frame_speed = lua_tonumber(L, 6);
 
-       if (!getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed))
-               return 0;
-
+       getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed);
        lua_pushboolean(L, true);
-       return 0;
+       return 1;
 }
 
 // get_local_animation(self)
@@ -544,11 +542,9 @@ int ObjectRef::l_set_eye_offset(lua_State *L)
        /* TODO: if possible: improve the camera colision detetion to allow Y <= -1.5) */
        offset_third.Y = rangelim(offset_third.Y,-10,15); //1.5*BS
 
-       if (!getServer(L)->setPlayerEyeOffset(player, offset_first, offset_third))
-               return 0;
-
+       getServer(L)->setPlayerEyeOffset(player, offset_first, offset_third);
        lua_pushboolean(L, true);
-       return 0;
+       return 1;
 }
 
 // get_eye_offset(self)
@@ -1559,9 +1555,7 @@ int ObjectRef::l_set_sky(lua_State *L)
        if (lua_isboolean(L, 5))
                clouds = lua_toboolean(L, 5);
 
-       if (!getServer(L)->setSky(player, bgcolor, type, params, clouds))
-               return 0;
-
+       getServer(L)->setSky(player, bgcolor, type, params, clouds);
        lua_pushboolean(L, true);
        return 1;
 }
@@ -1631,14 +1625,7 @@ int ObjectRef::l_set_clouds(lua_State *L)
        }
        lua_pop(L, 1);
 
-       if (!getServer(L)->setClouds(player, cloud_params.density,
-                       cloud_params.color_bright, cloud_params.color_ambient,
-                       cloud_params.height, cloud_params.thickness,
-                       cloud_params.speed))
-               return 0;
-
-       player->setCloudParams(cloud_params);
-
+       getServer(L)->setClouds(player, cloud_params);
        lua_pushboolean(L, true);
        return 1;
 }
index 75547c60bc26bb857a58d8654464f616202de672..9e1db6c61f16fbf8ee1edd8ffad24bf24a717e48 100644 (file)
@@ -1775,17 +1775,11 @@ void Server::SendSetSky(session_t peer_id, const video::SColor &bgcolor,
        Send(&pkt);
 }
 
-void Server::SendCloudParams(session_t peer_id, float density,
-               const video::SColor &color_bright,
-               const video::SColor &color_ambient,
-               float height,
-               float thickness,
-               const v2f &speed)
+void Server::SendCloudParams(session_t peer_id, const CloudParams &params)
 {
        NetworkPacket pkt(TOCLIENT_CLOUD_PARAMS, 0, peer_id);
-       pkt << density << color_bright << color_ambient
-                       << height << thickness << speed;
-
+       pkt << params.density << params.color_bright << params.color_ambient
+                       << params.height << params.thickness << params.speed;
        Send(&pkt);
 }
 
@@ -3113,54 +3107,36 @@ Address Server::getPeerAddress(session_t peer_id)
        return m_con->GetPeerAddress(peer_id);
 }
 
-bool Server::setLocalPlayerAnimations(RemotePlayer *player,
+void Server::setLocalPlayerAnimations(RemotePlayer *player,
                v2s32 animation_frames[4], f32 frame_speed)
 {
-       if (!player)
-               return false;
-
+       sanity_check(player);
        player->setLocalAnimations(animation_frames, frame_speed);
        SendLocalPlayerAnimations(player->getPeerId(), animation_frames, frame_speed);
-       return true;
 }
 
-bool Server::setPlayerEyeOffset(RemotePlayer *player, v3f first, v3f third)
+void Server::setPlayerEyeOffset(RemotePlayer *player, const v3f &first, const v3f &third)
 {
-       if (!player)
-               return false;
-
+       sanity_check(player);
        player->eye_offset_first = first;
        player->eye_offset_third = third;
        SendEyeOffset(player->getPeerId(), first, third);
-       return true;
 }
 
-bool Server::setSky(RemotePlayer *player, const video::SColor &bgcolor,
+void Server::setSky(RemotePlayer *player, const video::SColor &bgcolor,
        const std::string &type, const std::vector<std::string> &params,
        bool &clouds)
 {
-       if (!player)
-               return false;
-
+       sanity_check(player);
        player->setSky(bgcolor, type, params, clouds);
        SendSetSky(player->getPeerId(), bgcolor, type, params, clouds);
-       return true;
 }
 
-bool Server::setClouds(RemotePlayer *player, float density,
-       const video::SColor &color_bright,
-       const video::SColor &color_ambient,
-       float height,
-       float thickness,
-       const v2f &speed)
+void Server::setClouds(RemotePlayer *player, const CloudParams &params)
 {
-       if (!player)
-               return false;
-
-       SendCloudParams(player->getPeerId(), density,
-                       color_bright, color_ambient, height,
-                       thickness, speed);
-       return true;
+       sanity_check(player);
+       player->setCloudParams(params);
+       SendCloudParams(player->getPeerId(), params);
 }
 
 bool Server::overrideDayNightRatio(RemotePlayer *player, bool do_override,
index 3b9b72021c603744cd9179d65a8ef623047bbd69..8d5cd6da4c1112598177974e59fb5d9d0cbffd3e 100644 (file)
@@ -59,6 +59,7 @@ class EmergeManager;
 class ServerScripting;
 class ServerEnvironment;
 struct SimpleSoundSpec;
+struct CloudParams;
 class ServerThread;
 
 enum ClientDeletionReason {
@@ -295,19 +296,14 @@ public:
 
        Address getPeerAddress(session_t peer_id);
 
-       bool setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4],
+       void setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4],
                        f32 frame_speed);
-       bool setPlayerEyeOffset(RemotePlayer *player, v3f first, v3f third);
+       void setPlayerEyeOffset(RemotePlayer *player, const v3f &first, const v3f &third);
 
-       bool setSky(RemotePlayer *player, const video::SColor &bgcolor,
+       void setSky(RemotePlayer *player, const video::SColor &bgcolor,
                        const std::string &type, const std::vector<std::string> &params,
                        bool &clouds);
-       bool setClouds(RemotePlayer *player, float density,
-                       const video::SColor &color_bright,
-                       const video::SColor &color_ambient,
-                       float height,
-                       float thickness,
-                       const v2f &speed);
+       void setClouds(RemotePlayer *player, const CloudParams &params);
 
        bool overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
 
@@ -389,12 +385,7 @@ private:
        void SendSetSky(session_t peer_id, const video::SColor &bgcolor,
                        const std::string &type, const std::vector<std::string> &params,
                        bool &clouds);
-       void SendCloudParams(session_t peer_id, float density,
-                       const video::SColor &color_bright,
-                       const video::SColor &color_ambient,
-                       float height,
-                       float thickness,
-                       const v2f &speed);
+       void SendCloudParams(session_t peer_id, const CloudParams &params);
        void SendOverrideDayNightRatio(session_t peer_id, bool do_override, float ratio);
        void broadcastModChannelMessage(const std::string &channel,
                        const std::string &message, session_t from_peer);