X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fcontent_cao.h;h=575aad24145f9adac48a4c1432f1bf96087417bf;hb=0a83c42dfdf390cef75758096a481cdf8e2c828b;hp=69e2e54a264502fef563f2a48de2e3065d750e20;hpb=9b551d5cbcaf71a8c39bbf7e886290649aed4799;p=minetest.git diff --git a/src/content_cao.h b/src/content_cao.h index 69e2e54a2..575aad241 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -17,15 +17,18 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef CONTENT_CAO_HEADER -#define CONTENT_CAO_HEADER +#pragma once #include #include "irrlichttypes_extrabloated.h" -#include "content_object.h" #include "clientobject.h" #include "object_properties.h" #include "itemgroup.h" +#include "constants.h" + +class Camera; +class Client; +struct Nametag; /* SmoothTranslator @@ -36,115 +39,117 @@ struct SmoothTranslator v3f vect_old; v3f vect_show; v3f vect_aim; - f32 anim_counter; - f32 anim_time; - f32 anim_time_counter; - bool aim_is_end; + f32 anim_counter = 0; + f32 anim_time = 0; + f32 anim_time_counter = 0; + bool aim_is_end = true; - SmoothTranslator(); + SmoothTranslator() = default; void init(v3f vect); - void sharpen(); - void update(v3f vect_new, bool is_end_position=false, float update_interval=-1); void translate(f32 dtime); - - bool is_moving(); }; class GenericCAO : public ClientActiveObject { private: // Only set at initialization - std::string m_name; - bool m_is_player; - bool m_is_local_player; - int m_id; + std::string m_name = ""; + bool m_is_player = false; + bool m_is_local_player = false; // Property-ish things ObjectProperties m_prop; // - scene::ISceneManager *m_smgr; - IrrlichtDevice *m_irr; - core::aabbox3d m_selection_box; - scene::IMeshSceneNode *m_meshnode; - scene::IAnimatedMeshSceneNode *m_animated_meshnode; - WieldMeshSceneNode *m_wield_meshnode; - scene::IBillboardSceneNode *m_spritenode; - scene::ITextSceneNode* m_textnode; - v3f m_position; + scene::ISceneManager *m_smgr = nullptr; + Client *m_client = nullptr; + aabb3f m_selection_box = aabb3f(-BS/3.,-BS/3.,-BS/3., BS/3.,BS/3.,BS/3.); + scene::IMeshSceneNode *m_meshnode = nullptr; + scene::IAnimatedMeshSceneNode *m_animated_meshnode = nullptr; + WieldMeshSceneNode *m_wield_meshnode = nullptr; + scene::IBillboardSceneNode *m_spritenode = nullptr; + Nametag *m_nametag = nullptr; + v3f m_position = v3f(0.0f, 10.0f * BS, 0); v3f m_velocity; v3f m_acceleration; - float m_yaw; - s16 m_hp; + float m_yaw = 0.0f; + s16 m_hp = 1; SmoothTranslator pos_translator; // Spritesheet/animation stuff - v2f m_tx_size; + v2f m_tx_size = v2f(1,1); v2s16 m_tx_basepos; - bool m_initial_tx_basepos_set; - bool m_tx_select_horiz_by_yawpitch; + bool m_initial_tx_basepos_set = false; + bool m_tx_select_horiz_by_yawpitch = false; v2s32 m_animation_range; - int m_animation_speed; - int m_animation_blend; - std::map > m_bone_position; // stores position and rotation for each bone name - std::string m_attachment_bone; + float m_animation_speed = 15.0f; + float m_animation_blend = 0.0f; + bool m_animation_loop = true; + // stores position and rotation for each bone name + std::unordered_map> m_bone_position; + std::string m_attachment_bone = ""; v3f m_attachment_position; v3f m_attachment_rotation; - bool m_attached_to_local; - int m_anim_frame; - int m_anim_num_frames; - float m_anim_framelength; - float m_anim_timer; + bool m_attached_to_local = false; + int m_anim_frame = 0; + int m_anim_num_frames = 1; + float m_anim_framelength = 0.2f; + float m_anim_timer = 0.0f; ItemGroupList m_armor_groups; - float m_reset_textures_timer; - bool m_visuals_expired; - float m_step_distance_counter; - u8 m_last_light; - bool m_is_visible; + float m_reset_textures_timer = -1.0f; + // stores texture modifier before punch update + std::string m_previous_texture_modifier = ""; + // last applied texture modifier + std::string m_current_texture_modifier = ""; + bool m_visuals_expired = false; + float m_step_distance_counter = 0.0f; + u8 m_last_light = 255; + bool m_is_visible = false; + s8 m_glow = 0; std::vector m_children; public: - GenericCAO(IGameDef *gamedef, ClientEnvironment *env); + GenericCAO(Client *client, ClientEnvironment *env); ~GenericCAO(); - static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env) + static ClientActiveObject* create(Client *client, ClientEnvironment *env) { - return new GenericCAO(gamedef, env); + return new GenericCAO(client, env); } - inline u8 getType() const + inline ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_GENERIC; } void initialize(const std::string &data); - ClientActiveObject *getParent(); + void processInitData(const std::string &data); - bool getCollisionBox(aabb3f *toset); + ClientActiveObject *getParent() const; - bool collideWithObjects(); + bool getCollisionBox(aabb3f *toset) const; - core::aabbox3d* getSelectionBox(); + bool collideWithObjects() const; + + virtual bool getSelectionBox(aabb3f *toset) const; v3f getPosition(); + inline float getYaw() const + { + return m_yaw; + } scene::ISceneNode *getSceneNode(); - scene::IMeshSceneNode *getMeshSceneNode(); - scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode(); - WieldMeshSceneNode *getWieldMeshSceneNode(); - - scene::IBillboardSceneNode *getSpriteSceneNode(); - - inline bool isPlayer() const + inline f32 getStepHeight() const { - return m_is_player; + return m_prop.stepheight; } inline bool isLocalPlayer() const @@ -162,12 +167,13 @@ class GenericCAO : public ClientActiveObject m_is_visible = toset; } + void setChildrenVisible(bool toset); + void setAttachments(); void removeFromScene(bool permanent); - void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, - IrrlichtDevice *irr); + void addToScene(ITextureSource *tsrc); inline void expireVisuals() { @@ -176,6 +182,8 @@ class GenericCAO : public ClientActiveObject void updateLight(u8 light_at_pos); + void updateLightNoCheck(u8 light_at_pos); + v3s16 getLightPosition(); void updateNodePos(); @@ -184,10 +192,14 @@ class GenericCAO : public ClientActiveObject void updateTexturePos(); - void updateTextures(const std::string &mod); + // std::string copy is mandatory as mod can be a class member and there is a swap + // on those class members + void updateTextures(std::string mod); void updateAnimation(); + void updateAnimationSpeed(); + void updateBonePosition(); void updateAttachments(); @@ -198,7 +210,9 @@ class GenericCAO : public ClientActiveObject float time_from_last_punch=1000000); std::string debugInfoText(); -}; - -#endif + std::string infoText() + { + return m_prop.infotext; + } +};