mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 23:46:26 +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_FRAME_COUNT = 11; // Based on testing
|
||||||
const int AVATAR_TRANSIT_FRAMES_PER_METER = 1; // 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._totalFrames = AVATAR_TRANSIT_FRAME_COUNT;
|
||||||
_transitConfig._triggerDistance = AVATAR_TRANSIT_TRIGGER_DISTANCE;
|
_transitConfig._triggerDistance = AVATAR_TRANSIT_TRIGGER_DISTANCE;
|
||||||
_transitConfig._framesPerMeter = AVATAR_TRANSIT_FRAMES_PER_METER;
|
_transitConfig._framesPerMeter = AVATAR_TRANSIT_FRAMES_PER_METER;
|
||||||
_transitConfig._isDistanceBased = true;
|
_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) {
|
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
||||||
|
@ -134,6 +142,39 @@ void AvatarManager::setSpace(workload::SpacePointer& space ) {
|
||||||
_space = 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) {
|
void AvatarManager::updateMyAvatar(float deltaTime) {
|
||||||
bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
|
bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
|
||||||
PerformanceWarning warn(showWarnings, "AvatarManager::updateMyAvatar()");
|
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
|
// frequently grabs a read lock on the hash to get a given avatar by ID
|
||||||
void handleRemovedAvatar(const AvatarSharedPointer& removedAvatar,
|
void handleRemovedAvatar(const AvatarSharedPointer& removedAvatar,
|
||||||
KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
KillAvatarReason removalReason = KillAvatarReason::NoReason) override;
|
||||||
|
void playTransitAnimations(AvatarTransit::Status status);
|
||||||
|
|
||||||
QVector<AvatarSharedPointer> _avatarsToFade;
|
QVector<AvatarSharedPointer> _avatarsToFade;
|
||||||
|
|
||||||
|
|
|
@ -54,9 +54,11 @@ class AvatarTransit {
|
||||||
public:
|
public:
|
||||||
enum Status {
|
enum Status {
|
||||||
IDLE = 0,
|
IDLE = 0,
|
||||||
|
START_FRAME,
|
||||||
START_TRANSIT,
|
START_TRANSIT,
|
||||||
TRANSITING,
|
TRANSITING,
|
||||||
END_TRANSIT,
|
END_TRANSIT,
|
||||||
|
END_FRAME,
|
||||||
ABORT_TRANSIT
|
ABORT_TRANSIT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -67,6 +69,15 @@ public:
|
||||||
EASE_IN_OUT
|
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 {
|
struct TransitConfig {
|
||||||
TransitConfig() {};
|
TransitConfig() {};
|
||||||
int _totalFrames { 0 };
|
int _totalFrames { 0 };
|
||||||
|
@ -74,6 +85,9 @@ public:
|
||||||
bool _isDistanceBased { false };
|
bool _isDistanceBased { false };
|
||||||
float _triggerDistance { 0 };
|
float _triggerDistance { 0 };
|
||||||
EaseType _easeType { EaseType::EASE_OUT };
|
EaseType _easeType { EaseType::EASE_OUT };
|
||||||
|
TransitAnimation _startTransitAnimation;
|
||||||
|
TransitAnimation _middleTransitAnimation;
|
||||||
|
TransitAnimation _endTransitAnimation;
|
||||||
};
|
};
|
||||||
|
|
||||||
AvatarTransit() {};
|
AvatarTransit() {};
|
||||||
|
|
Loading…
Reference in a new issue