UnitSAO
*/
-UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos):
- ServerActiveObject(env, pos)
+UnitSAO::UnitSAO(ServerEnvironment *env, v3f pos) : ServerActiveObject(env, pos)
{
// Initialize something to armor groups
m_armor_groups["fleshy"] = 100;
return m_armor_groups;
}
-void UnitSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
+void UnitSAO::setAnimation(
+ v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
{
// store these so they can be updated to clients
m_animation_range = frame_range;
m_animation_sent = false;
}
-void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
+void UnitSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend,
+ bool *frame_loop)
{
*frame_range = m_animation_range;
*frame_speed = m_animation_speed;
*rotation = m_bone_position[bone].Y;
}
-void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation)
+void UnitSAO::setAttachment(
+ int parent_id, const std::string &bone, v3f position, v3f rotation)
{
// Attachments need to be handled on both the server and client.
- // If we just attach on the server, we can only copy the position of the parent. Attachments
- // are still sent to clients at an interval so players might see them lagging, plus we can't
- // read and attach to skeletal bones.
- // If we just attach on the client, the server still sees the child at its original location.
- // This breaks some things so we also give the server the most accurate representation
+ // If we just attach on the server, we can only copy the position of the parent.
+ // Attachments are still sent to clients at an interval so players might see them
+ // lagging, plus we can't read and attach to skeletal bones. If we just attach on
+ // the client, the server still sees the child at its original location. This
+ // breaks some things so we also give the server the most accurate representation
// even if players only see the client changes.
int old_parent = m_attachment_parent_id;
}
}
-void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
- v3f *rotation) const
+void UnitSAO::getAttachment(
+ int *parent_id, std::string *bone, v3f *position, v3f *rotation) const
{
*parent_id = m_attachment_parent_id;
*bone = m_attachment_bone;
m_env->getScriptIface()->luaentity_on_detach_child(parent_id, this);
}
-ObjectProperties* UnitSAO::accessObjectProperties()
+ObjectProperties *UnitSAO::accessObjectProperties()
{
return &m_prop;
}
return os.str();
}
-std::string UnitSAO::generateUpdateBonePositionCommand(const std::string &bone,
- const v3f &position, const v3f &rotation)
+std::string UnitSAO::generateUpdateBonePositionCommand(
+ const std::string &bone, const v3f &position, const v3f &rotation)
{
std::ostringstream os(std::ios::binary);
// command
return os.str();
}
-
std::string UnitSAO::generateUpdateAnimationSpeedCommand() const
{
std::ostringstream os(std::ios::binary);
return os.str();
}
-
std::string UnitSAO::generateUpdateArmorGroupsCommand() const
{
std::ostringstream os(std::ios::binary);
writeU8(os, AO_CMD_UPDATE_ARMOR_GROUPS);
writeU16(os, m_armor_groups.size());
for (const auto &armor_group : m_armor_groups) {
- os<<serializeString(armor_group.first);
+ os << serializeString(armor_group.first);
writeS16(os, armor_group.second);
}
return os.str();
}
-
-std::string UnitSAO::generateUpdatePositionCommand(const v3f &position, const v3f &velocity,
- const v3f &acceleration, const v3f &rotation, bool do_interpolate, bool is_movement_end,
- f32 update_interval)
+std::string UnitSAO::generateUpdatePositionCommand(const v3f &position,
+ const v3f &velocity, const v3f &acceleration, const v3f &rotation,
+ bool do_interpolate, bool is_movement_end, f32 update_interval)
{
std::ostringstream os(std::ios::binary);
// command
return os.str();
}
-
std::string UnitSAO::generateSetPropertiesCommand(const ObjectProperties &prop) const
{
std::ostringstream os(std::ios::binary);
#include "object_properties.h"
#include "serveractiveobject.h"
-class UnitSAO: public ServerActiveObject
+class UnitSAO : public ServerActiveObject
{
public:
UnitSAO(ServerEnvironment *env, v3f pos);
// Use a function, if isDead can be defined by other conditions
bool isDead() const { return m_hp == 0; }
- inline bool isAttached() const
- { return getParent(); }
+ inline bool isAttached() const { return getParent(); }
inline bool isImmortal() const
- { return itemgroup_get(getArmorGroups(), "immortal"); }
+ {
+ return itemgroup_get(getArmorGroups(), "immortal");
+ }
void setArmorGroups(const ItemGroupList &armor_groups);
const ItemGroupList &getArmorGroups() const;
- 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 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);
void setBonePosition(const std::string &bone, v3f position, v3f rotation);
void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
- 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);
void getAttachment(int *parent_id, std::string *bone, v3f *position,
v3f *rotation) const;
void clearChildAttachments();
void removeAttachmentChild(int child_id);
const std::unordered_set<int> &getAttachmentChildIds() const;
ServerActiveObject *getParent() const;
- ObjectProperties* accessObjectProperties();
+ ObjectProperties *accessObjectProperties();
void notifyObjectPropertiesModified();
std::string generateUpdateAttachmentCommand() const;
std::string generateUpdateAnimationSpeedCommand() const;
std::string generateUpdateAnimationCommand() const;
std::string generateUpdateArmorGroupsCommand() const;
- static std::string generateUpdatePositionCommand(const v3f &position, const v3f &velocity,
- const v3f &acceleration, const v3f &rotation, bool do_interpolate,
- bool is_movement_end, f32 update_interval);
+ static std::string generateUpdatePositionCommand(const v3f &position,
+ 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);
+ const v3f &position, const v3f &rotation);
protected:
u16 m_hp = 1;
v3f m_attachment_position;
v3f m_attachment_rotation;
bool m_attachment_sent = false;
+
private:
void onAttach(int parent_id);
void onDetach(int parent_id);