|
@@ -29,33 +29,40 @@ class UnitSAO : public ServerActiveObject |
|
|
UnitSAO(ServerEnvironment *env, v3f pos); |
|
|
virtual ~UnitSAO() = default; |
|
|
|
|
|
u16 getHP() const { return m_hp; } |
|
|
// Use a function, if isDead can be defined by other conditions |
|
|
bool isDead() const { return m_hp == 0; } |
|
|
|
|
|
// Rotation |
|
|
void setRotation(v3f rotation) { m_rotation = rotation; } |
|
|
const v3f &getRotation() const { return m_rotation; } |
|
|
v3f getRadRotation() { return m_rotation * core::DEGTORAD; } |
|
|
|
|
|
// Deprecated |
|
|
f32 getRadYawDep() const { return (m_rotation.Y + 90.) * core::DEGTORAD; } |
|
|
|
|
|
u16 getHP() const { return m_hp; } |
|
|
// Use a function, if isDead can be defined by other conditions |
|
|
bool isDead() const { return m_hp == 0; } |
|
|
|
|
|
inline bool isAttached() const { return getParent(); } |
|
|
|
|
|
// Armor groups |
|
|
inline bool isImmortal() const |
|
|
{ |
|
|
return itemgroup_get(getArmorGroups(), "immortal"); |
|
|
} |
|
|
|
|
|
void setArmorGroups(const ItemGroupList &armor_groups); |
|
|
const ItemGroupList &getArmorGroups() const; |
|
|
|
|
|
// Animation |
|
|
void setAnimation(v2f frame_range, float frame_speed, float frame_blend, |
|
|
bool frame_loop); |
|
|
void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, |
|
|
bool *frame_loop); |
|
|
void setAnimationSpeed(float frame_speed); |
|
|
|
|
|
// Bone position |
|
|
void setBonePosition(const std::string &bone, v3f position, v3f rotation); |
|
|
void getBonePosition(const std::string &bone, v3f *position, v3f *rotation); |
|
|
|
|
|
// Attachments |
|
|
ServerActiveObject *getParent() const; |
|
|
inline bool isAttached() const { return getParent(); } |
|
|
void setAttachment(int parent_id, const std::string &bone, v3f position, |
|
|
v3f rotation); |
|
|
void getAttachment(int *parent_id, std::string *bone, v3f *position, |
|
@@ -65,10 +72,13 @@ class UnitSAO : public ServerActiveObject |
|
|
void addAttachmentChild(int child_id); |
|
|
void removeAttachmentChild(int child_id); |
|
|
const std::unordered_set<int> &getAttachmentChildIds() const; |
|
|
ServerActiveObject *getParent() const; |
|
|
|
|
|
// Object properties |
|
|
ObjectProperties *accessObjectProperties(); |
|
|
void notifyObjectPropertiesModified(); |
|
|
void sendOutdatedData(); |
|
|
|
|
|
// Update packets |
|
|
std::string generateUpdateAttachmentCommand() const; |
|
|
std::string generateUpdateAnimationSpeedCommand() const; |
|
|
std::string generateUpdateAnimationCommand() const; |
|
@@ -77,42 +87,50 @@ class UnitSAO : public ServerActiveObject |
|
|
const v3f &velocity, const v3f &acceleration, const v3f &rotation, |
|
|
bool do_interpolate, bool is_movement_end, f32 update_interval); |
|
|
std::string generateSetPropertiesCommand(const ObjectProperties &prop) const; |
|
|
void sendPunchCommand(); |
|
|
static std::string generateUpdateBonePositionCommand(const std::string &bone, |
|
|
const v3f &position, const v3f &rotation); |
|
|
void sendPunchCommand(); |
|
|
|
|
|
protected: |
|
|
u16 m_hp = 1; |
|
|
|
|
|
v3f m_rotation; |
|
|
|
|
|
ItemGroupList m_armor_groups; |
|
|
|
|
|
// Object properties |
|
|
bool m_properties_sent = true; |
|
|
ObjectProperties m_prop; |
|
|
|
|
|
ItemGroupList m_armor_groups; |
|
|
// Stores position and rotation for each bone name |
|
|
std::unordered_map<std::string, core::vector2d<v3f>> m_bone_position; |
|
|
|
|
|
int m_attachment_parent_id = 0; |
|
|
|
|
|
private: |
|
|
void onAttach(int parent_id); |
|
|
void onDetach(int parent_id); |
|
|
|
|
|
std::string generatePunchCommand(u16 result_hp) const; |
|
|
|
|
|
// Armor groups |
|
|
bool m_armor_groups_sent = false; |
|
|
|
|
|
// Animation |
|
|
v2f m_animation_range; |
|
|
float m_animation_speed = 0.0f; |
|
|
float m_animation_blend = 0.0f; |
|
|
bool m_animation_loop = true; |
|
|
bool m_animation_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; |
|
|
// Bone positions |
|
|
bool m_bone_position_sent = false; |
|
|
|
|
|
int m_attachment_parent_id = 0; |
|
|
// Attachments |
|
|
std::unordered_set<int> m_attachment_child_ids; |
|
|
std::string m_attachment_bone = ""; |
|
|
v3f m_attachment_position; |
|
|
v3f m_attachment_rotation; |
|
|
bool m_attachment_sent = false; |
|
|
|
|
|
private: |
|
|
void onAttach(int parent_id); |
|
|
void onDetach(int parent_id); |
|
|
|
|
|
std::string generatePunchCommand(u16 result_hp) const; |
|
|
}; |