ServerRemotePlayer implements ServerActiveObject

master
Perttu Ahola 2011-11-12 15:41:29 +02:00
parent ddaff2d653
commit 0b97ad8384
5 changed files with 39 additions and 34 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -179,12 +179,24 @@ 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:
};

View File

@ -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

View File

@ -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.