]> git.lizzy.rs Git - minetest.git/blobdiff - src/content_cao.h
Conf.example generation: Remove quotation marks from noise flags (#7844)
[minetest.git] / src / content_cao.h
index 3be75352992eb8754a00770cb21ff912423f2882..9e688d78d99c337145e16281b4ae370cfcc58c5b 100644 (file)
@@ -17,14 +17,14 @@ 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 "clientobject.h"
 #include "object_properties.h"
 #include "itemgroup.h"
+#include "constants.h"
 
 class Camera;
 class Client;
@@ -34,80 +34,86 @@ struct Nametag;
        SmoothTranslator
 */
 
+template<typename T>
 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;
+       T val_old;
+       T val_current;
+       T val_target;
+       f32 anim_time = 0;
+       f32 anim_time_counter = 0;
+       bool aim_is_end = true;
 
-       SmoothTranslator();
+       SmoothTranslator() = default;
 
-       void init(v3f vect);
+       void init(T current);
 
-       void sharpen();
-
-       void update(v3f vect_new, bool is_end_position=false, float update_interval=-1);
+       void update(T new_target, bool is_end_position = false,
+               float update_interval = -1);
 
        void translate(f32 dtime);
+};
 
-       bool is_moving();
+struct SmoothTranslatorWrapped : SmoothTranslator<f32>
+{
+       void translate(f32 dtime);
 };
 
 class GenericCAO : public ClientActiveObject
 {
 private:
        // Only set at initialization
-       std::string m_name;
-       bool m_is_player;
-       bool m_is_local_player;
+       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;
-       Client *m_client;
-       aabb3f m_selection_box;
-       scene::IMeshSceneNode *m_meshnode;
-       scene::IAnimatedMeshSceneNode *m_animated_meshnode;
-       WieldMeshSceneNode *m_wield_meshnode;
-       scene::IBillboardSceneNode *m_spritenode;
-       Nametag* m_nametag;
-       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;
-       SmoothTranslator pos_translator;
+       float m_yaw = 0.0f;
+       s16 m_hp = 1;
+       SmoothTranslator<v3f> pos_translator;
+       SmoothTranslatorWrapped yaw_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;
-       bool m_animation_loop;
-       UNORDERED_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;
-       std::string m_previous_texture_modifier; // stores texture modifier before punch update
-       std::string m_current_texture_modifier;  // last applied texture modifier
-       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;
 
@@ -125,18 +131,19 @@ class GenericCAO : public ClientActiveObject
        {
                return ACTIVEOBJECT_TYPE_GENERIC;
        }
-
+       inline const ItemGroupList &getGroups() const
+       {
+               return m_armor_groups;
+       }
        void initialize(const std::string &data);
 
        void processInitData(const std::string &data);
 
-       ClientActiveObject *getParent();
-
        bool getCollisionBox(aabb3f *toset) const;
 
        bool collideWithObjects() const;
 
-       aabb3f *getSelectionBox();
+       virtual bool getSelectionBox(aabb3f *toset) const;
 
        v3f getPosition();
        inline float getYaw() const
@@ -144,19 +151,15 @@ class GenericCAO : public ClientActiveObject
                return m_yaw;
        }
 
-       scene::ISceneNode *getSceneNode();
+       const bool isImmortal();
 
-       scene::IMeshSceneNode *getMeshSceneNode();
+       scene::ISceneNode *getSceneNode();
 
        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
@@ -176,12 +179,13 @@ class GenericCAO : public ClientActiveObject
 
        void setChildrenVisible(bool toset);
 
+       ClientActiveObject *getParent() const;
+
        void setAttachments();
 
        void removeFromScene(bool permanent);
 
-       void addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
-                       IrrlichtDevice *irr);
+       void addToScene(ITextureSource *tsrc);
 
        inline void expireVisuals()
        {
@@ -201,11 +205,13 @@ class GenericCAO : public ClientActiveObject
        void updateTexturePos();
 
        // std::string copy is mandatory as mod can be a class member and there is a swap
-       // on those class members
+       // on those class members... do NOT pass by reference
        void updateTextures(std::string mod);
 
        void updateAnimation();
 
+       void updateAnimationSpeed();
+
        void updateBonePosition();
 
        void updateAttachments();
@@ -222,6 +228,3 @@ class GenericCAO : public ClientActiveObject
                return m_prop.infotext;
        }
 };
-
-
-#endif