Luanti 5.11.0-dev
 
Loading...
Searching...
No Matches
content_cao.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include "EMaterialTypes.h"
8#include "IDummyTransformationSceneNode.h"
9#include "irrlichttypes.h"
10
11#include "object_properties.h"
12#include "clientobject.h"
13#include "constants.h"
14#include "itemgroup.h"
15#include <cassert>
16#include <map>
17#include <memory>
18
19namespace irr::scene {
20 class IMeshSceneNode;
21 class IBillboardSceneNode;
22}
23
24class Camera;
25class Client;
26struct Nametag;
27struct MinimapMarker;
28
29/*
30 SmoothTranslator
31*/
32
33template<typename T>
35{
39 f32 anim_time = 0;
41 bool aim_is_end = true;
42
43 SmoothTranslator() = default;
44
45 void init(T current);
46
47 void update(T new_target, bool is_end_position = false,
48 float update_interval = -1);
49
50 void translate(f32 dtime);
51};
52
54{
55 void translate(f32 dtime);
56};
57
59{
60 void translate(f32 dtime);
61};
62
64{
65private:
66 // Only set at initialization
67 std::string m_name = "";
68 bool m_is_player = false;
69 bool m_is_local_player = false;
70 // Property-ish things
72 //
73 scene::ISceneManager *m_smgr = nullptr;
74 Client *m_client = nullptr;
75 aabb3f m_selection_box = aabb3f(-BS/3.,-BS/3.,-BS/3., BS/3.,BS/3.,BS/3.);
76 scene::IMeshSceneNode *m_meshnode = nullptr;
77 scene::IAnimatedMeshSceneNode *m_animated_meshnode = nullptr;
79 scene::IBillboardSceneNode *m_spritenode = nullptr;
80 scene::IDummyTransformationSceneNode *m_matrixnode = nullptr;
81 Nametag *m_nametag = nullptr;
83 v3f m_position = v3f(0.0f, 10.0f * BS, 0);
87 u16 m_hp = 1;
90 // Spritesheet/animation stuff
96 float m_animation_speed = 15.0f;
97 float m_animation_blend = 0.0f;
98 bool m_animation_loop = true;
99 // stores position and rotation for each bone name
101
103 std::unordered_set<object_t> m_attachment_child_ids;
104 std::string m_attachment_bone = "";
108 bool m_force_visible = false;
109
112 float m_anim_framelength = 0.2f;
113 float m_anim_timer = 0.0f;
116 // stores texture modifier before punch update
118 // last applied texture modifier
120 bool m_visuals_expired = false;
122 video::SColor m_last_light = video::SColor(0xFFFFFFFF);
123 bool m_is_visible = false;
124 // Material
125 video::E_MATERIAL_TYPE m_material_type;
127
128 bool visualExpiryRequired(const ObjectProperties &newprops) const;
129
130public:
132
133 ~GenericCAO();
134
135 static std::unique_ptr<ClientActiveObject> create(Client *client, ClientEnvironment *env)
136 {
137 return std::make_unique<GenericCAO>(client, env);
138 }
139
140 inline ActiveObjectType getType() const override
141 {
143 }
144 inline const ItemGroupList &getGroups() const
145 {
146 return m_armor_groups;
147 }
148 void initialize(const std::string &data) override;
149
150 void processInitData(const std::string &data);
151
152 bool getCollisionBox(aabb3f *toset) const override;
153
154 bool collideWithObjects() const override;
155
156 virtual bool getSelectionBox(aabb3f *toset) const override;
157
158 const v3f getPosition() const override final;
159
160 const v3f getVelocity() const override final { return m_velocity; }
161
162 inline const v3f &getRotation() const { return m_rotation; }
163
164 bool isImmortal() const;
165
166 inline const ObjectProperties &getProperties() const { return m_prop; }
167
168 inline const std::string &getName() const { return m_name; }
169
170 scene::ISceneNode *getSceneNode() const override;
171
172 scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode() const override;
173
174 // m_matrixnode controls the position and rotation of the child node
175 // for all scene nodes, as a workaround for an Irrlicht problem with
176 // rotations. The child node's position can't be used because it's
177 // rotated, and must remain as 0.
178 // Note that m_matrixnode.setPosition() shouldn't be called. Use
179 // m_matrixnode->getRelativeTransformationMatrix().setTranslation()
180 // instead (aka getPosRotMatrix().setTranslation()).
181 inline core::matrix4 &getPosRotMatrix()
182 {
183 assert(m_matrixnode);
184 return m_matrixnode->getRelativeTransformationMatrix();
185 }
186
187 inline const core::matrix4 *getAbsolutePosRotMatrix() const
188 {
189 if (!m_matrixnode)
190 return nullptr;
191 return &m_matrixnode->getAbsoluteTransformation();
192 }
193
194 inline f32 getStepHeight() const
195 {
196 return m_prop.stepheight;
197 }
198
199 inline bool isLocalPlayer() const override
200 {
201 return m_is_local_player;
202 }
203
204 inline bool isPlayer() const
205 {
206 return m_is_player;
207 }
208
209 inline bool isVisible() const
210 {
211 return m_is_visible;
212 }
213
214 inline void setVisible(bool toset)
215 {
216 m_is_visible = toset;
217 }
218
219 void setChildrenVisible(bool toset);
220 void setAttachment(object_t parent_id, const std::string &bone, v3f position,
221 v3f rotation, bool force_visible) override;
222 void getAttachment(object_t *parent_id, std::string *bone, v3f *position,
223 v3f *rotation, bool *force_visible) const override;
224 void clearChildAttachments() override;
225 void addAttachmentChild(object_t child_id) override;
226 void removeAttachmentChild(object_t child_id) override;
227 ClientActiveObject *getParent() const override;
228 const std::unordered_set<object_t> &getAttachmentChildIds() const override
229 { return m_attachment_child_ids; }
230 void updateAttachments() override;
231
232 void removeFromScene(bool permanent) override;
233
234 void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) override;
235
236 inline void expireVisuals()
237 {
238 m_visuals_expired = true;
239 }
240
241 void updateLight(u32 day_night_ratio) override;
242
243 void setNodeLight(const video::SColor &light);
244
245 /* Get light position(s).
246 * returns number of positions written into pos[], which must have space
247 * for at least 3 vectors. */
248 u16 getLightPosition(v3s16 *pos);
249
250 void updateNametag();
251
252 void updateMarker();
253
254 void updateNodePos();
255
256 void step(float dtime, ClientEnvironment *env) override;
257
258 void updateTexturePos();
259
260 // ffs this HAS TO BE a string copy! See #5739 if you think otherwise
261 // Reason: updateTextures(m_previous_texture_modifier);
262 void updateTextures(std::string mod);
263
264 void updateAnimation();
265
267
268 void updateBones(f32 dtime);
269
270 void processMessage(const std::string &data) override;
271
272 bool directReportPunch(v3f dir, const ItemStack *punchitem=NULL,
273 float time_from_last_punch=1000000) override;
274
275 std::string debugInfoText() override;
276
277 std::string infoText() override
278 {
279 return m_prop.infotext;
280 }
281
282 void updateMeshCulling();
283};
std::unordered_map< std::string, BoneOverride > BoneOverrideMap
Definition activeobject.h:134
ActiveObjectType
Definition activeobject.h:14
@ ACTIVEOBJECT_TYPE_GENERIC
Definition activeobject.h:28
static v2f dir(const v2f &pos_dist)
Definition camera.cpp:207
u16 object_t
Definition activeobject.h:143
Definition camera.h:68
Definition clientobject.h:30
Definition clientenvironment.h:54
Definition client.h:104
Definition content_cao.h:64
v2f m_tx_size
Definition content_cao.h:91
scene::IMeshSceneNode * m_meshnode
Definition content_cao.h:76
v3f m_attachment_rotation
Definition content_cao.h:106
f32 m_material_type_param
Definition content_cao.h:126
void processInitData(const std::string &data)
Definition content_cao.cpp:354
void updateBones(f32 dtime)
Definition content_cao.cpp:1438
int m_anim_frame
Definition content_cao.h:110
aabb3f m_selection_box
Definition content_cao.h:75
void updateAnimationSpeed()
Definition content_cao.cpp:1430
v3f m_acceleration
Definition content_cao.h:85
std::string m_current_texture_modifier
Definition content_cao.h:119
void updateNametag()
Definition content_cao.cpp:923
void processMessage(const std::string &data) override
Definition content_cao.cpp:1552
void initialize(const std::string &data) override
Definition content_cao.cpp:349
object_t m_attachment_parent_id
Definition content_cao.h:102
MinimapMarker * m_marker
Definition content_cao.h:82
void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) override
Definition content_cao.cpp:587
void clearChildAttachments() override
Definition content_cao.cpp:510
BoneOverrideMap m_bone_override
Definition content_cao.h:100
bool m_is_local_player
Definition content_cao.h:69
bool m_is_player
Definition content_cao.h:68
void addAttachmentChild(object_t child_id) override
Definition content_cao.cpp:523
void setNodeLight(const video::SColor &light)
Definition content_cao.cpp:874
scene::IDummyTransformationSceneNode * m_matrixnode
Definition content_cao.h:80
bool isVisible() const
Definition content_cao.h:209
bool isImmortal() const
Definition content_cao.cpp:424
u16 m_hp
Definition content_cao.h:87
void expireVisuals()
Definition content_cao.h:236
const v3f getPosition() const override final
Definition content_cao.cpp:409
void updateLight(u32 day_night_ratio) override
Definition content_cao.cpp:833
const ObjectProperties & getProperties() const
Definition content_cao.h:166
std::string m_attachment_bone
Definition content_cao.h:104
v3f m_position
Definition content_cao.h:83
bool m_animation_loop
Definition content_cao.h:98
void setVisible(bool toset)
Definition content_cao.h:214
void updateMeshCulling()
Definition content_cao.cpp:1917
std::unordered_set< object_t > m_attachment_child_ids
Definition content_cao.h:103
v2s16 m_tx_basepos
Definition content_cao.h:92
v3f m_attachment_position
Definition content_cao.h:105
bool isLocalPlayer() const override
Definition content_cao.h:199
float m_step_distance_counter
Definition content_cao.h:121
void removeAttachmentChild(object_t child_id) override
Definition content_cao.cpp:528
const std::string & getName() const
Definition content_cao.h:168
const core::matrix4 * getAbsolutePosRotMatrix() const
Definition content_cao.h:187
float m_anim_framelength
Definition content_cao.h:112
video::SColor m_last_light
Definition content_cao.h:122
void getAttachment(object_t *parent_id, std::string *bone, v3f *position, v3f *rotation, bool *force_visible) const override
Definition content_cao.cpp:500
float m_reset_textures_timer
Definition content_cao.h:115
video::E_MATERIAL_TYPE m_material_type
Definition content_cao.h:125
const v3f getVelocity() const override final
Definition content_cao.h:160
const std::unordered_set< object_t > & getAttachmentChildIds() const override
Definition content_cao.h:228
std::string debugInfoText() override
Definition content_cao.cpp:1903
v2f m_animation_range
Definition content_cao.h:95
scene::ISceneManager * m_smgr
Definition content_cao.h:73
v3f m_rotation
Definition content_cao.h:86
void setChildrenVisible(bool toset)
Definition content_cao.cpp:454
void removeFromScene(bool permanent) override
Definition content_cao.cpp:539
const ItemGroupList & getGroups() const
Definition content_cao.h:144
void updateTexturePos()
Definition content_cao.cpp:1214
SmoothTranslatorWrappedv3f rot_translator
Definition content_cao.h:89
u16 getLightPosition(v3s16 *pos)
Definition content_cao.cpp:890
static std::unique_ptr< ClientActiveObject > create(Client *client, ClientEnvironment *env)
Definition content_cao.h:135
bool m_tx_select_horiz_by_yawpitch
Definition content_cao.h:94
void updateTextures(std::string mod)
Definition content_cao.cpp:1284
std::string infoText() override
Definition content_cao.h:277
bool m_initial_tx_basepos_set
Definition content_cao.h:93
void updateAttachments() override
Definition content_cao.cpp:1476
SmoothTranslator< v3f > pos_translator
Definition content_cao.h:88
scene::ISceneNode * getSceneNode() const override
Definition content_cao.cpp:429
std::string m_previous_texture_modifier
Definition content_cao.h:117
bool getCollisionBox(aabb3f *toset) const override
Definition content_cao.cpp:327
ItemGroupList m_armor_groups
Definition content_cao.h:114
void setAttachment(object_t parent_id, const std::string &bone, v3f position, v3f rotation, bool force_visible) override
Definition content_cao.cpp:465
bool m_force_visible
Definition content_cao.h:108
void step(float dtime, ClientEnvironment *env) override
Definition content_cao.cpp:976
v3f m_velocity
Definition content_cao.h:84
ClientActiveObject * getParent() const override
Definition content_cao.cpp:533
bool visualExpiryRequired(const ObjectProperties &newprops) const
Definition content_cao.cpp:1526
WieldMeshSceneNode * m_wield_meshnode
Definition content_cao.h:78
~GenericCAO()
Definition content_cao.cpp:395
void updateAnimation()
Definition content_cao.cpp:1416
float m_animation_speed
Definition content_cao.h:96
float m_anim_timer
Definition content_cao.h:113
virtual bool getSelectionBox(aabb3f *toset) const override
Definition content_cao.cpp:400
scene::IBillboardSceneNode * m_spritenode
Definition content_cao.h:79
bool m_visuals_expired
Definition content_cao.h:120
void updateNodePos()
Definition content_cao.cpp:957
Nametag * m_nametag
Definition content_cao.h:81
const v3f & getRotation() const
Definition content_cao.h:162
core::matrix4 & getPosRotMatrix()
Definition content_cao.h:181
int m_anim_num_frames
Definition content_cao.h:111
ActiveObjectType getType() const override
Definition content_cao.h:140
Client * m_client
Definition content_cao.h:74
bool m_attached_to_local
Definition content_cao.h:107
float m_animation_blend
Definition content_cao.h:97
scene::IAnimatedMeshSceneNode * m_animated_meshnode
Definition content_cao.h:77
bool collideWithObjects() const override
Definition content_cao.cpp:344
void updateMarker()
Definition content_cao.cpp:903
f32 getStepHeight() const
Definition content_cao.h:194
std::string m_name
Definition content_cao.h:67
ObjectProperties m_prop
Definition content_cao.h:71
GenericCAO(Client *client, ClientEnvironment *env)
Definition content_cao.cpp:317
scene::IAnimatedMeshSceneNode * getAnimatedMeshSceneNode() const override
Definition content_cao.cpp:449
bool directReportPunch(v3f dir, const ItemStack *punchitem=NULL, float time_from_last_punch=1000000) override
Definition content_cao.cpp:1863
bool m_is_visible
Definition content_cao.h:123
bool isPlayer() const
Definition content_cao.h:204
Definition texturesource.h:36
Definition wieldmesh.h:90
#define BS
Definition constants.h:61
core::aabbox3d< f32 > aabb3f
Definition irr_aabb3d.h:11
core::vector2d< s16 > v2s16
Definition irr_v2d.h:12
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
std::unordered_map< std::string, int > ItemGroupList
Definition itemgroup.h:10
ServerActiveObject::object_t object_t
Definition l_object.cpp:28
Definition activeobjectmgr.cpp:11
Definition clientmap.h:30
Definition inventory.h:19
Definition minimap.h:54
Definition camera.h:25
Definition object_properties.h:15
std::string infotext
Definition object_properties.h:28
f32 stepheight
Definition object_properties.h:36
Definition content_cao.h:54
void translate(f32 dtime)
Definition content_cao.cpp:85
Definition content_cao.h:59
void translate(f32 dtime)
Definition content_cao.cpp:103
Definition content_cao.h:35
void translate(f32 dtime)
Definition content_cao.cpp:71
void update(T new_target, bool is_end_position=false, float update_interval=-1)
Definition content_cao.cpp:54
T val_target
Definition content_cao.h:38
T val_current
Definition content_cao.h:37
f32 anim_time_counter
Definition content_cao.h:40
T val_old
Definition content_cao.h:36
f32 anim_time
Definition content_cao.h:39
bool aim_is_end
Definition content_cao.h:41
SmoothTranslator()=default
void init(T current)
Definition content_cao.cpp:43