mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-08-27 17:06:45 +02:00
Abort settle animation if already moving
This commit is contained in:
parent
de1b6e717f
commit
52ed6cb6e9
3 changed files with 14 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue