X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fcontent_cao.h;h=3231a190f0a665cf5cfd1b60e1a0181111d7e1f0;hb=526eedf98e45fc3b0ad768ecb1d0cbc1968def2f;hp=b984be1361cb79d98fbf016659058cec538f65dd;hpb=112b85d0fb97b896da977a3915dab73015681896;p=minetest.git diff --git a/src/content_cao.h b/src/content_cao.h index b984be136..3231a190f 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -23,6 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "clientobject.h" #include "content_object.h" #include "utility.h" // For IntervalLimiter +class Settings; +#include "MyBillboardSceneNode.h" /* SmoothTranslator @@ -31,19 +33,19 @@ with this program; if not, write to the Free Software Foundation, Inc., struct SmoothTranslator { v3f vect_old; + v3f vect_show; + v3f vect_aim; f32 anim_counter; f32 anim_time; f32 anim_time_counter; - v3f vect_show; - v3f vect_aim; SmoothTranslator(): vect_old(0,0,0), + vect_show(0,0,0), + vect_aim(0,0,0), anim_counter(0), anim_time(0), - anim_time_counter(0), - vect_show(0,0,0), - vect_aim(0,0,0) + anim_time_counter(0) {} void init(v3f vect) @@ -51,6 +53,14 @@ struct SmoothTranslator vect_old = vect; vect_show = vect; vect_aim = vect; + anim_counter = 0; + anim_time = 0; + anim_time_counter = 0; + } + + void sharpen() + { + init(vect_show); } void update(v3f vect_new) @@ -74,11 +84,16 @@ struct SmoothTranslator if(anim_time > 0.001) moveratio = anim_time_counter / anim_time; // Move a bit less than should, to avoid oscillation - moveratio = moveratio * 0.8; + moveratio = moveratio * 0.5; if(moveratio > 1.5) moveratio = 1.5; vect_show = vect_old + vect_move * moveratio; } + + bool is_moving() + { + return ((anim_time_counter / anim_time) < 1.4); + } }; @@ -187,7 +202,8 @@ class RatCAO : public ClientActiveObject core::aabbox3d* getSelectionBox() {return &m_selection_box;} v3f getPosition() - {return m_position;} + {return pos_translator.vect_show;} + //{return m_position;} private: core::aabbox3d m_selection_box; @@ -232,6 +248,9 @@ class Oerkki1CAO : public ClientActiveObject {return pos_translator.vect_show;} //{return m_position;} + // If returns true, punch will not be sent to the server + bool directReportPunch(const std::string &toolname, v3f dir); + private: IntervalLimiter m_attack_interval; core::aabbox3d m_selection_box; @@ -285,6 +304,124 @@ class FireflyCAO : public ClientActiveObject SmoothTranslator pos_translator; }; +/* + MobV2CAO +*/ + +class MobV2CAO : public ClientActiveObject +{ +public: + MobV2CAO(); + virtual ~MobV2CAO(); + + u8 getType() const + { + return ACTIVEOBJECT_TYPE_MOBV2; + } + + static ClientActiveObject* create(); + + void addToScene(scene::ISceneManager *smgr); + void removeFromScene(); + void updateLight(u8 light_at_pos); + v3s16 getLightPosition(); + void updateNodePos(); + + void step(float dtime, ClientEnvironment *env); + + void processMessage(const std::string &data); + + void initialize(const std::string &data); + + core::aabbox3d* getSelectionBox() + {return &m_selection_box;} + v3f getPosition() + {return pos_translator.vect_show;} + //{return m_position;} + bool doShowSelectionBox(){return false;} + + // If returns true, punch will not be sent to the server + bool directReportPunch(const std::string &toolname, v3f dir); + +private: + void setLooks(const std::string &looks); + + IntervalLimiter m_attack_interval; + core::aabbox3d m_selection_box; + scene::MyBillboardSceneNode *m_node; + v3f m_position; + std::string m_texture_name; + float m_yaw; + SmoothTranslator pos_translator; + bool m_walking; + float m_walking_unset_timer; + float m_walk_timer; + int m_walk_frame; + float m_damage_visual_timer; + u8 m_last_light; + bool m_shooting; + float m_shooting_unset_timer; + v2f m_sprite_size; + float m_sprite_y; + bool m_bright_shooting; + std::string m_sprite_type; + int m_simple_anim_frames; + float m_simple_anim_frametime; + bool m_lock_full_brightness; + int m_player_hit_damage; + float m_player_hit_distance; + float m_player_hit_interval; + float m_player_hit_timer; + + Settings *m_properties; +}; + +/* + LuaEntityCAO +*/ + +struct LuaEntityProperties; + +class LuaEntityCAO : public ClientActiveObject +{ +public: + LuaEntityCAO(); + virtual ~LuaEntityCAO(); + + u8 getType() const + { + return ACTIVEOBJECT_TYPE_LUAENTITY; + } + + static ClientActiveObject* create(); + + void addToScene(scene::ISceneManager *smgr); + void removeFromScene(); + void updateLight(u8 light_at_pos); + v3s16 getLightPosition(); + void updateNodePos(); + + void step(float dtime, ClientEnvironment *env); + + void processMessage(const std::string &data); + + void initialize(const std::string &data); + + core::aabbox3d* getSelectionBox() + {return &m_selection_box;} + v3f getPosition() + {return pos_translator.vect_show;} + +private: + core::aabbox3d m_selection_box; + scene::IMeshSceneNode *m_meshnode; + scene::MyBillboardSceneNode *m_spritenode; + v3f m_position; + float m_yaw; + struct LuaEntityProperties *m_prop; + SmoothTranslator pos_translator; +}; + #endif