Port kart animation rewind to RewindInfoEventFunction

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

View File

@ -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();
private: btTransform transform = kart->getBody()->getWorldTransform();
AbstractKart* m_kart; RewindManager::get()->getRewindQueue().insertRewindInfo(new
Vec3 m_linear_velocity, m_angular_velocity; RewindInfoEventFunction(
btTransform m_transform; World::getWorld()->getTicksSinceStart(),
public: [kart]()
AnimationEvent(AbstractKart* kart)
: RewindInfo(World::getWorld()->getTicksSinceStart(),
true/*is_confirmed*/)
{ {
m_kart = kart; Physics::getInstance()->removeKart(kart);
m_linear_velocity = m_kart->getBody()->getLinearVelocity(); },
m_angular_velocity = [kart, linear_velocity, angular_velocity, transform]()
m_kart->getBody()->getAngularVelocity();
m_transform = m_kart->getBody()->getWorldTransform();
}
// ------------------------------------------------------------
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); Physics::getInstance()->addKart(kart);
m_kart->getBody()->setLinearVelocity(m_linear_velocity); kart->getBody()->setLinearVelocity(linear_velocity);
m_kart->getBody()->setAngularVelocity(m_angular_velocity); kart->getBody()->setAngularVelocity(angular_velocity);
m_kart->getBody()->proceedToTransform(m_transform); kart->getBody()->proceedToTransform(transform);
m_kart->setTrans(m_transform); kart->setTrans(transform);
} }));
};
RewindManager::get()->getRewindQueue().insertRewindInfo
(new AnimationEvent(m_kart));
} }
} }
} // ~AbstractKartAnimation } // ~AbstractKartAnimation