summaryrefslogtreecommitdiff
path: root/src/serverenvironment.cpp
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2020-04-11 11:22:15 +0200
committerLoïc Blot <nerzhul@users.noreply.github.com>2020-04-11 16:07:17 +0200
commit5146086a64d5eeb480948d612a008a2ec81455d4 (patch)
tree924bc1191cd251cd48d7f41e7d9b02577985eadf /src/serverenvironment.cpp
parent894a34aef48024a752a1ef151d046955d83858d0 (diff)
downloadminetest-5146086a64d5eeb480948d612a008a2ec81455d4.tar.gz
minetest-5146086a64d5eeb480948d612a008a2ec81455d4.tar.bz2
minetest-5146086a64d5eeb480948d612a008a2ec81455d4.zip
Drop content_sao.{cpp,h}
Move LuaEntitySAO to a new dedicated file Drop TestSAO (useless object) Drop the old static startup initialized SAO factory, which was pretty useless. This factory was using a std::map for 2 elements, now just use a simple condition owned by ServerEnvironment, which will be lightweight, that will also drop a one time useful test on each LuaEntitySAO creation. This should reduce server load on massive SAO creation
Diffstat (limited to 'src/serverenvironment.cpp')
-rw-r--r--src/serverenvironment.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index c2ab5c07d..32d10f8c0 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -44,6 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#if USE_POSTGRESQL
#include "database/database-postgresql.h"
#endif
+#include "server/luaentity_sao.h"
#include "server/player_sao.h"
#define LBM_NAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_:"
@@ -1778,6 +1779,18 @@ static void print_hexdump(std::ostream &o, const std::string &data)
}
}
+ServerActiveObject* ServerEnvironment::createSAO(ActiveObjectType type, v3f pos,
+ const std::string &data)
+{
+ switch (type) {
+ case ACTIVEOBJECT_TYPE_LUAENTITY:
+ return new LuaEntitySAO(this, pos, data);
+ default:
+ warningstream << "ServerActiveObject: No factory for type=" << type << std::endl;
+ }
+ return nullptr;
+}
+
/*
Convert stored objects from blocks near the players to active.
*/
@@ -1811,10 +1824,10 @@ void ServerEnvironment::activateObjects(MapBlock *block, u32 dtime_s)
std::vector<StaticObject> new_stored;
for (const StaticObject &s_obj : block->m_static_objects.m_stored) {
// Create an active object from the data
- ServerActiveObject *obj = ServerActiveObject::create
- ((ActiveObjectType) s_obj.type, this, 0, s_obj.pos, s_obj.data);
+ ServerActiveObject *obj = createSAO((ActiveObjectType) s_obj.type, s_obj.pos,
+ s_obj.data);
// If couldn't create object, store static data back.
- if(obj == NULL) {
+ if (!obj) {
errorstream<<"ServerEnvironment::activateObjects(): "
<<"failed to create active object from static object "
<<"in block "<<PP(s_obj.pos/BS)