aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2015-02-16 17:42:13 +0100
committerLoic Blot <loic.blot@unix-experience.fr>2015-02-17 09:09:50 +0100
commitf8d5af753617d502920556cff88f451ef670c210 (patch)
tree885cb89cd4671e9a55a4d5e7246801748f2f848b /src
parent98d80e2012ab4856b8b443ef498297e3d3eadbaa (diff)
downloadminetest-f8d5af753617d502920556cff88f451ef670c210.tar.gz
minetest-f8d5af753617d502920556cff88f451ef670c210.tar.bz2
minetest-f8d5af753617d502920556cff88f451ef670c210.zip
SAO work: ActiveObject types & SAO cleanup * Replace u8 types with ActiveObjectType. * Merge content_object.h into activeobject.h * Remove DummyLoadSAO, it's now unused. * Remove ItemSAO, it's also unused
Diffstat (limited to 'src')
-rw-r--r--src/activeobject.h13
-rw-r--r--src/content_cao.cpp5
-rw-r--r--src/content_cao.h3
-rw-r--r--src/content_object.h39
-rw-r--r--src/content_sao.cpp247
-rw-r--r--src/content_sao.h12
-rw-r--r--src/script/lua_api/l_env.cpp13
-rw-r--r--src/script/lua_api/l_object.cpp1
-rw-r--r--src/serverobject.h2
9 files changed, 20 insertions, 315 deletions
diff --git a/src/activeobject.h b/src/activeobject.h
index 46880fc7f..3dd1f98f5 100644
--- a/src/activeobject.h
+++ b/src/activeobject.h
@@ -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:
diff --git a/src/content_cao.cpp b/src/content_cao.cpp
index 6d41b2749..4994c8b20 100644
--- a/src/content_cao.cpp
+++ b/src/content_cao.cpp
@@ -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;
}
diff --git a/src/content_cao.h b/src/content_cao.h
index 69e2e54a2..31ccd04d4 100644
--- a/src/content_cao.h
+++ b/src/content_cao.h
@@ -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
index 65a829773..000000000
--- a/src/content_object.h
+++ /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
-
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index d4b3079ec..8cb8fa788 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -36,54 +36,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,
@@ -159,203 +111,6 @@ private:
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
*/
diff --git a/src/content_sao.h b/src/content_sao.h
index 38baeab3a..05f727e16 100644
--- a/src/content_sao.h
+++ b/src/content_sao.h
@@ -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();
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 2445803d7..505faa09d 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -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)
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 4286840fe..e048d072f 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -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"
diff --git a/src/serverobject.h b/src/serverobject.h
index 8e80225e4..96485d7a3 100644
--- a/src/serverobject.h
+++ b/src/serverobject.h
@@ -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