]> git.lizzy.rs Git - minetest.git/blobdiff - src/content_cao.h
Fix naming conventions of noise userdata
[minetest.git] / src / content_cao.h
index 69e2e54a264502fef563f2a48de2e3065d750e20..575aad24145f9adac48a4c1432f1bf96087417bf 100644 (file)
@@ -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 <map>
 #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<f32> 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<std::string, core::vector2d<v3f> > 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<std::string, core::vector2d<v3f>> 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<u16> 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<f32>* 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;
+       }
+};