mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-12 20:04:00 +02:00
- Smooth rescaling
- stop following when leading avatar disconnect - set max far clip for no more crash with really big avatars
This commit is contained in:
parent
1876cd4f44
commit
3d853f5b90
6 changed files with 44 additions and 22 deletions
Binary file not shown.
|
@ -1389,21 +1389,21 @@ void Application::setRenderThirdPerson(bool thirdPerson) {
|
|||
}
|
||||
|
||||
void Application::increaseAvatarSize() {
|
||||
if (5.0f < _myAvatar.getScale() + 0.05f) {
|
||||
if (5.0f < 1.05f * _myAvatar.getNewScale()) {
|
||||
return;
|
||||
}
|
||||
|
||||
_myAvatar.setScale(_myAvatar.getScale() + 0.05f);
|
||||
_myCamera.setScale(_myAvatar.getScale() + 0.05f);
|
||||
_myAvatar.setNewScale(1.05f * _myAvatar.getNewScale());
|
||||
qDebug("Changed scale to %f\n", _myAvatar.getNewScale());
|
||||
}
|
||||
|
||||
void Application::decreaseAvatarSize() {
|
||||
if (_myAvatar.getScale() - 0.05f < 0.15f) {
|
||||
if (.95f * _myAvatar.getNewScale() < 0.15f) {
|
||||
return;
|
||||
}
|
||||
|
||||
_myAvatar.setScale(_myAvatar.getScale() - 0.05f);
|
||||
_myCamera.setScale(_myAvatar.getScale() - 0.05f);
|
||||
_myAvatar.setNewScale(.95f * _myAvatar.getNewScale());
|
||||
qDebug("Changed scale to %f\n", _myAvatar.getNewScale());
|
||||
}
|
||||
|
||||
void Application::setFrustumOffset(bool frustumOffset) {
|
||||
|
|
|
@ -105,6 +105,12 @@ void Camera::updateFollowMode(float deltaTime) {
|
|||
}
|
||||
}
|
||||
|
||||
float Camera::getFarClip() {
|
||||
return (_scale * _farClip < std::numeric_limits<int16_t>::max())
|
||||
? _scale * _farClip
|
||||
: std::numeric_limits<int16_t>::max() - 1;
|
||||
}
|
||||
|
||||
void Camera::setModeShiftRate ( float rate ) {
|
||||
|
||||
_modeShiftRate = rate;
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
float getFieldOfView () { return _fieldOfView; }
|
||||
float getAspectRatio () { return _aspectRatio; }
|
||||
float getNearClip () { return _scale * _nearClip; }
|
||||
float getFarClip () { return _scale * _farClip; }
|
||||
float getFarClip ();
|
||||
const glm::vec3& getEyeOffsetPosition () { return _eyeOffsetPosition; }
|
||||
const glm::quat& getEyeOffsetOrientation () { return _eyeOffsetOrientation; }
|
||||
float getScale () { return _scale; }
|
||||
|
|
|
@ -505,11 +505,6 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) {
|
|||
glm::quat orientation = getOrientation();
|
||||
glm::vec3 front = orientation * IDENTITY_FRONT;
|
||||
glm::vec3 right = orientation * IDENTITY_RIGHT;
|
||||
|
||||
//
|
||||
if (!isMyAvatar() && _scale != _newScale) {
|
||||
setScale(_newScale);
|
||||
}
|
||||
|
||||
// Update movement timers
|
||||
if (isMyAvatar()) {
|
||||
|
@ -523,18 +518,30 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) {
|
|||
_elapsedTimeMoving += deltaTime;
|
||||
}
|
||||
}
|
||||
|
||||
if (_leadingAvatar && !_leadingAvatar->getOwningNode()->isAlive()) {
|
||||
follow(NULL);
|
||||
}
|
||||
|
||||
// Ajust, scale, thrust and lookAt position when following an other avatar
|
||||
if (isMyAvatar() && _leadingAvatar && _newScale != _leadingAvatar->getScale()) {
|
||||
_newScale = _leadingAvatar->getScale();
|
||||
}
|
||||
|
||||
if (isMyAvatar() && _scale != _newScale) {
|
||||
float scale = 0.95f * _scale + 0.05f * _newScale;
|
||||
setScale(scale);
|
||||
Application::getInstance()->getCamera()->setScale(scale);
|
||||
}
|
||||
|
||||
if (!isMyAvatar() && _scale != _newScale) {
|
||||
setScale(_newScale);
|
||||
}
|
||||
|
||||
// Collect thrust forces from keyboard and devices
|
||||
if (isMyAvatar()) {
|
||||
updateThrust(deltaTime, transmitter);
|
||||
}
|
||||
|
||||
// Ajust, scale, thrust and lookAt position when following an other avatar
|
||||
if (isMyAvatar() && _leadingAvatar && _scale != _leadingAvatar->getScale()) {
|
||||
float scale = 0.95f * _scale + 0.05f * _leadingAvatar->getScale();
|
||||
setScale(scale);
|
||||
Application::getInstance()->getCamera()->setScale(scale);
|
||||
}
|
||||
|
||||
// copy velocity so we can use it later for acceleration
|
||||
glm::vec3 oldVelocity = getVelocity();
|
||||
|
@ -1446,7 +1453,7 @@ void Avatar::loadData(QSettings* settings) {
|
|||
|
||||
_leanScale = loadSetting(settings, "leanScale", 0.5f);
|
||||
|
||||
_scale = loadSetting(settings, "scale", 1.0f);
|
||||
_newScale = loadSetting(settings, "scale", 1.0f);
|
||||
setScale(_scale);
|
||||
Application::getInstance()->getCamera()->setScale(_scale);
|
||||
|
||||
|
@ -1472,7 +1479,7 @@ void Avatar::saveData(QSettings* set) {
|
|||
set->setValue("voxelURL", _voxels.getVoxelURL());
|
||||
|
||||
set->setValue("leanScale", _leanScale);
|
||||
set->setValue("scale", _scale);
|
||||
set->setValue("scale", _newScale);
|
||||
|
||||
set->endGroup();
|
||||
}
|
||||
|
@ -1525,9 +1532,16 @@ void Avatar::renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2,
|
|||
glEnd();
|
||||
}
|
||||
|
||||
void Avatar::setNewScale(const float scale) {
|
||||
_newScale = scale;
|
||||
}
|
||||
|
||||
void Avatar::setScale(const float scale) {
|
||||
_scale = scale;
|
||||
_newScale = _scale;
|
||||
|
||||
if (_newScale * .98 < _scale && _scale < _newScale * 1.02) {
|
||||
_scale = _newScale;
|
||||
}
|
||||
|
||||
_skeleton.setScale(_scale);
|
||||
|
||||
|
|
|
@ -135,6 +135,7 @@ public:
|
|||
void setMouseRay (const glm::vec3 &origin, const glm::vec3 &direction);
|
||||
void setOrientation (const glm::quat& orientation);
|
||||
void setScale (const float scale);
|
||||
void setNewScale (const float scale);
|
||||
|
||||
//getters
|
||||
bool isInitialized () const { return _initialized;}
|
||||
|
@ -149,6 +150,7 @@ public:
|
|||
glm::vec3 getBodyUpDirection () const { return getOrientation() * IDENTITY_UP; }
|
||||
glm::vec3 getBodyFrontDirection () const { return getOrientation() * IDENTITY_FRONT; }
|
||||
float getScale () const { return _scale;}
|
||||
float getNewScale () const { return _newScale;}
|
||||
const glm::vec3& getVelocity () const { return _velocity;}
|
||||
float getSpeed () const { return _speed;}
|
||||
float getHeight () const { return _height;}
|
||||
|
|
Loading…
Reference in a new issue