X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fserverobject.h;h=01f199a4b59f406ea11f9a60e35baff35e10a3bc;hb=36af9bb027ed6846227282587e3414ea3d30f6c5;hp=2889d0c3940e6668fcb809070736f28382698c0a;hpb=b0b5c432542ea5f9292f428bb59e2670c0d7c53d;p=dragonfireclient.git diff --git a/src/serverobject.h b/src/serverobject.h index 2889d0c39..01f199a4b 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -42,6 +42,7 @@ Some planning class ServerEnvironment; class InventoryItem; +class Player; class ServerActiveObject : public ActiveObject { @@ -78,8 +79,7 @@ class ServerActiveObject : public ActiveObject same time so that the data can be combined in a single packet. */ - virtual void step(float dtime, Queue &messages, - bool send_recommended){} + virtual void step(float dtime, bool send_recommended){} /* The return value of this is passed to the client-side object @@ -100,8 +100,24 @@ class ServerActiveObject : public ActiveObject */ virtual InventoryItem* createPickedUpItem(){return NULL;} - // Number of players which know about this object + /* + If the object doesn't return an item, this will be called. + Return value is tool wear. + */ + virtual u16 punch(const std::string &toolname, v3f dir) + {return 0;} + + /* + */ + virtual void rightClick(Player *player){} + + /* + Number of players which know about this object. Object won't be + deleted until this is 0 to keep the id preserved for the right + object. + */ u16 m_known_by_count; + /* - Whether this object is to be removed when nobody knows about it anymore. @@ -113,6 +129,16 @@ class ServerActiveObject : public ActiveObject */ bool m_removed; + /* + This is set to true when a block should be removed from the active + object list but couldn't be removed because the id has to be + reserved for some client. + + The environment checks this periodically. If this is true and also + m_known_by_count is true, + */ + bool m_pending_deactivation; + /* Whether the object's static data has been stored to a block */ @@ -123,6 +149,11 @@ class ServerActiveObject : public ActiveObject */ v3s16 m_static_block; + /* + Queue of messages to be sent to the client + */ + Queue m_messages_out; + protected: // Used for creating objects based on type typedef ServerActiveObject* (*Factory) @@ -138,68 +169,5 @@ class ServerActiveObject : public ActiveObject static core::map m_types; }; -class TestSAO : public ServerActiveObject -{ -public: - TestSAO(ServerEnvironment *env, u16 id, v3f pos); - u8 getType() const - {return ACTIVEOBJECT_TYPE_TEST;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, - const std::string &data); - void step(float dtime, Queue &messages, - bool send_recommended); -private: - float m_timer1; - float m_age; -}; - -class ItemSAO : public ServerActiveObject -{ -public: - ItemSAO(ServerEnvironment *env, u16 id, v3f pos, - const std::string inventorystring); - u8 getType() const - {return ACTIVEOBJECT_TYPE_ITEM;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, - const std::string &data); - void step(float dtime, Queue &messages, - bool send_recommended); - std::string getClientInitializationData(); - std::string getStaticData(); - InventoryItem* createInventoryItem(); - InventoryItem* createPickedUpItem(){return createInventoryItem();} -private: - std::string m_inventorystring; - v3f m_speed_f; - v3f m_last_sent_position; - IntervalLimiter m_move_interval; -}; - -class RatSAO : public ServerActiveObject -{ -public: - RatSAO(ServerEnvironment *env, u16 id, v3f pos); - u8 getType() const - {return ACTIVEOBJECT_TYPE_RAT;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, - const std::string &data); - void step(float dtime, Queue &messages, - bool send_recommended); - std::string getClientInitializationData(); - std::string getStaticData(); - InventoryItem* createPickedUpItem(); -private: - bool m_is_active; - IntervalLimiter m_inactive_interval; - v3f m_speed_f; - v3f m_oldpos; - v3f m_last_sent_position; - float m_yaw; - float m_counter1; - float m_counter2; - float m_age; - bool m_touching_ground; -}; - #endif