mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-12 16:58:39 +00:00
Fix some issues with animations, and allow non-looped animations to be defined
This commit is contained in:
parent
622918d8a8
commit
660fa516bf
10 changed files with 59 additions and 25 deletions
|
@ -136,6 +136,7 @@ LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos,
|
|||
m_armor_groups_sent(false),
|
||||
m_animation_speed(0),
|
||||
m_animation_blend(0),
|
||||
m_animation_loop(true),
|
||||
m_animation_sent(false),
|
||||
m_bone_position_sent(false),
|
||||
m_attachment_parent_id(0),
|
||||
|
@ -324,7 +325,8 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
|
|||
|
||||
if(m_animation_sent == false){
|
||||
m_animation_sent = true;
|
||||
std::string str = gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend);
|
||||
std::string str = gob_cmd_update_animation(
|
||||
m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop);
|
||||
// create message and add to list
|
||||
ActiveObjectMessage aom(getId(), true, str);
|
||||
m_messages_out.push(aom);
|
||||
|
@ -366,7 +368,8 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
|
|||
writeU8(os, 4 + m_bone_position.size()); // number of messages stuffed in here
|
||||
os<<serializeLongString(getPropertyPacket()); // message 1
|
||||
os<<serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
|
||||
os<<serializeLongString(gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend)); // 3
|
||||
os<<serializeLongString(gob_cmd_update_animation(
|
||||
m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
|
||||
for(std::map<std::string, core::vector2d<v3f> >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
|
||||
os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
|
||||
}
|
||||
|
@ -533,19 +536,21 @@ ItemGroupList LuaEntitySAO::getArmorGroups()
|
|||
return m_armor_groups;
|
||||
}
|
||||
|
||||
void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend)
|
||||
void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop)
|
||||
{
|
||||
m_animation_range = frame_range;
|
||||
m_animation_speed = frame_speed;
|
||||
m_animation_blend = frame_blend;
|
||||
m_animation_loop = frame_loop;
|
||||
m_animation_sent = false;
|
||||
}
|
||||
|
||||
void LuaEntitySAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend)
|
||||
void LuaEntitySAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
|
||||
{
|
||||
*frame_range = m_animation_range;
|
||||
*frame_speed = m_animation_speed;
|
||||
*frame_blend = m_animation_blend;
|
||||
*frame_loop = m_animation_loop;
|
||||
}
|
||||
|
||||
void LuaEntitySAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
|
||||
|
@ -733,6 +738,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
|
|||
m_is_singleplayer(is_singleplayer),
|
||||
m_animation_speed(0),
|
||||
m_animation_blend(0),
|
||||
m_animation_loop(true),
|
||||
m_animation_sent(false),
|
||||
m_bone_position_sent(false),
|
||||
m_attachment_parent_id(0),
|
||||
|
@ -828,7 +834,8 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
|
|||
writeU8(os, 6 + m_bone_position.size()); // number of messages stuffed in here
|
||||
os<<serializeLongString(getPropertyPacket()); // message 1
|
||||
os<<serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
|
||||
os<<serializeLongString(gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend)); // 3
|
||||
os<<serializeLongString(gob_cmd_update_animation(
|
||||
m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop)); // 3
|
||||
for(std::map<std::string, core::vector2d<v3f> >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
|
||||
os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
|
||||
}
|
||||
|
@ -967,7 +974,8 @@ void PlayerSAO::step(float dtime, bool send_recommended)
|
|||
|
||||
if(m_animation_sent == false){
|
||||
m_animation_sent = true;
|
||||
std::string str = gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend);
|
||||
std::string str = gob_cmd_update_animation(
|
||||
m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop);
|
||||
// create message and add to list
|
||||
ActiveObjectMessage aom(getId(), true, str);
|
||||
m_messages_out.push(aom);
|
||||
|
@ -1166,20 +1174,22 @@ ItemGroupList PlayerSAO::getArmorGroups()
|
|||
return m_armor_groups;
|
||||
}
|
||||
|
||||
void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend)
|
||||
void PlayerSAO::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_speed = frame_speed;
|
||||
m_animation_blend = frame_blend;
|
||||
m_animation_loop = frame_loop;
|
||||
m_animation_sent = false;
|
||||
}
|
||||
|
||||
void PlayerSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend)
|
||||
void PlayerSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop)
|
||||
{
|
||||
*frame_range = m_animation_range;
|
||||
*frame_speed = m_animation_speed;
|
||||
*frame_blend = m_animation_blend;
|
||||
*frame_loop = m_animation_loop;
|
||||
}
|
||||
|
||||
void PlayerSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue