Abort settle animation if already moving

This commit is contained in:
luiscuenca 2018-10-12 11:35:51 -07:00
parent de1b6e717f
commit 52ed6cb6e9
3 changed files with 14 additions and 2 deletions

View file

@ -168,6 +168,10 @@ void AvatarManager::playTransitAnimations(AvatarTransit::Status status) {
qDebug() << "END_FRAME";
_myAvatar->restoreAnimation();
break;
case AvatarTransit::Status::PRE_TRANSIT_IDLE:
break;
case AvatarTransit::Status::POST_TRANSIT_IDLE:
break;
case AvatarTransit::Status::IDLE:
break;
case AvatarTransit::Status::TRANSITING:
@ -180,7 +184,7 @@ void AvatarManager::updateMyAvatar(float deltaTime) {
PerformanceWarning warn(showWarnings, "AvatarManager::updateMyAvatar()");
AvatarTransit::Status status = _myAvatar->updateTransit(deltaTime, _myAvatar->getNextPosition(), _transitConfig);
if (status != AvatarTransit::Status::IDLE) {
if (status != AvatarTransit::Status::IDLE && status != AvatarTransit::Status::PRE_TRANSIT_IDLE && status != AvatarTransit::Status::POST_TRANSIT_IDLE) {
playTransitAnimations(status);
}

View file

@ -127,6 +127,10 @@ AvatarTransit::Status AvatarTransit::update(float deltaTime, const glm::vec3& av
}
_lastPosition = avatarPosition;
_status = updatePosition(deltaTime);
if (_isTransiting && oneFrameDistance > 0.1f && _status == Status::POST_TRANSIT_IDLE) {
reset();
_status = Status::END_FRAME;
}
return _status;
}
@ -177,18 +181,20 @@ AvatarTransit::Status AvatarTransit::updatePosition(float deltaTime) {
float nextTime = _currentTime + deltaTime;
if (nextTime < _preTime) {
_currentPosition = _startPosition;
status = Status::PRE_TRANSIT_IDLE;
if (_currentTime == 0) {
status = Status::START_FRAME;
}
} else if (nextTime < _totalTime - _postTime){
status = Status::TRANSITING;
if (_currentTime <= _preTime) {
status = Status::START_TRANSIT;
} else {
float percentageIntoTransit = (nextTime - _preTime) / _transitTime;
_currentPosition = _startPosition + getEaseValue(_easeType, percentageIntoTransit) * _transitLine;
status = Status::TRANSITING;
}
} else {
status = Status::POST_TRANSIT_IDLE;
_currentPosition = _endPosition;
if (nextTime >= _totalTime) {
_isTransiting = false;

View file

@ -55,9 +55,11 @@ public:
enum Status {
IDLE = 0,
START_FRAME,
PRE_TRANSIT_IDLE,
START_TRANSIT,
TRANSITING,
END_TRANSIT,
POST_TRANSIT_IDLE,
END_FRAME,
ABORT_TRANSIT
};