X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fserverobject.h;h=71199475e4936ca28a2ae11a71b75cfa8a0cfd8d;hb=c1b164cbcb233cbe5159450b7d3b58474871752b;hp=5e3afb57b0d08976baa8ba3954e638c45281904d;hpb=08bbf9687742c0b159cc1d963ab470796f74c6c8;p=dragonfireclient.git diff --git a/src/serverobject.h b/src/serverobject.h index 5e3afb57b..71199475e 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -46,6 +46,10 @@ class InventoryItem; class ServerActiveObject : public ActiveObject { public: + /* + NOTE: m_env can be NULL, but step() isn't called if it is. + Prototypes are used that way. + */ ServerActiveObject(ServerEnvironment *env, u16 id, v3f pos); virtual ~ServerActiveObject(); @@ -67,8 +71,15 @@ class ServerActiveObject : public ActiveObject /* Step object in time. Messages added to messages are sent to client over network. + + send_recommended: + True at around 5-10 times a second, same for all objects. + This is used to let objects send most of the data at the + same time so that the data can be combined in a single + packet. */ - virtual void step(float dtime, Queue &messages){} + virtual void step(float dtime, Queue &messages, + bool send_recommended){} /* The return value of this is passed to the client-side object @@ -83,6 +94,18 @@ class ServerActiveObject : public ActiveObject */ virtual std::string getStaticData(){return "";} + /* + Item that the player gets when this object is picked up. + If NULL, object cannot be picked up. + */ + virtual InventoryItem* createPickedUpItem(){return NULL;} + + /* + If the object doesn't return an item, this will be called. + Return value is tool wear. + */ + virtual u16 punch(const std::string &toolname){return 0;} + // Number of players which know about this object u16 m_known_by_count; /* @@ -129,7 +152,8 @@ class TestSAO : public ServerActiveObject {return ACTIVEOBJECT_TYPE_TEST;} static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, const std::string &data); - void step(float dtime, Queue &messages); + void step(float dtime, Queue &messages, + bool send_recommended); private: float m_timer1; float m_age; @@ -144,13 +168,71 @@ class ItemSAO : public ServerActiveObject {return ACTIVEOBJECT_TYPE_ITEM;} static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, const std::string &data); - void step(float dtime, Queue &messages); + 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; +}; + +class Oerkki1SAO : public ServerActiveObject +{ +public: + Oerkki1SAO(ServerEnvironment *env, u16 id, v3f pos); + u8 getType() const + {return ACTIVEOBJECT_TYPE_OERKKI1;} + 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(){return NULL;} + u16 punch(const std::string &toolname); +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; + u8 m_hp; }; #endif