X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcontent_sao.h;h=c5e1471bc2c4666fa7d172f913c1e6145392f438;hb=013921782b1a8506f4aee1d1be0312002eddd575;hp=e5b1223d466c68c54bf221d6ceff5c1beb2dde85;hpb=84684e53edcf319f1aebd69b003ae016173dc485;p=oweals%2Fminetest.git diff --git a/src/content_sao.h b/src/content_sao.h index e5b1223d4..c5e1471bc 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -26,10 +26,10 @@ with this program; if not, write to the Free Software Foundation, Inc., class TestSAO : public ServerActiveObject { public: - TestSAO(ServerEnvironment *env, u16 id, v3f pos); + TestSAO(ServerEnvironment *env, v3f pos); u8 getType() const {return ACTIVEOBJECT_TYPE_TEST;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, const std::string &data); void step(float dtime, bool send_recommended); private: @@ -40,17 +40,19 @@ private: class ItemSAO : public ServerActiveObject { public: - ItemSAO(ServerEnvironment *env, u16 id, v3f pos, + ItemSAO(ServerEnvironment *env, v3f pos, const std::string inventorystring); u8 getType() const {return ACTIVEOBJECT_TYPE_ITEM;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, const std::string &data); void step(float dtime, bool send_recommended); std::string getClientInitializationData(); std::string getStaticData(); InventoryItem* createInventoryItem(); - InventoryItem* createPickedUpItem(){return createInventoryItem();} + void punch(ServerActiveObject *puncher); + void rightClick(ServerActiveObject *clicker); + float getMinimumSavedMovement(){ return 0.1*BS; } private: std::string m_inventorystring; v3f m_speed_f; @@ -61,15 +63,15 @@ private: class RatSAO : public ServerActiveObject { public: - RatSAO(ServerEnvironment *env, u16 id, v3f pos); + RatSAO(ServerEnvironment *env, v3f pos); u8 getType() const {return ACTIVEOBJECT_TYPE_RAT;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, const std::string &data); void step(float dtime, bool send_recommended); std::string getClientInitializationData(); std::string getStaticData(); - InventoryItem* createPickedUpItem(); + void punch(ServerActiveObject *puncher); private: bool m_is_active; IntervalLimiter m_inactive_interval; @@ -86,16 +88,17 @@ private: class Oerkki1SAO : public ServerActiveObject { public: - Oerkki1SAO(ServerEnvironment *env, u16 id, v3f pos); + Oerkki1SAO(ServerEnvironment *env, v3f pos); u8 getType() const {return ACTIVEOBJECT_TYPE_OERKKI1;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, const std::string &data); void step(float dtime, bool send_recommended); std::string getClientInitializationData(); std::string getStaticData(); InventoryItem* createPickedUpItem(){return NULL;} - u16 punch(const std::string &toolname, v3f dir); + void punch(ServerActiveObject *puncher); + bool isPeaceful(){return false;} private: void doDamage(u16 d); @@ -116,10 +119,10 @@ private: class FireflySAO : public ServerActiveObject { public: - FireflySAO(ServerEnvironment *env, u16 id, v3f pos); + FireflySAO(ServerEnvironment *env, v3f pos); u8 getType() const {return ACTIVEOBJECT_TYPE_FIREFLY;} - static ServerActiveObject* create(ServerEnvironment *env, u16 id, v3f pos, + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, const std::string &data); void step(float dtime, bool send_recommended); std::string getClientInitializationData(); @@ -138,5 +141,105 @@ private: bool m_touching_ground; }; +class Settings; + +class MobV2SAO : public ServerActiveObject +{ +public: + MobV2SAO(ServerEnvironment *env, v3f pos, + Settings *init_properties); + virtual ~MobV2SAO(); + u8 getType() const + {return ACTIVEOBJECT_TYPE_MOBV2;} + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, + const std::string &data); + std::string getStaticData(); + std::string getClientInitializationData(); + void step(float dtime, bool send_recommended); + InventoryItem* createPickedUpItem(){return NULL;} + void punch(ServerActiveObject *puncher); + bool isPeaceful(); +private: + void sendPosition(); + void setPropertyDefaults(); + void readProperties(); + void updateProperties(); + void doDamage(u16 d); + + std::string m_move_type; + v3f m_speed; + v3f m_last_sent_position; + v3f m_oldpos; + float m_yaw; + float m_counter1; + float m_counter2; + float m_age; + bool m_touching_ground; + int m_hp; + bool m_walk_around; + float m_walk_around_timer; + bool m_next_pos_exists; + v3s16 m_next_pos_i; + float m_shoot_reload_timer; + bool m_shooting; + float m_shooting_timer; + float m_die_age; + v2f m_size; + bool m_falling; + float m_disturb_timer; + std::string m_disturbing_player; + float m_random_disturb_timer; + float m_shoot_y; + + Settings *m_properties; +}; + +struct LuaEntityProperties; + +class LuaEntitySAO : public ServerActiveObject +{ +public: + LuaEntitySAO(ServerEnvironment *env, v3f pos, + const std::string &name, const std::string &state); + ~LuaEntitySAO(); + u8 getType() const + {return ACTIVEOBJECT_TYPE_LUAENTITY;} + virtual void addedToEnvironment(); + static ServerActiveObject* create(ServerEnvironment *env, v3f pos, + const std::string &data); + void step(float dtime, bool send_recommended); + std::string getClientInitializationData(); + std::string getStaticData(); + InventoryItem* createPickedUpItem(); + void punch(ServerActiveObject *puncher); + void rightClick(ServerActiveObject *clicker); + void setPos(v3f pos); + void moveTo(v3f pos, bool continuous); + float getMinimumSavedMovement(); + /* LuaEntitySAO-specific */ + void setVelocity(v3f velocity); + void setAcceleration(v3f acceleration); + v3f getAcceleration(); + void setTextureMod(const std::string &mod); + void setSprite(v2s16 p, int num_frames, float framelength, + bool select_horiz_by_yawpitch); +private: + void sendPosition(bool do_interpolate, bool is_movement_end); + + std::string m_init_name; + std::string m_init_state; + bool m_registered; + struct LuaEntityProperties *m_prop; + + v3f m_velocity; + v3f m_acceleration; + float m_yaw; + float m_last_sent_yaw; + v3f m_last_sent_position; + v3f m_last_sent_velocity; + float m_last_sent_position_timer; + float m_last_sent_move_precision; +}; + #endif