forked from bartvdbraak/blender
BGE Animations: Making the ping pong mode for action actuators behave more like trunk. The behavior is a lot closer, but there are still differences when interrupting a ping pong action. I'm still trying to decide if these are acceptable differences as they don't look all that simple to fix.
This commit is contained in:
parent
6829b93c11
commit
7e0049d27a
@ -153,7 +153,18 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
else if (m_playtype == ACT_ACTION_LOOP_STOP)
|
else if (m_playtype == ACT_ACTION_LOOP_STOP)
|
||||||
play_mode = BL_Action::ACT_MODE_LOOP;
|
play_mode = BL_Action::ACT_MODE_LOOP;
|
||||||
else if (m_playtype == ACT_ACTION_PINGPONG)
|
else if (m_playtype == ACT_ACTION_PINGPONG)
|
||||||
play_mode = BL_Action::ACT_MODE_PING_PONG;
|
{
|
||||||
|
// We handle ping pong ourselves to increase compabitility with the pre-Pepper actuator
|
||||||
|
play_mode = BL_Action::ACT_MODE_PLAY;
|
||||||
|
|
||||||
|
if (m_flag & ACT_FLAG_REVERSE)
|
||||||
|
{
|
||||||
|
float tmp = start;
|
||||||
|
start = end;
|
||||||
|
end = tmp;
|
||||||
|
m_localtime = end;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (m_playtype == ACT_ACTION_FROM_PROP)
|
else if (m_playtype == ACT_ACTION_FROM_PROP)
|
||||||
{
|
{
|
||||||
CValue* prop = GetParent()->GetProperty(m_propname);
|
CValue* prop = GetParent()->GetProperty(m_propname);
|
||||||
@ -173,13 +184,14 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
|
|
||||||
if (bPositiveEvent)
|
if (bPositiveEvent)
|
||||||
{
|
{
|
||||||
if (m_flag & ACT_FLAG_ACTIVE && m_flag & ACT_FLAG_CONTINUE)
|
|
||||||
|
if (m_playtype != ACT_ACTION_PINGPONG && m_flag & ACT_FLAG_ACTIVE && m_flag & ACT_FLAG_CONTINUE)
|
||||||
start = m_localtime = obj->GetActionFrame(m_layer);
|
start = m_localtime = obj->GetActionFrame(m_layer);
|
||||||
|
|
||||||
if (obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, m_blendin, play_mode, m_layer_weight, m_ipo_flags))
|
if (obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, m_blendin, play_mode, m_layer_weight, m_ipo_flags))
|
||||||
{
|
{
|
||||||
m_flag |= ACT_FLAG_ACTIVE;
|
m_flag |= ACT_FLAG_ACTIVE;
|
||||||
if (m_flag & ACT_FLAG_CONTINUE)
|
if (m_playtype != ACT_ACTION_PINGPONG && m_flag & ACT_FLAG_CONTINUE)
|
||||||
obj->SetActionFrame(m_layer, m_localtime);
|
obj->SetActionFrame(m_layer, m_localtime);
|
||||||
|
|
||||||
if (m_playtype == ACT_ACTION_PLAY)
|
if (m_playtype == ACT_ACTION_PLAY)
|
||||||
@ -211,7 +223,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
m_flag &= ~ACT_FLAG_ACTIVE;
|
m_flag &= ~ACT_FLAG_ACTIVE;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (m_playtype == ACT_ACTION_LOOP_END)
|
else if (m_playtype == ACT_ACTION_LOOP_END || m_playtype == ACT_ACTION_PINGPONG)
|
||||||
{
|
{
|
||||||
// Convert into a play and let it finish
|
// Convert into a play and let it finish
|
||||||
start = obj->GetActionFrame(m_layer);
|
start = obj->GetActionFrame(m_layer);
|
||||||
@ -219,6 +231,9 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, 0, BL_Action::ACT_MODE_PLAY, m_layer_weight, m_ipo_flags);
|
obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, 0, BL_Action::ACT_MODE_PLAY, m_layer_weight, m_ipo_flags);
|
||||||
|
|
||||||
m_flag |= ACT_FLAG_PLAY_END;
|
m_flag |= ACT_FLAG_PLAY_END;
|
||||||
|
|
||||||
|
if (m_playtype == ACT_ACTION_PINGPONG)
|
||||||
|
m_flag ^= ACT_FLAG_REVERSE;
|
||||||
}
|
}
|
||||||
else if (m_playtype == ACT_ACTION_FLIPPER)
|
else if (m_playtype == ACT_ACTION_FLIPPER)
|
||||||
{
|
{
|
||||||
|
@ -151,7 +151,7 @@ protected:
|
|||||||
STR_String m_framepropname;
|
STR_String m_framepropname;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The first values are not used in BL_ActionActuator anymore,
|
// Not all of these values are used in BL_ActionActuator anymore,
|
||||||
// but BL_ShapeActionActuator still uses them, so we keep them around
|
// but BL_ShapeActionActuator still uses them, so we keep them around
|
||||||
// for now.
|
// for now.
|
||||||
enum {
|
enum {
|
||||||
|
Loading…
Reference in New Issue
Block a user