mirror of
https://github.com/overte-org/overte.git
synced 2025-07-15 15:36:41 +02:00
fix errors and set new anim parameters
This commit is contained in:
parent
82918a5c31
commit
1adac78828
3 changed files with 33 additions and 22 deletions
|
@ -81,7 +81,7 @@ AvatarManager::AvatarManager(QObject* parent) :
|
||||||
|
|
||||||
const float AVATAR_TRANSIT_TRIGGER_DISTANCE = 1.0f;
|
const float AVATAR_TRANSIT_TRIGGER_DISTANCE = 1.0f;
|
||||||
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 float AVATAR_TRANSIT_FRAMES_PER_METER = 0.5f; // Based on testing
|
||||||
|
|
||||||
const QString START_ANIMATION_URL = "https://hifi-content.s3.amazonaws.com/luis/test_scripts/transitApp/animations/teleport01_warp.fbx";
|
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 MIDDLE_ANIMATION_URL = "https://hifi-content.s3.amazonaws.com/luis/test_scripts/transitApp/animations/teleport01_warp.fbx";
|
||||||
|
@ -92,9 +92,9 @@ AvatarManager::AvatarManager(QObject* parent) :
|
||||||
_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._startTransitAnimation = AvatarTransit::TransitAnimation(START_ANIMATION_URL, 0, 10);
|
||||||
_transitConfig._middleTransitAnimation = AvatarTransit::TransitAnimation(MIDDLE_ANIMATION_URL, 15, 0);
|
_transitConfig._middleTransitAnimation = AvatarTransit::TransitAnimation(MIDDLE_ANIMATION_URL, 15, 0);
|
||||||
_transitConfig._endTransitAnimation = AvatarTransit::TransitAnimation(END_ANIMATION_URL, 16, 38);
|
_transitConfig._endTransitAnimation = AvatarTransit::TransitAnimation(END_ANIMATION_URL, 22, 49);
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer) {
|
||||||
|
@ -180,8 +180,9 @@ void AvatarManager::updateMyAvatar(float deltaTime) {
|
||||||
PerformanceWarning warn(showWarnings, "AvatarManager::updateMyAvatar()");
|
PerformanceWarning warn(showWarnings, "AvatarManager::updateMyAvatar()");
|
||||||
|
|
||||||
AvatarTransit::Status status = _myAvatar->updateTransit(deltaTime, _myAvatar->getNextPosition(), _transitConfig);
|
AvatarTransit::Status status = _myAvatar->updateTransit(deltaTime, _myAvatar->getNextPosition(), _transitConfig);
|
||||||
bool sendFirstTransitPackage = (status == AvatarTransit::Status::START_TRANSIT);
|
if (status != AvatarTransit::Status::IDLE) {
|
||||||
bool blockTransitData = (status == AvatarTransit::Status::TRANSITING);
|
playTransitAnimations(status);
|
||||||
|
}
|
||||||
|
|
||||||
_myAvatar->update(deltaTime);
|
_myAvatar->update(deltaTime);
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
|
@ -191,13 +192,9 @@ void AvatarManager::updateMyAvatar(float deltaTime) {
|
||||||
quint64 now = usecTimestampNow();
|
quint64 now = usecTimestampNow();
|
||||||
quint64 dt = now - _lastSendAvatarDataTime;
|
quint64 dt = now - _lastSendAvatarDataTime;
|
||||||
|
|
||||||
|
if (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS && !_myAvatarDataPacketsPaused) {
|
||||||
if (sendFirstTransitPackage || (dt > MIN_TIME_BETWEEN_MY_AVATAR_DATA_SENDS && !_myAvatarDataPacketsPaused && !blockTransitData)) {
|
|
||||||
// send head/hand data to the avatar mixer and voxel server
|
// send head/hand data to the avatar mixer and voxel server
|
||||||
PerformanceTimer perfTimer("send");
|
PerformanceTimer perfTimer("send");
|
||||||
if (sendFirstTransitPackage) {
|
|
||||||
_myAvatar->overrideNextPackagePositionData(_myAvatar->getTransit()->getEndPosition());
|
|
||||||
}
|
|
||||||
_myAvatar->sendAvatarDataPacket();
|
_myAvatar->sendAvatarDataPacket();
|
||||||
_lastSendAvatarDataTime = now;
|
_lastSendAvatarDataTime = now;
|
||||||
_myAvatarSendRate.increment();
|
_myAvatarSendRate.increment();
|
||||||
|
|
|
@ -144,9 +144,12 @@ void AvatarTransit::start(float deltaTime, const glm::vec3& startPosition, const
|
||||||
_totalDistance = glm::length(_transitLine);
|
_totalDistance = glm::length(_transitLine);
|
||||||
_easeType = config._easeType;
|
_easeType = config._easeType;
|
||||||
const float REFERENCE_FRAMES_PER_SECOND = 30.0f;
|
const float REFERENCE_FRAMES_PER_SECOND = 30.0f;
|
||||||
|
_preTime = (float)config._startTransitAnimation._frameCount / REFERENCE_FRAMES_PER_SECOND;
|
||||||
|
_postTime = (float)config._endTransitAnimation._frameCount / REFERENCE_FRAMES_PER_SECOND;
|
||||||
|
|
||||||
int transitFrames = (!config._isDistanceBased) ? config._totalFrames : config._framesPerMeter * _totalDistance;
|
int transitFrames = (!config._isDistanceBased) ? config._totalFrames : config._framesPerMeter * _totalDistance;
|
||||||
_totalTime = (float)transitFrames / REFERENCE_FRAMES_PER_SECOND;
|
_transitTime = (float)transitFrames / REFERENCE_FRAMES_PER_SECOND;
|
||||||
|
_totalTime = _transitTime + _preTime + _postTime;
|
||||||
_currentTime = 0.0f;
|
_currentTime = 0.0f;
|
||||||
_isTransiting = true;
|
_isTransiting = true;
|
||||||
}
|
}
|
||||||
|
@ -173,19 +176,27 @@ AvatarTransit::Status AvatarTransit::updatePosition(float deltaTime) {
|
||||||
Status status = Status::IDLE;
|
Status status = Status::IDLE;
|
||||||
if (_isTransiting) {
|
if (_isTransiting) {
|
||||||
float nextTime = _currentTime + deltaTime;
|
float nextTime = _currentTime + deltaTime;
|
||||||
glm::vec3 newPosition;
|
if (nextTime < _preTime) {
|
||||||
if (nextTime >= _totalTime) {
|
_currentPosition = _startPosition;
|
||||||
_currentPosition = _endPosition;
|
|
||||||
_isTransiting = false;
|
|
||||||
status = Status::END_TRANSIT;
|
|
||||||
} else {
|
|
||||||
if (_currentTime == 0) {
|
if (_currentTime == 0) {
|
||||||
|
status = Status::START_FRAME;
|
||||||
|
}
|
||||||
|
} else if (nextTime < _totalTime - _postTime){
|
||||||
|
if (_currentTime <= _preTime) {
|
||||||
status = Status::START_TRANSIT;
|
status = Status::START_TRANSIT;
|
||||||
} else {
|
} else {
|
||||||
|
float percentageIntoTransit = (nextTime - _preTime) / _transitTime;
|
||||||
|
_currentPosition = _startPosition + getEaseValue(_easeType, percentageIntoTransit) * _transitLine;
|
||||||
status = Status::TRANSITING;
|
status = Status::TRANSITING;
|
||||||
}
|
}
|
||||||
float percentageIntoTransit = nextTime / _totalTime;
|
} else {
|
||||||
_currentPosition = _startPosition + getEaseValue(_easeType, percentageIntoTransit) * _transitLine;
|
_currentPosition = _endPosition;
|
||||||
|
if (nextTime >= _totalTime) {
|
||||||
|
_isTransiting = false;
|
||||||
|
status = Status::END_FRAME;
|
||||||
|
} else if (_currentTime < _totalTime - _postTime) {
|
||||||
|
status = Status::END_TRANSIT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_currentTime = nextTime;
|
_currentTime = nextTime;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
struct TransitConfig {
|
struct TransitConfig {
|
||||||
TransitConfig() {};
|
TransitConfig() {};
|
||||||
int _totalFrames { 0 };
|
int _totalFrames { 0 };
|
||||||
int _framesPerMeter { 0 };
|
float _framesPerMeter { 0.0f };
|
||||||
bool _isDistanceBased { false };
|
bool _isDistanceBased { false };
|
||||||
float _triggerDistance { 0 };
|
float _triggerDistance { 0 };
|
||||||
EaseType _easeType { EaseType::EASE_OUT };
|
EaseType _easeType { EaseType::EASE_OUT };
|
||||||
|
@ -115,7 +115,10 @@ private:
|
||||||
|
|
||||||
glm::vec3 _transitLine;
|
glm::vec3 _transitLine;
|
||||||
float _totalDistance { 0.0f };
|
float _totalDistance { 0.0f };
|
||||||
|
float _preTime { 0.0f };
|
||||||
float _totalTime { 0.0f };
|
float _totalTime { 0.0f };
|
||||||
|
float _transitTime { 0.0f };
|
||||||
|
float _postTime { 0.0f };
|
||||||
float _currentTime { 0.0f };
|
float _currentTime { 0.0f };
|
||||||
EaseType _easeType { EaseType::EASE_OUT };
|
EaseType _easeType { EaseType::EASE_OUT };
|
||||||
Status _status { Status::IDLE };
|
Status _status { Status::IDLE };
|
||||||
|
|
Loading…
Reference in a new issue