Port kart animation rewind to RewindInfoEventFunction

This commit is contained in:
Benau 2018-07-16 00:35:33 +08:00
parent f2d5b32fa6
commit 511d8dd7a8

@ -88,45 +88,26 @@ AbstractKartAnimation::~AbstractKartAnimation()
NetworkConfig::get()->isClient() && NetworkConfig::get()->isClient() &&
!RewindManager::get()->isRewinding()) !RewindManager::get()->isRewinding())
{ {
// ================================================================ AbstractKart* kart = m_kart;
class AnimationEvent : public RewindInfo Vec3 linear_velocity = kart->getBody()->getLinearVelocity();
Vec3 angular_velocity = kart->getBody()->getAngularVelocity();
btTransform transform = kart->getBody()->getWorldTransform();
RewindManager::get()->getRewindQueue().insertRewindInfo(new
RewindInfoEventFunction(
World::getWorld()->getTicksSinceStart(),
[kart]()
{ {
private: Physics::getInstance()->removeKart(kart);
AbstractKart* m_kart; },
Vec3 m_linear_velocity, m_angular_velocity; [kart, linear_velocity, angular_velocity, transform]()
btTransform m_transform;
public:
AnimationEvent(AbstractKart* kart)
: RewindInfo(World::getWorld()->getTicksSinceStart(),
true/*is_confirmed*/)
{ {
m_kart = kart; Physics::getInstance()->addKart(kart);
m_linear_velocity = m_kart->getBody()->getLinearVelocity(); kart->getBody()->setLinearVelocity(linear_velocity);
m_angular_velocity = kart->getBody()->setAngularVelocity(angular_velocity);
m_kart->getBody()->getAngularVelocity(); kart->getBody()->proceedToTransform(transform);
m_transform = m_kart->getBody()->getWorldTransform(); kart->setTrans(transform);
}));
} }
// ------------------------------------------------------------
virtual void restore() {}
// ------------------------------------------------------------
virtual bool isEvent() const { return true; }
// ------------------------------------------------------------
virtual void undo()
{ Physics::getInstance()->removeKart(m_kart); }
// ------------------------------------------------------------
virtual void replay()
{
Physics::getInstance()->addKart(m_kart);
m_kart->getBody()->setLinearVelocity(m_linear_velocity);
m_kart->getBody()->setAngularVelocity(m_angular_velocity);
m_kart->getBody()->proceedToTransform(m_transform);
m_kart->setTrans(m_transform);
}
};
RewindManager::get()->getRewindQueue().insertRewindInfo
(new AnimationEvent(m_kart));
}
} }
} // ~AbstractKartAnimation } // ~AbstractKartAnimation