From f8c3743991a6897c7133bf35dc2699b8b5f9df7c Mon Sep 17 00:00:00 2001 From: Kahrl Date: Mon, 19 Mar 2012 03:04:16 +0100 Subject: added PlayerSAO and RemotePlayer, removed ServerRemotePlayer --- src/content_sao.h | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 100 insertions(+), 4 deletions(-) (limited to 'src/content_sao.h') diff --git a/src/content_sao.h b/src/content_sao.h index 53e701d8c..9ceb6ed6a 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -23,14 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "serverobject.h" #include "content_object.h" #include "itemgroup.h" +#include "player.h" ServerActiveObject* createItemSAO(ServerEnvironment *env, v3f pos, const std::string itemstring); /* - LuaEntitySAO - - This is the only SAO that needs to have a bunch of it's internals exposed. + LuaEntitySAO needs some internals exposed. */ struct LuaEntityProperties; @@ -59,7 +58,7 @@ public: float getMinimumSavedMovement(); std::string getDescription(); void setHP(s16 hp); - s16 getHP(); + s16 getHP() const; /* LuaEntitySAO-specific */ void setVelocity(v3f velocity); v3f getVelocity(); @@ -94,5 +93,102 @@ private: bool m_armor_groups_sent; }; +/* + PlayerSAO needs some internals exposed. +*/ + +class PlayerSAO : public ServerActiveObject +{ +public: + PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_); + ~PlayerSAO(); + u8 getType() const + {return ACTIVEOBJECT_TYPE_PLAYER;} + std::string getDescription(); + + /* + Active object <-> environment interface + */ + + void addedToEnvironment(); + void removingFromEnvironment(); + bool isStaticAllowed() const; + bool unlimitedTransferDistance() const; + std::string getClientInitializationData(); + std::string getStaticData(); + void step(float dtime, bool send_recommended); + void setBasePosition(const v3f &position); + void setPos(v3f pos); + void moveTo(v3f pos, bool continuous); + + /* + Interaction interface + */ + + int punch(v3f dir, + const ToolCapabilities *toolcap, + ServerActiveObject *puncher, + float time_from_last_punch); + void rightClick(ServerActiveObject *clicker); + s16 getHP() const; + void setHP(s16 hp); + + /* + Inventory interface + */ + + Inventory* getInventory(); + const Inventory* getInventory() const; + InventoryLocation getInventoryLocation() const; + void setInventoryModified(); + std::string getWieldList() const; + int getWieldIndex() const; + void setWieldIndex(int i); + + /* + PlayerSAO-specific + */ + + void disconnected(); + + void createCreativeInventory(); + + Player* getPlayer() + { + return m_player; + } + u16 getPeerID() const + { + return m_peer_id; + } + v3f getLastGoodPosition() const + { + return m_last_good_position; + } + float resetTimeFromLastPunch() + { + float r = m_time_from_last_punch; + m_time_from_last_punch = 0.0; + return r; + } + +private: + Player *m_player; + u16 m_peer_id; + Inventory *m_inventory; + v3f m_last_good_position; + float m_last_good_position_age; + float m_time_from_last_punch; + int m_wield_index; + bool m_position_not_sent; + +public: + // Some flags used by Server + bool m_teleported; + bool m_inventory_not_sent; + bool m_hp_not_sent; + bool m_wielded_item_not_sent; +}; + #endif -- cgit v1.2.3