diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8261ad9585..c32966533a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3110,16 +3110,14 @@ void Application::displaySide(Camera& whichCamera) { } // Render my own Avatar - if (_myCamera.getMode() != CAMERA_MODE_FIRST_PERSON) { - if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { - _myAvatar.getHead().setLookAtPosition(_myCamera.getPosition()); - } - _myAvatar.render(_lookingInMirror->isChecked(), _renderAvatarBalls->isChecked()); - _myAvatar.setDisplayingLookatVectors(_renderLookatOn->isChecked()); + if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { + _myAvatar.getHead().setLookAtPosition(_myCamera.getPosition()); + } + _myAvatar.render(_lookingInMirror->isChecked(), _renderAvatarBalls->isChecked()); + _myAvatar.setDisplayingLookatVectors(_renderLookatOn->isChecked()); - if (_renderLookatIndicatorOn->isChecked() && _isLookingAtOtherAvatar) { - renderLookatIndicator(_lookatOtherPosition, whichCamera); - } + if (_renderLookatIndicatorOn->isChecked() && _isLookingAtOtherAvatar) { + renderLookatIndicator(_lookatOtherPosition, whichCamera); } } @@ -3309,7 +3307,7 @@ void Application::displayStats() { int statsVerticalOffset = 8; char stats[200]; - sprintf(stats, "%3.0f FPS, %d Pkts/sec, %3.2f Mbps", + sprintf(stats, "%3.0f FPS, %d Pkts/sec, %3.2f Mbps ", _fps, _packetsPerSecond, (float)_bytesPerSecond * 8.f / 1000000.f); drawtext(10, statsVerticalOffset + 15, 0.10f, 0, 1.0, 0, stats); @@ -3340,11 +3338,16 @@ void Application::displayStats() { pingVoxel = totalPingVoxel/voxelServerCount; } - char pingStats[200]; sprintf(pingStats, "Ping audio/avatar/voxel: %d / %d / %d avg %d max ", pingAudio, pingAvatar, pingVoxel, pingVoxelMax); drawtext(10, statsVerticalOffset + 35, 0.10f, 0, 1.0, 0, pingStats); } + + char avatarStats[200]; + glm::vec3 avatarPos = _myAvatar.getPosition(); + sprintf(avatarStats, "Avatar position: %.3f, %.3f, %.3f, yaw = %.2f", avatarPos.x, avatarPos.y, avatarPos.z, _myAvatar.getBodyYaw()); + drawtext(10, statsVerticalOffset + 55, 0.10f, 0, 1.0, 0, avatarStats); + std::stringstream voxelStats; voxelStats.precision(4); diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 249453c877..e60e33d613 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -51,6 +51,7 @@ public: void lowPassFilter(int16_t* inputBuffer); void startCollisionSound(float magnitude, float frequency, float noise, float duration); + float getCollisionSoundMagnitude() { return _collisionSoundMagnitude; }; int getSongFileBytes() { return _songFileBytes; } diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index f425ffefbc..2c83d2a14f 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -31,7 +31,6 @@ const bool BALLS_ON = false; const bool USING_AVATAR_GRAVITY = true; const glm::vec3 DEFAULT_UP_DIRECTION (0.0f, 1.0f, 0.0f); const float YAW_MAG = 500.0; -const float BODY_SPIN_FRICTION = 5.0; const float MY_HAND_HOLDING_PULL = 0.2; const float YOUR_HAND_HOLDING_PULL = 1.0; const float BODY_SPRING_DEFAULT_TIGHTNESS = 1000.0f; @@ -637,8 +636,13 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter, float gyroCamer if (_isCollisionsOn) { Camera* myCamera = Application::getInstance()->getCamera(); - _collisionRadius = myCamera->getAspectRatio() * (myCamera->getNearClip() / cos(myCamera->getFieldOfView() / 2.f)); - _collisionRadius *= COLLISION_RADIUS_SCALAR; + + if (myCamera->getMode() == CAMERA_MODE_FIRST_PERSON) { + _collisionRadius = myCamera->getAspectRatio() * (myCamera->getNearClip() / cos(myCamera->getFieldOfView() / 2.f)); + _collisionRadius *= COLLISION_RADIUS_SCALAR; + } else { + _collisionRadius = _height * .125f; + } updateCollisionWithEnvironment(deltaTime); updateCollisionWithVoxels(deltaTime); @@ -665,12 +669,19 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter, float gyroCamer orientation = orientation * glm::quat(glm::radians( glm::vec3(_bodyPitchDelta, _bodyYawDelta, _bodyRollDelta) * deltaTime)); // decay body rotation momentum + + const float BODY_SPIN_FRICTION = 7.5f; float bodySpinMomentum = 1.0 - BODY_SPIN_FRICTION * deltaTime; if (bodySpinMomentum < 0.0f) { bodySpinMomentum = 0.0f; } _bodyPitchDelta *= bodySpinMomentum; _bodyYawDelta *= bodySpinMomentum; _bodyRollDelta *= bodySpinMomentum; + float MINIMUM_ROTATION_RATE = 2.0f; + if (fabs(_bodyYawDelta) < MINIMUM_ROTATION_RATE) { _bodyYawDelta = 0.f; } + if (fabs(_bodyRollDelta) < MINIMUM_ROTATION_RATE) { _bodyRollDelta = 0.f; } + if (fabs(_bodyPitchDelta) < MINIMUM_ROTATION_RATE) { _bodyPitchDelta = 0.f; } + const float MAX_STATIC_FRICTION_VELOCITY = 0.5f; const float STATIC_FRICTION_STRENGTH = _scale * 20.f; applyStaticFriction(deltaTime, _velocity, MAX_STATIC_FRICTION_VELOCITY, STATIC_FRICTION_STRENGTH); @@ -1422,7 +1433,9 @@ float Avatar::getBallRenderAlpha(int ball, bool lookingInMirror) const { void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { - if (_head.getFace().isFullFrame()) { + if (Application::getInstance()->getCamera()->getMode() == CAMERA_MODE_FIRST_PERSON) { + // Dont display body + } else if (_head.getFace().isFullFrame()) { // Render the full-frame video float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); if (alpha > 0.0f) { diff --git a/interface/src/avatar/Face.cpp b/interface/src/avatar/Face.cpp index 1949fa6c8c..5bcfba2334 100644 --- a/interface/src/avatar/Face.cpp +++ b/interface/src/avatar/Face.cpp @@ -262,8 +262,9 @@ bool Face::render(float alpha) { zScale = xScale * 0.3f; glPushMatrix(); + glTranslatef(0.0f, -0.2f, 0.0f); + glScalef(0.5f * xScale, xScale / aspect, zScale); glColor4f(1.0f, 1.0f, 1.0f, alpha); - glScalef(xScale / 12, xScale / (aspect * 3), zScale / 2); Application::getInstance()->getGeometryCache()->renderHalfCylinder(25, 20); glPopMatrix(); } else { diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index f4b1603e8f..f35b09895e 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -238,8 +238,12 @@ void Head::simulate(float deltaTime, bool isMine, float gyroCameraSensitivity) { const float CAMERA_STOP_TOLERANCE_DEGREES = 0.5f; const float PITCH_START_RANGE = 20.f; const float YAW_START_RANGE = 10.f; - float pitchStartTolerance = PITCH_START_RANGE * (1.f - gyroCameraSensitivity); - float yawStartTolerance = YAW_START_RANGE * (1.f - gyroCameraSensitivity); + float pitchStartTolerance = PITCH_START_RANGE + * (1.f - gyroCameraSensitivity) + + (2.f * CAMERA_STOP_TOLERANCE_DEGREES); + float yawStartTolerance = YAW_START_RANGE + * (1.f - gyroCameraSensitivity) + + (2.f * CAMERA_STOP_TOLERANCE_DEGREES); float cameraHeadAngleDifference = glm::length(glm::vec2(_pitch - _cameraPitch, _yaw - _cameraYaw)); if (_isCameraMoving) {