SAO work: ActiveObject types & SAO cleanup * Replace u8 types with ActiveObjectType...
authorLoic Blot <loic.blot@unix-experience.fr>
Mon, 16 Feb 2015 16:42:13 +0000 (17:42 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Tue, 17 Feb 2015 08:09:50 +0000 (09:09 +0100)
src/activeobject.h
src/content_cao.cpp
src/content_cao.h
src/content_object.h [deleted file]
src/content_sao.cpp
src/content_sao.h
src/script/lua_api/l_env.cpp
src/script/lua_api/l_object.cpp
src/serverobject.h

index 46880fc7feb10819a775bc9c0cbee0ce8e7a0fb9..3dd1f98f524bd2be5eb5e4fd942a056c96b27271 100644 (file)
@@ -23,7 +23,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "irr_aabb3d.h"
 #include <string>
 
-#define ACTIVEOBJECT_TYPE_INVALID 0
+enum ActiveObjectType {
+       ACTIVEOBJECT_TYPE_INVALID = 0,
+       ACTIVEOBJECT_TYPE_TEST = 1,
+       ACTIVEOBJECT_TYPE_ITEM = 2,
+       ACTIVEOBJECT_TYPE_LUAENTITY = 7,
+// Special type, not stored as a static object
+       ACTIVEOBJECT_TYPE_PLAYER = 100,
+// Special type, only exists as CAO
+       ACTIVEOBJECT_TYPE_GENERIC = 101,
+};
 // Other types are defined in content_object.h
 
 struct ActiveObjectMessage
@@ -60,7 +69,7 @@ public:
                m_id = id;
        }
 
-       virtual u8 getType() const = 0;
+       virtual ActiveObjectType getType() const = 0;
        virtual bool getCollisionBox(aabb3f *toset) = 0;
        virtual bool collideWithObjects() = 0;
 protected:
index 6d41b27490879ba7cb7f5284d736ff4a51f9675f..4994c8b201ab6d66b102f02b4ce1ed59ca8aaf94 100644 (file)
@@ -34,7 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "serialization.h" // For decompressZlib
 #include "gamedef.h"
 #include "clientobject.h"
-#include "content_object.h"
 #include "mesh.h"
 #include "itemdef.h"
 #include "tool.h"
@@ -145,7 +144,7 @@ public:
        TestCAO(IGameDef *gamedef, ClientEnvironment *env);
        virtual ~TestCAO();
        
-       u8 getType() const
+       ActiveObjectType getType() const
        {
                return ACTIVEOBJECT_TYPE_TEST;
        }
@@ -289,7 +288,7 @@ public:
        ItemCAO(IGameDef *gamedef, ClientEnvironment *env);
        virtual ~ItemCAO();
        
-       u8 getType() const
+       ActiveObjectType getType() const
        {
                return ACTIVEOBJECT_TYPE_ITEM;
        }
index 69e2e54a264502fef563f2a48de2e3065d750e20..31ccd04d43f564bede9e29f3b31ea7c738847b9c 100644 (file)
@@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include <map>
 #include "irrlichttypes_extrabloated.h"
-#include "content_object.h"
 #include "clientobject.h"
 #include "object_properties.h"
 #include "itemgroup.h"
@@ -115,7 +114,7 @@ public:
                return new GenericCAO(gamedef, env);
        }
 
-       inline u8 getType() const
+       inline ActiveObjectType getType() const
        {
                return ACTIVEOBJECT_TYPE_GENERIC;
        }
diff --git a/src/content_object.h b/src/content_object.h
deleted file mode 100644 (file)
index 65a8297..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Minetest
-Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-
-#ifndef CONTENT_OBJECT_HEADER
-#define CONTENT_OBJECT_HEADER
-
-#define ACTIVEOBJECT_TYPE_TEST 1
-#define ACTIVEOBJECT_TYPE_ITEM 2
-#define ACTIVEOBJECT_TYPE_RAT 3
-#define ACTIVEOBJECT_TYPE_OERKKI1 4
-#define ACTIVEOBJECT_TYPE_FIREFLY 5
-#define ACTIVEOBJECT_TYPE_MOBV2 6
-
-#define ACTIVEOBJECT_TYPE_LUAENTITY 7
-
-// Special type, not stored as a static object
-#define ACTIVEOBJECT_TYPE_PLAYER 100
-
-// Special type, only exists as CAO
-#define ACTIVEOBJECT_TYPE_GENERIC 101
-
-#endif
-
index d4b3079ec2cc0fe7c30b587d9ba611dd993ee921..8cb8fa788303143de89018c0d5379bf4186e54db 100644 (file)
@@ -35,54 +35,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
 
-/*
-       DummyLoadSAO
-*/
-
-class DummyLoadSAO : public ServerActiveObject
-{
-public:
-       DummyLoadSAO(ServerEnvironment *env, v3f pos, u8 type):
-               ServerActiveObject(env, pos)
-       {
-               ServerActiveObject::registerType(type, create);
-       }
-       // Pretend to be the test object (to fool the client)
-       u8 getType() const
-       { return ACTIVEOBJECT_TYPE_TEST; }
-       // And never save to disk
-       bool isStaticAllowed() const
-       { return false; }
-
-       static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
-                       const std::string &data)
-       {
-               return new DummyLoadSAO(env, pos, 0);
-       }
-
-       void step(float dtime, bool send_recommended)
-       {
-               m_removed = true;
-               infostream<<"DummyLoadSAO step"<<std::endl;
-       }
-
-       bool getCollisionBox(aabb3f *toset) {
-               return false;
-       }
-
-       bool collideWithObjects() {
-               return false;
-       }
-
-private:
-};
-
-// Prototype (registers item for deserialization)
-DummyLoadSAO proto1_DummyLoadSAO(NULL, v3f(0,0,0), ACTIVEOBJECT_TYPE_RAT);
-DummyLoadSAO proto2_DummyLoadSAO(NULL, v3f(0,0,0), ACTIVEOBJECT_TYPE_OERKKI1);
-DummyLoadSAO proto3_DummyLoadSAO(NULL, v3f(0,0,0), ACTIVEOBJECT_TYPE_FIREFLY);
-DummyLoadSAO proto4_DummyLoadSAO(NULL, v3f(0,0,0), ACTIVEOBJECT_TYPE_MOBV2);
-
 /*
        TestSAO
 */
@@ -97,7 +49,7 @@ public:
        {
                ServerActiveObject::registerType(getType(), create);
        }
-       u8 getType() const
+       ActiveObjectType getType() const
        { return ACTIVEOBJECT_TYPE_TEST; }
 
        static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
@@ -158,203 +110,6 @@ private:
 // Prototype (registers item for deserialization)
 TestSAO proto_TestSAO(NULL, v3f(0,0,0));
 
-/*
-       ItemSAO
-
-       DEPRECATED: New dropped items are implemented in Lua; see
-                   builtin/item_entity.lua.
-*/
-
-class ItemSAO : public ServerActiveObject
-{
-public:
-       u8 getType() const
-       { return ACTIVEOBJECT_TYPE_ITEM; }
-
-       float getMinimumSavedMovement()
-       { return 0.1*BS; }
-
-       static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
-                       const std::string &data)
-       {
-               std::istringstream is(data, std::ios::binary);
-               char buf[1];
-               // read version
-               is.read(buf, 1);
-               u8 version = buf[0];
-               // check if version is supported
-               if(version != 0)
-                       return NULL;
-               std::string itemstring = deSerializeString(is);
-               infostream<<"create(): Creating item \""
-                               <<itemstring<<"\""<<std::endl;
-               return new ItemSAO(env, pos, itemstring);
-       }
-
-       ItemSAO(ServerEnvironment *env, v3f pos,
-                       const std::string &itemstring):
-               ServerActiveObject(env, pos),
-               m_itemstring(itemstring),
-               m_itemstring_changed(false),
-               m_speed_f(0,0,0),
-               m_last_sent_position(0,0,0)
-       {
-               ServerActiveObject::registerType(getType(), create);
-       }
-
-       void step(float dtime, bool send_recommended)
-       {
-               ScopeProfiler sp2(g_profiler, "step avg", SPT_AVG);
-
-               assert(m_env);
-
-               const float interval = 0.2;
-               if(m_move_interval.step(dtime, interval)==false)
-                       return;
-               dtime = interval;
-
-               core::aabbox3d<f32> box(-BS/3.,0.0,-BS/3., BS/3.,BS*2./3.,BS/3.);
-               collisionMoveResult moveresult;
-               // Apply gravity
-               m_speed_f += v3f(0, -dtime*9.81*BS, 0);
-               // Maximum movement without glitches
-               f32 pos_max_d = BS*0.25;
-               // Limit speed
-               if(m_speed_f.getLength()*dtime > pos_max_d)
-                       m_speed_f *= pos_max_d / (m_speed_f.getLength()*dtime);
-               v3f pos_f = getBasePosition();
-               v3f accel_f = v3f(0,0,0);
-               f32 stepheight = 0;
-               moveresult = collisionMoveSimple(m_env,m_env->getGameDef(),
-                               pos_max_d, box, stepheight, dtime,
-                               pos_f, m_speed_f, accel_f);
-
-               if(send_recommended == false)
-                       return;
-
-               if(pos_f.getDistanceFrom(m_last_sent_position) > 0.05*BS)
-               {
-                       setBasePosition(pos_f);
-                       m_last_sent_position = pos_f;
-
-                       std::ostringstream os(std::ios::binary);
-                       // command (0 = update position)
-                       writeU8(os, 0);
-                       // pos
-                       writeV3F1000(os, m_base_position);
-                       // create message and add to list
-                       ActiveObjectMessage aom(getId(), false, os.str());
-                       m_messages_out.push_back(aom);
-               }
-               if(m_itemstring_changed)
-               {
-                       m_itemstring_changed = false;
-
-                       std::ostringstream os(std::ios::binary);
-                       // command (1 = update itemstring)
-                       writeU8(os, 1);
-                       // itemstring
-                       os<<serializeString(m_itemstring);
-                       // create message and add to list
-                       ActiveObjectMessage aom(getId(), false, os.str());
-                       m_messages_out.push_back(aom);
-               }
-       }
-
-       std::string getClientInitializationData(u16 protocol_version)
-       {
-               std::ostringstream os(std::ios::binary);
-               // version
-               writeU8(os, 0);
-               // pos
-               writeV3F1000(os, m_base_position);
-               // itemstring
-               os<<serializeString(m_itemstring);
-               return os.str();
-       }
-
-       std::string getStaticData()
-       {
-               infostream<<__FUNCTION_NAME<<std::endl;
-               std::ostringstream os(std::ios::binary);
-               // version
-               writeU8(os, 0);
-               // itemstring
-               os<<serializeString(m_itemstring);
-               return os.str();
-       }
-
-       ItemStack createItemStack()
-       {
-               try{
-                       IItemDefManager *idef = m_env->getGameDef()->idef();
-                       ItemStack item;
-                       item.deSerialize(m_itemstring, idef);
-                       infostream<<__FUNCTION_NAME<<": m_itemstring=\""<<m_itemstring
-                                       <<"\" -> item=\""<<item.getItemString()<<"\""
-                                       <<std::endl;
-                       return item;
-               }
-               catch(SerializationError &e)
-               {
-                       infostream<<__FUNCTION_NAME<<": serialization error: "
-                                       <<"m_itemstring=\""<<m_itemstring<<"\""<<std::endl;
-                       return ItemStack();
-               }
-       }
-
-       int punch(v3f dir,
-                       const ToolCapabilities *toolcap,
-                       ServerActiveObject *puncher,
-                       float time_from_last_punch)
-       {
-               // Take item into inventory
-               ItemStack item = createItemStack();
-               Inventory *inv = puncher->getInventory();
-               if(inv != NULL)
-               {
-                       std::string wieldlist = puncher->getWieldList();
-                       ItemStack leftover = inv->addItem(wieldlist, item);
-                       puncher->setInventoryModified();
-                       if(leftover.empty())
-                       {
-                               m_removed = true;
-                       }
-                       else
-                       {
-                               m_itemstring = leftover.getItemString();
-                               m_itemstring_changed = true;
-                       }
-               }
-
-               return 0;
-       }
-
-       bool getCollisionBox(aabb3f *toset) {
-               return false;
-       }
-
-       bool collideWithObjects() {
-               return false;
-       }
-
-private:
-       std::string m_itemstring;
-       bool m_itemstring_changed;
-       v3f m_speed_f;
-       v3f m_last_sent_position;
-       IntervalLimiter m_move_interval;
-};
-
-// Prototype (registers item for deserialization)
-ItemSAO proto_ItemSAO(NULL, v3f(0,0,0), "");
-
-ServerActiveObject* createItemSAO(ServerEnvironment *env, v3f pos,
-                                  const std::string &itemstring)
-{
-       return new ItemSAO(env, pos, itemstring);
-}
-
 /*
        LuaEntitySAO
 */
index 38baeab3a3477c989186572dc3fa937552278d2f..05f727e162c24f0a2b7513359b1ccd3f5ad0087a 100644 (file)
@@ -21,14 +21,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define CONTENT_SAO_HEADER
 
 #include "serverobject.h"
-#include "content_object.h"
 #include "itemgroup.h"
 #include "player.h"
 #include "object_properties.h"
 
-ServerActiveObject* createItemSAO(ServerEnvironment *env, v3f pos,
-                                  const std::string &itemstring);
-
 /*
        LuaEntitySAO needs some internals exposed.
 */
@@ -39,9 +35,9 @@ public:
        LuaEntitySAO(ServerEnvironment *env, v3f pos,
                     const std::string &name, const std::string &state);
        ~LuaEntitySAO();
-       u8 getType() const
+       ActiveObjectType getType() const
        { return ACTIVEOBJECT_TYPE_LUAENTITY; }
-       u8 getSendType() const
+       ActiveObjectType getSendType() const
        { return ACTIVEOBJECT_TYPE_GENERIC; }
        virtual void addedToEnvironment(u32 dtime_s);
        static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
@@ -158,9 +154,9 @@ public:
        PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
                        const std::set<std::string> &privs, bool is_singleplayer);
        ~PlayerSAO();
-       u8 getType() const
+       ActiveObjectType getType() const
        { return ACTIVEOBJECT_TYPE_PLAYER; }
-       u8 getSendType() const
+       ActiveObjectType getSendType() const
        { return ACTIVEOBJECT_TYPE_GENERIC; }
        std::string getDescription();
 
index 2445803d750495859faa35cc8a8dac04e40da725..505faa09d0353e1445eae94116d22d3ba5c859a7 100644 (file)
@@ -406,19 +406,6 @@ int ModApiEnvMod::l_add_item(lua_State *L)
                script_error(L);
        lua_remove(L, errorhandler); // Remove error handler
        return 1;
-       /*lua_pushvalue(L, 1);
-       lua_pushstring(L, "__builtin:item");
-       lua_pushstring(L, item.getItemString().c_str());
-       return l_add_entity(L);*/
-       /*// Do it
-       ServerActiveObject *obj = createItemSAO(env, pos, item.getItemString());
-       int objectid = env->addActiveObject(obj);
-       // If failed to add, return nothing (reads as nil)
-       if(objectid == 0)
-               return 0;
-       // Return ObjectRef
-       objectrefGetOrCreate(L, obj);
-       return 1;*/
 }
 
 // get_player_by_name(name)
index 4286840feaa7490eb27524f5484746e434c6917d..e048d072f8a6d3d203257915a8afa83826369dd0 100644 (file)
@@ -26,7 +26,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "log.h"
 #include "tool.h"
 #include "serverobject.h"
-#include "content_object.h"
 #include "content_sao.h"
 #include "server.h"
 #include "hud.h"
index 8e80225e4f8b7f60a937588abef358c90a13dd93..96485d7a38123184aa72b5346499dcb2ed2a1269 100644 (file)
@@ -58,7 +58,7 @@ public:
        ServerActiveObject(ServerEnvironment *env, v3f pos);
        virtual ~ServerActiveObject();
 
-       virtual u8 getSendType() const
+       virtual ActiveObjectType getSendType() const
        { return getType(); }
 
        // Called after id has been set and has been inserted in environment