X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient%2Fcontent_cao.h;h=4bbba91342a5d7506fece1e878d56629f704ee72;hb=a049e8267fabd101cb5c6528b3270214cb0647f0;hp=2c2d1107760d26449489303385cd73dd4a22d921;hpb=81c2370c8b1a66a279a5ff450c78caf5dfef77bf;p=dragonfireclient.git diff --git a/src/client/content_cao.h b/src/client/content_cao.h index 2c2d11077..4bbba9134 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class Camera; class Client; struct Nametag; +struct MinimapMarker; /* SmoothTranslator @@ -84,6 +85,7 @@ class GenericCAO : public ClientActiveObject scene::IBillboardSceneNode *m_spritenode = nullptr; scene::IDummyTransformationSceneNode *m_matrixnode = nullptr; Nametag *m_nametag = nullptr; + MinimapMarker *m_marker = nullptr; v3f m_position = v3f(0.0f, 10.0f * BS, 0); v3f m_velocity; v3f m_acceleration; @@ -109,6 +111,7 @@ class GenericCAO : public ClientActiveObject v3f m_attachment_position; v3f m_attachment_rotation; bool m_attached_to_local = false; + bool m_force_visible = false; int m_anim_frame = 0; int m_anim_num_frames = 1; @@ -125,6 +128,12 @@ class GenericCAO : public ClientActiveObject u8 m_last_light = 255; bool m_is_visible = false; s8 m_glow = 0; + // Material + video::E_MATERIAL_TYPE m_material_type; + // Settings + bool m_enable_shaders = false; + + bool visualExpiryRequired(const ObjectProperties &newprops) const; public: GenericCAO(Client *client, ClientEnvironment *env); @@ -165,9 +174,11 @@ class GenericCAO : public ClientActiveObject const bool isImmortal(); - scene::ISceneNode *getSceneNode(); + inline const ObjectProperties &getProperties() const { return m_prop; } + + scene::ISceneNode *getSceneNode() const; - scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode(); + scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode() const; // m_matrixnode controls the position and rotation of the child node // for all scene nodes, as a workaround for an Irrlicht problem with @@ -182,10 +193,11 @@ class GenericCAO : public ClientActiveObject return m_matrixnode->getRelativeTransformationMatrix(); } - inline const core::matrix4 &getAbsolutePosRotMatrix() const + inline const core::matrix4 *getAbsolutePosRotMatrix() const { - assert(m_matrixnode); - return m_matrixnode->getAbsoluteTransformation(); + if (!m_matrixnode) + return nullptr; + return &m_matrixnode->getAbsoluteTransformation(); } inline f32 getStepHeight() const @@ -209,9 +221,10 @@ class GenericCAO : public ClientActiveObject } void setChildrenVisible(bool toset); - void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); + void setAttachment(int parent_id, const std::string &bone, v3f position, + v3f rotation, bool force_visible); void getAttachment(int *parent_id, std::string *bone, v3f *position, - v3f *rotation) const; + v3f *rotation, bool *force_visible) const; void clearChildAttachments(); void clearParentAttachment(); void addAttachmentChild(int child_id); @@ -223,18 +236,25 @@ class GenericCAO : public ClientActiveObject void removeFromScene(bool permanent); - void addToScene(ITextureSource *tsrc); + void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr); inline void expireVisuals() { m_visuals_expired = true; } - void updateLight(u8 light_at_pos); + void updateLight(u32 day_night_ratio); - void updateLightNoCheck(u8 light_at_pos); + void setNodeLight(u8 light); - v3s16 getLightPosition(); + /* Get light position(s). + * returns number of positions written into pos[], which must have space + * for at least 3 vectors. */ + u16 getLightPosition(v3s16 *pos); + + void updateNametag(); + + void updateMarker(); void updateNodePos(); @@ -263,4 +283,6 @@ class GenericCAO : public ClientActiveObject { return m_prop.infotext; } + + void updateMeshCulling(); };