void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation);
void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation);
+ void clearChildAttachments();
+ void clearParentAttachment();
void addAttachmentChild(int child_id);
void removeAttachmentChild(int child_id);
const std::unordered_set<int> &getAttachmentChildIds();
float m_yaw = 0.0f;
bool m_properties_sent = true;
- struct ObjectProperties m_prop;
+ ObjectProperties m_prop;
ItemGroupList m_armor_groups;
bool m_armor_groups_sent = false;
float m_animation_blend = 0.0f;
bool m_animation_loop = true;
bool m_animation_sent = false;
- bool m_animation_speed_sent = false;
+ bool m_animation_speed_sent = false;
// Stores position and rotation for each bone name
std::unordered_map<std::string, core::vector2d<v3f>> m_bone_position;
v3f m_attachment_position;
v3f m_attachment_rotation;
bool m_attachment_sent = false;
+private:
+ void onAttach(int parent_id);
+ void onDetach(int parent_id);
};
/*
s16 getHP() const;
/* LuaEntitySAO-specific */
void setVelocity(v3f velocity);
+ void addVelocity(v3f velocity)
+ {
+ m_velocity += velocity;
+ }
v3f getVelocity();
void setAcceleration(v3f acceleration);
v3f getAcceleration();
}
};
-typedef std::unordered_map<std::string, std::string> PlayerAttributes;
class RemotePlayer;
class PlayerSAO : public UnitSAO
int getWieldIndex() const;
void setWieldIndex(int i);
- /*
- Modding interface
- */
- inline void setExtendedAttribute(const std::string &attr, const std::string &value)
- {
- m_extra_attributes[attr] = value;
- m_extended_attributes_modified = true;
- }
-
- inline bool getExtendedAttribute(const std::string &attr, std::string *value)
- {
- if (m_extra_attributes.find(attr) == m_extra_attributes.end())
- return false;
-
- *value = m_extra_attributes[attr];
- return true;
- }
-
- inline void removeExtendedAttribute(const std::string &attr)
- {
- PlayerAttributes::iterator it = m_extra_attributes.find(attr);
- if (it == m_extra_attributes.end())
- return;
-
- m_extra_attributes.erase(it);
- m_extended_attributes_modified = true;
- }
-
- inline const PlayerAttributes &getExtendedAttributes()
- {
- return m_extra_attributes;
- }
-
- inline bool extendedAttributesModified() const
- {
- return m_extended_attributes_modified;
- }
-
- inline void setExtendedAttributeModified(bool v)
- {
- m_extended_attributes_modified = v;
- }
-
/*
PlayerSAO-specific
*/
v3f getEyePosition() const { return m_base_position + getEyeOffset(); }
v3f getEyeOffset() const;
+ float getZoomFOV() const;
+
+ inline Metadata &getMeta() { return m_meta; }
private:
std::string getPropertyPacket();
f32 m_fov = 0.0f;
s16 m_wanted_range = 0.0f;
- PlayerAttributes m_extra_attributes;
- bool m_extended_attributes_modified = false;
+ Metadata m_meta;
public:
float m_physics_override_speed = 1.0f;
float m_physics_override_jump = 1.0f;