summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-12 15:41:29 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:40 +0200
commit0b97ad838466ed44296a2c663b2dc034feb51f67 (patch)
tree85244222b72015bf9e68dd8f58f6e00a744d3e0b
parentddaff2d653efb1bebe04b9d316fe1bde26671b82 (diff)
downloadminetest-0b97ad838466ed44296a2c663b2dc034feb51f67.tar.gz
minetest-0b97ad838466ed44296a2c663b2dc034feb51f67.tar.bz2
minetest-0b97ad838466ed44296a2c663b2dc034feb51f67.zip
ServerRemotePlayer implements ServerActiveObject
-rw-r--r--src/content_object.h3
-rw-r--r--src/player.cpp26
-rw-r--r--src/player.h27
-rw-r--r--src/server.cpp10
-rw-r--r--src/serverobject.h7
5 files changed, 39 insertions, 34 deletions
diff --git a/src/content_object.h b/src/content_object.h
index f092b2789..af8636148 100644
--- a/src/content_object.h
+++ b/src/content_object.h
@@ -29,5 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define ACTIVEOBJECT_TYPE_LUAENTITY 7
+// Special type, not stored in active object lists
+#define ACTIVEOBJECT_TYPE_PLAYER 100
+
#endif
diff --git a/src/player.cpp b/src/player.cpp
index 732911828..396ce2494 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -144,16 +144,12 @@ void Player::deSerialize(std::istream &is)
args.parseConfigLine(line);
}
- //args.getS32("version");
+ //args.getS32("version"); // Version field value not used
std::string name = args.get("name");
updateName(name.c_str());
- /*std::string password = "";
- if(args.exists("password"))
- password = args.get("password");
- updatePassword(password.c_str());*/
- m_pitch = args.getFloat("pitch");
- m_yaw = args.getFloat("yaw");
- m_position = args.getV3F("position");
+ setPitch(args.getFloat("pitch"));
+ setYaw(args.getFloat("yaw"));
+ setPosition(args.getV3F("position"));
try{
craftresult_is_preview = args.getBool("craftresult_is_preview");
}catch(SettingNotFoundException &e){
@@ -164,20 +160,6 @@ void Player::deSerialize(std::istream &is)
}catch(SettingNotFoundException &e){
hp = 20;
}
- /*try{
- std::string sprivs = args.get("privs");
- if(sprivs == "all")
- {
- privs = PRIV_ALL;
- }
- else
- {
- std::istringstream ss(sprivs);
- ss>>privs;
- }
- }catch(SettingNotFoundException &e){
- privs = PRIV_DEFAULT;
- }*/
inventory.deSerialize(is);
}
diff --git a/src/player.h b/src/player.h
index a352c1bd9..c3be07894 100644
--- a/src/player.h
+++ b/src/player.h
@@ -179,11 +179,23 @@ public:
Player on the server
*/
-class ServerRemotePlayer : public Player
+#include "serverobject.h"
+#include "content_object.h" // Object type IDs
+
+class ServerRemotePlayer : public Player, public ServerActiveObject
{
public:
- ServerRemotePlayer()
+ ServerRemotePlayer():
+ ServerActiveObject(NULL, v3f(0,0,0))
+ {
+ }
+ ServerRemotePlayer(ServerEnvironment *env, v3f pos_, u16 peer_id_,
+ const char *name_):
+ ServerActiveObject(env, pos_)
{
+ setPosition(pos_);
+ peer_id = peer_id_;
+ updateName(name_);
}
virtual ~ServerRemotePlayer()
{
@@ -198,6 +210,17 @@ public:
{
}
+ virtual void setPosition(const v3f &position)
+ {
+ Player::setPosition(position);
+ ServerActiveObject::setBasePosition(position);
+ }
+
+ /*
+ ServerActiveObject interface
+ */
+ u8 getType() const
+ {return ACTIVEOBJECT_TYPE_PLAYER;}
private:
};
diff --git a/src/server.cpp b/src/server.cpp
index fd9703bd5..330ce21c2 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -4279,11 +4279,7 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id
Create a new player
*/
{
- player = new ServerRemotePlayer();
- //player->peer_id = c.peer_id;
- //player->peer_id = PEER_ID_INEXISTENT;
- player->peer_id = peer_id;
- player->updateName(name);
+ // Add authentication stuff
m_authmanager.add(name);
m_authmanager.setPassword(name, password);
m_authmanager.setPrivs(name,
@@ -4294,11 +4290,11 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id
*/
infostream<<"Server: Finding spawn place for player \""
- <<player->getName()<<"\""<<std::endl;
+ <<name<<"\""<<std::endl;
v3f pos = findSpawnPos(m_env->getServerMap());
- player->setPosition(pos);
+ player = new ServerRemotePlayer(m_env, pos, peer_id, name);
/*
Add player to environment
diff --git a/src/serverobject.h b/src/serverobject.h
index 6d616c75e..66118cca0 100644
--- a/src/serverobject.h
+++ b/src/serverobject.h
@@ -72,13 +72,14 @@ public:
Some more dynamic interface
*/
virtual void setPos(v3f pos)
- { setBasePosition(pos); }
+ { setBasePosition(pos); }
// continuous: if true, object does not stop immediately at pos
virtual void moveTo(v3f pos, bool continuous)
- { setBasePosition(pos); }
+ { setBasePosition(pos); }
// If object has moved less than this and data has not changed,
// saving to disk may be omitted
- virtual float getMinimumSavedMovement(){ return 2.0*BS; }
+ virtual float getMinimumSavedMovement()
+ { return 2.0*BS; }
/*
Step object in time.