mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-07 17:41:13 +02:00
Add animation support
This commit is contained in:
parent
91df342ae9
commit
82918a5c31
3 changed files with 56 additions and 0 deletions
|
@ -83,10 +83,18 @@ AvatarManager::AvatarManager(QObject* parent) :
|
|||
const int AVATAR_TRANSIT_FRAME_COUNT = 11; // Based on testing
|
||||
const int AVATAR_TRANSIT_FRAMES_PER_METER = 1; // Based on testing
|
||||
|
||||
const QString START_ANIMATION_URL = "https://hifi-content.s3.amazonaws.com/luis/test_scripts/transitApp/animations/teleport01_warp.fbx";
|
||||
const QString MIDDLE_ANIMATION_URL = "https://hifi-content.s3.amazonaws.com/luis/test_scripts/transitApp/animations/teleport01_warp.fbx";
|
||||
const QString END_ANIMATION_URL = "https://hifi-content.s3.amazonaws.com/luis/test_scripts/transitApp/animations/teleport01_warp.fbx";
|
||||
|
||||
_transitConfig._totalFrames = AVATAR_TRANSIT_FRAME_COUNT;
|
||||
_transitConfig._triggerDistance = AVATAR_TRANSIT_TRIGGER_DISTANCE;
|
||||
_transitConfig._framesPerMeter = AVATAR_TRANSIT_FRAMES_PER_METER;
|
||||
_transitConfig._isDistanceBased = true;
|
||||
|
||||
_transitConfig._startTransitAnimation = AvatarTransit::TransitAnimation(START_ANIMATION_URL, 0, 14);
|
||||
_transitConfig._middleTransitAnimation = AvatarTransit::TransitAnimation(MIDDLE_ANIMATION_URL, 15, 0);
|
||||
_transitConfig._endTransitAnimation = AvatarTransit::TransitAnimation(END_ANIMATION_URL, 16, 38);
|
||||
}
|
||||
|
||||
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
||||
|
@ -134,6 +142,39 @@ void AvatarManager::setSpace(workload::SpacePointer& space ) {
|
|||
_space = space;
|
||||
}
|
||||
|
||||
void AvatarManager::playTransitAnimations(AvatarTransit::Status status) {
|
||||
auto startAnimation = _transitConfig._startTransitAnimation;
|
||||
auto middleAnimation = _transitConfig._middleTransitAnimation;
|
||||
auto endAnimation = _transitConfig._endTransitAnimation;
|
||||
|
||||
const float REFERENCE_FPS = 30.0f;
|
||||
switch (status) {
|
||||
case AvatarTransit::Status::START_FRAME:
|
||||
qDebug() << "START_FRAME";
|
||||
_myAvatar->overrideAnimation(startAnimation._animationUrl, REFERENCE_FPS, false, startAnimation._firstFrame,
|
||||
startAnimation._firstFrame + startAnimation._frameCount);
|
||||
break;
|
||||
case AvatarTransit::Status::START_TRANSIT:
|
||||
qDebug() << "START_TRANSIT";
|
||||
_myAvatar->overrideAnimation(middleAnimation._animationUrl, REFERENCE_FPS, false, middleAnimation._firstFrame,
|
||||
middleAnimation._firstFrame + middleAnimation._frameCount);
|
||||
break;
|
||||
case AvatarTransit::Status::END_TRANSIT:
|
||||
qDebug() << "END_TRANSIT";
|
||||
_myAvatar->overrideAnimation(endAnimation._animationUrl, REFERENCE_FPS, false, endAnimation._firstFrame,
|
||||
endAnimation._firstFrame + endAnimation._frameCount);
|
||||
break;
|
||||
case AvatarTransit::Status::END_FRAME:
|
||||
qDebug() << "END_FRAME";
|
||||
_myAvatar->restoreAnimation();
|
||||
break;
|
||||
case AvatarTransit::Status::IDLE:
|
||||
break;
|
||||
case AvatarTransit::Status::TRANSITING:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AvatarManager::updateMyAvatar(float deltaTime) {
|
||||
bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
|
||||
PerformanceWarning warn(showWarnings, "AvatarManager::updateMyAvatar()");
|
||||
|
|
|
@ -213,6 +213,7 @@ private:
|
|||
// frequently grabs a read lock on the hash to get a given avatar by ID
|
||||
void handleRemovedAvatar(const AvatarSharedPointer& removedAvatar,
|
||||
KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
||||
void playTransitAnimations(AvatarTransit::Status status);
|
||||
|
||||
QVector<AvatarSharedPointer> _avatarsToFade;
|
||||
|
||||
|
|
|
@ -54,9 +54,11 @@ class AvatarTransit {
|
|||
public:
|
||||
enum Status {
|
||||
IDLE = 0,
|
||||
START_FRAME,
|
||||
START_TRANSIT,
|
||||
TRANSITING,
|
||||
END_TRANSIT,
|
||||
END_FRAME,
|
||||
ABORT_TRANSIT
|
||||
};
|
||||
|
||||
|
@ -67,6 +69,15 @@ public:
|
|||
EASE_IN_OUT
|
||||
};
|
||||
|
||||
struct TransitAnimation {
|
||||
TransitAnimation(){};
|
||||
TransitAnimation(const QString& animationUrl, int firstFrame, int frameCount) :
|
||||
_firstFrame(firstFrame), _frameCount(frameCount), _animationUrl(animationUrl){};
|
||||
int _firstFrame;
|
||||
int _frameCount;
|
||||
QString _animationUrl;
|
||||
};
|
||||
|
||||
struct TransitConfig {
|
||||
TransitConfig() {};
|
||||
int _totalFrames { 0 };
|
||||
|
@ -74,6 +85,9 @@ public:
|
|||
bool _isDistanceBased { false };
|
||||
float _triggerDistance { 0 };
|
||||
EaseType _easeType { EaseType::EASE_OUT };
|
||||
TransitAnimation _startTransitAnimation;
|
||||
TransitAnimation _middleTransitAnimation;
|
||||
TransitAnimation _endTransitAnimation;
|
||||
};
|
||||
|
||||
AvatarTransit() {};
|
||||
|
|
Loading…
Reference in a new issue