Merge branch 'master' of https://github.com/worklist/hifi into stalking_indicator

This commit is contained in:
atlante45 2013-08-06 11:07:58 -07:00
commit eb9f32b7cb
9 changed files with 54 additions and 32 deletions

View file

@ -2570,8 +2570,6 @@ void Application::update(float deltaTime) {
_myAvatar.simulate(deltaTime, NULL); _myAvatar.simulate(deltaTime, NULL);
} }
_myAvatar.getHand().simulate(deltaTime, true);
if (!OculusManager::isConnected()) { if (!OculusManager::isConnected()) {
if (_lookingInMirror->isChecked()) { if (_lookingInMirror->isChecked()) {
if (_myCamera.getMode() != CAMERA_MODE_MIRROR) { if (_myCamera.getMode() != CAMERA_MODE_MIRROR) {
@ -2624,7 +2622,7 @@ void Application::update(float deltaTime) {
if (_renderParticleSystemOn->isChecked()) { if (_renderParticleSystemOn->isChecked()) {
updateParticleSystem(deltaTime); updateParticleSystem(deltaTime);
} }
} }
void Application::updateAvatar(float deltaTime) { void Application::updateAvatar(float deltaTime) {
@ -2639,7 +2637,6 @@ void Application::updateAvatar(float deltaTime) {
glm::vec3(_headCameraPitchYawScale, glm::vec3(_headCameraPitchYawScale,
_headCameraPitchYawScale, _headCameraPitchYawScale,
_headCameraPitchYawScale), _headCameraPitchYawScale),
0.f,
_pitchFromTouch); _pitchFromTouch);
if (_serialHeadSensor.isActive()) { if (_serialHeadSensor.isActive()) {

View file

@ -295,8 +295,8 @@ void Avatar::reset() {
// Update avatar head rotation with sensor data // Update avatar head rotation with sensor data
void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook, void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook,
const glm::vec3& amplifyAngle, const glm::vec3& amplifyAngle,
float yawFromTouch,
float pitchFromTouch) { float pitchFromTouch) {
_head.setMousePitch(pitchFromTouch);
SerialInterface* gyros = Application::getInstance()->getSerialHeadSensor(); SerialInterface* gyros = Application::getInstance()->getSerialHeadSensor();
Webcam* webcam = Application::getInstance()->getWebcam(); Webcam* webcam = Application::getInstance()->getWebcam();
glm::vec3 estimatedPosition, estimatedRotation; glm::vec3 estimatedPosition, estimatedRotation;
@ -308,7 +308,6 @@ void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook,
} else { } else {
_head.setPitch(pitchFromTouch); _head.setPitch(pitchFromTouch);
_head.setYaw(yawFromTouch);
return; return;
} }
if (webcam->isActive()) { if (webcam->isActive()) {
@ -334,8 +333,8 @@ void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook,
} else { } else {
_head.getFace().clearFrame(); _head.getFace().clearFrame();
} }
_head.setPitch(estimatedRotation.x * amplifyAngle.x + pitchFromTouch); _head.setPitch(estimatedRotation.x * amplifyAngle.x);
_head.setYaw(estimatedRotation.y * amplifyAngle.y + yawFromTouch); _head.setYaw(estimatedRotation.y * amplifyAngle.y);
_head.setRoll(estimatedRotation.z * amplifyAngle.z); _head.setRoll(estimatedRotation.z * amplifyAngle.z);
_head.setCameraFollowsHead(gyroLook); _head.setCameraFollowsHead(gyroLook);
@ -751,6 +750,8 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) {
_head.setScale(_scale); _head.setScale(_scale);
_head.setSkinColor(glm::vec3(SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2])); _head.setSkinColor(glm::vec3(SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2]));
_head.simulate(deltaTime, isMyAvatar()); _head.simulate(deltaTime, isMyAvatar());
_hand.simulate(deltaTime, isMyAvatar());

View file

@ -124,7 +124,6 @@ public:
void follow(Avatar* leadingAvatar); void follow(Avatar* leadingAvatar);
void updateFromGyrosAndOrWebcam(bool gyroLook, void updateFromGyrosAndOrWebcam(bool gyroLook,
const glm::vec3& amplifyAngle, const glm::vec3& amplifyAngle,
float yawFromTouch,
float pitchFromTouch); float pitchFromTouch);
void addBodyYaw(float bodyYaw) {_bodyYaw += bodyYaw;}; void addBodyYaw(float bodyYaw) {_bodyYaw += bodyYaw;};
void addBodyYawDelta(float bodyYawDelta) {_bodyYawDelta += bodyYawDelta;} void addBodyYawDelta(float bodyYawDelta) {_bodyYawDelta += bodyYawDelta;}

View file

@ -42,6 +42,9 @@ void Hand::init() {
else { else {
_ballColor = glm::vec3(0.0, 0.0, 0.4); _ballColor = glm::vec3(0.0, 0.0, 0.4);
} }
_raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_FIRE;
_raveGloveEffectsModeChanged = false;
} }
void Hand::reset() { void Hand::reset() {
@ -51,6 +54,11 @@ void Hand::reset() {
void Hand::simulate(float deltaTime, bool isMine) { void Hand::simulate(float deltaTime, bool isMine) {
if (_isRaveGloveActive) { if (_isRaveGloveActive) {
if (_raveGloveEffectsModeChanged) {
activateNewRaveGloveMode();
_raveGloveEffectsModeChanged = false;
}
updateRaveGloveParticles(deltaTime); updateRaveGloveParticles(deltaTime);
} }
} }
@ -106,18 +114,21 @@ void Hand::calculateGeometry() {
} }
void Hand::setRaveGloveEffectsMode(QKeyEvent* event) { void Hand::setRaveGloveEffectsMode(QKeyEvent* event) {
_raveGloveEffectsModeChanged = true;
switch (event->key()) { switch (event->key()) {
case Qt::Key_0: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR); break; case Qt::Key_0: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR; break;
case Qt::Key_1: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_TRAILS ); break; case Qt::Key_1: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_TRAILS; break;
case Qt::Key_2: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FIRE ); break; case Qt::Key_2: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_FIRE; break;
case Qt::Key_3: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_WATER ); break; case Qt::Key_3: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_WATER; break;
case Qt::Key_4: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FLASHY ); break; case Qt::Key_4: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_FLASHY; break;
case Qt::Key_5: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_BOZO_SPARKLER ); break; case Qt::Key_5: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_BOZO_SPARKLER; break;
case Qt::Key_6: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_LONG_SPARKLER ); break; case Qt::Key_6: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_LONG_SPARKLER; break;
case Qt::Key_7: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_SNAKE ); break; case Qt::Key_7: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_SNAKE; break;
case Qt::Key_8: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_PULSE ); break; case Qt::Key_8: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_PULSE; break;
case Qt::Key_9: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_THROB ); break; case Qt::Key_9: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_THROB; break;
}; };
} }
@ -129,7 +140,8 @@ void Hand::render(bool lookingInMirror) {
calculateGeometry(); calculateGeometry();
if (_isRaveGloveActive) { if (_isRaveGloveActive) {
renderRaveGloveStage(); // Disable raveGloveStage while we work on the network glove features
// renderRaveGloveStage();
if (_raveGloveInitialized) { if (_raveGloveInitialized) {
updateRaveGloveEmitters(); // do this after calculateGeometry updateRaveGloveEmitters(); // do this after calculateGeometry
@ -340,6 +352,7 @@ void Hand::updateRaveGloveParticles(float deltaTime) {
} }
setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FIRE); setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FIRE);
activateNewRaveGloveMode();
_raveGloveParticleSystem.setUpDirection(glm::vec3(0.0f, 1.0f, 0.0f)); _raveGloveParticleSystem.setUpDirection(glm::vec3(0.0f, 1.0f, 0.0f));
_raveGloveInitialized = true; _raveGloveInitialized = true;
} else { } else {
@ -347,12 +360,10 @@ void Hand::updateRaveGloveParticles(float deltaTime) {
} }
} }
// The rave glove mode has changed, so activate the effects.
void Hand::activateNewRaveGloveMode() {
int mode = _raveGloveEffectsMode;
void Hand::setRaveGloveMode(int mode) {
_raveGloveMode = mode;
_raveGloveParticleSystem.killAllParticles(); _raveGloveParticleSystem.killAllParticles();
for ( int f = 0; f< NUM_FINGERS; f ++ ) { for ( int f = 0; f< NUM_FINGERS; f ++ ) {

View file

@ -72,8 +72,9 @@ private:
void setLeapHands(const std::vector<glm::vec3>& handPositions, void setLeapHands(const std::vector<glm::vec3>& handPositions,
const std::vector<glm::vec3>& handNormals); const std::vector<glm::vec3>& handNormals);
void activateNewRaveGloveMode();
void renderRaveGloveStage(); void renderRaveGloveStage();
virtual void setRaveGloveMode(int mode);
void renderLeapHandSpheres(); void renderLeapHandSpheres();
void renderLeapHands(); void renderLeapHands();
void renderLeapHand(PalmData& hand); void renderLeapHand(PalmData& hand);

View file

@ -84,6 +84,7 @@ Head::Head(Avatar* owningAvatar) :
_rightEyeBlinkVelocity(0.0f), _rightEyeBlinkVelocity(0.0f),
_timeWithoutTalking(0.0f), _timeWithoutTalking(0.0f),
_cameraPitch(_pitch), _cameraPitch(_pitch),
_mousePitch(0.f),
_cameraYaw(_yaw), _cameraYaw(_yaw),
_isCameraMoving(false), _isCameraMoving(false),
_cameraFollowsHead(false), _cameraFollowsHead(false),
@ -428,7 +429,7 @@ glm::quat Head::getOrientation() const {
glm::quat Head::getCameraOrientation () const { glm::quat Head::getCameraOrientation () const {
Avatar* owningAvatar = static_cast<Avatar*>(_owningAvatar); Avatar* owningAvatar = static_cast<Avatar*>(_owningAvatar);
return owningAvatar->getWorldAlignedOrientation() return owningAvatar->getWorldAlignedOrientation()
* glm::quat(glm::radians(glm::vec3(_cameraPitch, _cameraYaw, 0.0f))); * glm::quat(glm::radians(glm::vec3(_cameraPitch + _mousePitch, _cameraYaw, 0.0f)));
} }
void Head::renderHeadSphere() { void Head::renderHeadSphere() {

View file

@ -57,6 +57,8 @@ public:
void setCameraFollowsHead(bool cameraFollowsHead) { _cameraFollowsHead = cameraFollowsHead; } void setCameraFollowsHead(bool cameraFollowsHead) { _cameraFollowsHead = cameraFollowsHead; }
void setMousePitch(float mousePitch) { _mousePitch = mousePitch; }
glm::quat getOrientation() const; glm::quat getOrientation() const;
glm::quat getCameraOrientation () const; glm::quat getCameraOrientation () const;
@ -123,6 +125,7 @@ private:
float _rightEyeBlinkVelocity; float _rightEyeBlinkVelocity;
float _timeWithoutTalking; float _timeWithoutTalking;
float _cameraPitch; // Used to position the camera differently from the head float _cameraPitch; // Used to position the camera differently from the head
float _mousePitch;
float _cameraYaw; float _cameraYaw;
bool _isCameraMoving; bool _isCameraMoving;
bool _cameraFollowsHead; bool _cameraFollowsHead;

View file

@ -20,7 +20,8 @@ HandData::HandData(AvatarData* owningAvatar) :
_baseOrientation(0.0f, 0.0f, 0.0f, 1.0f), _baseOrientation(0.0f, 0.0f, 0.0f, 1.0f),
_owningAvatarData(owningAvatar), _owningAvatarData(owningAvatar),
_isRaveGloveActive(false), _isRaveGloveActive(false),
_raveGloveMode(RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR) _raveGloveEffectsMode(RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR),
_raveGloveEffectsModeChanged(false)
{ {
// Start with two palms // Start with two palms
addNewPalm(); addNewPalm();
@ -160,7 +161,7 @@ int HandData::decodeRemoteData(unsigned char* sourceBuffer) {
} }
setRaveGloveActive((gloveFlags & GLOVE_FLAG_RAVE) != 0); setRaveGloveActive((gloveFlags & GLOVE_FLAG_RAVE) != 0);
// This is disabled for crash tracing. // Jeffrey: uncomment this to test locally, before unrolling it to the team.
// setRaveGloveMode(effectsMode); // setRaveGloveMode(effectsMode);
// One byte for error checking safety. // One byte for error checking safety.
@ -171,6 +172,13 @@ int HandData::decodeRemoteData(unsigned char* sourceBuffer) {
return sourceBuffer - startPosition; return sourceBuffer - startPosition;
} }
void HandData::setRaveGloveMode(int effectsMode) {
if (effectsMode != _raveGloveEffectsMode) {
_raveGloveEffectsModeChanged = true;
}
_raveGloveEffectsMode = effectsMode;
}
void HandData::setFingerTrailLength(unsigned int length) { void HandData::setFingerTrailLength(unsigned int length) {
for (size_t i = 0; i < getNumPalms(); ++i) { for (size_t i = 0; i < getNumPalms(); ++i) {
PalmData& palm = getPalms()[i]; PalmData& palm = getPalms()[i];

View file

@ -70,9 +70,9 @@ public:
int decodeRemoteData(unsigned char* sourceBuffer); int decodeRemoteData(unsigned char* sourceBuffer);
void setRaveGloveActive(bool active) { _isRaveGloveActive = active; } void setRaveGloveActive(bool active) { _isRaveGloveActive = active; }
virtual void setRaveGloveMode(int effectsMode) { _raveGloveMode = effectsMode; } void setRaveGloveMode(int effectsMode);
bool isRaveGloveActive() const { return _isRaveGloveActive; } bool isRaveGloveActive() const { return _isRaveGloveActive; }
int getRaveGloveMode() { return _raveGloveMode; } int getRaveGloveMode() { return _raveGloveEffectsMode; }
friend class AvatarData; friend class AvatarData;
protected: protected:
@ -81,7 +81,8 @@ protected:
AvatarData* _owningAvatarData; AvatarData* _owningAvatarData;
std::vector<PalmData> _palms; std::vector<PalmData> _palms;
bool _isRaveGloveActive; bool _isRaveGloveActive;
int _raveGloveMode; int _raveGloveEffectsMode;
bool _raveGloveEffectsModeChanged;
private: private:
// privatize copy ctor and assignment operator so copies of this object cannot be made // privatize copy ctor and assignment operator so copies of this object cannot be made
HandData(const HandData&); HandData(const HandData&);