123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #include "platform/input/razerHydra/razerHydraData.h"
- #include "platform/input/razerHydra/razerHydraUtil.h"
- RazerHyrdaControllerData::RazerHyrdaControllerData()
- {
- reset();
- }
- void RazerHyrdaControllerData::reset()
- {
- mDataSet = false;
- mShoulder = false;
- mThumb = false;
- mStart = false;
- mButton1 = false;
- mButton2 = false;
- mButton3 = false;
- mButton4 = false;
- mIsDocked = false;
- }
- void RazerHyrdaControllerData::setData(const sixenseControllerData& data, const F32& maxAxisRadius)
- {
- // Controller position
- RazerHydraUtil::convertPosition(data.pos, mRawPos[0], mRawPos[1], mRawPos[2]);
- mPos[0] = (S32)mFloor(mRawPos[0]);
- mPos[1] = (S32)mFloor(mRawPos[1]);
- mPos[2] = (S32)mFloor(mRawPos[2]);
- mPosPoint.set(mPos[0], mPos[1], mPos[2]);
- // Controller rotation
- RazerHydraUtil::convertRotation(data.rot_mat, mRot);
- mRotQuat.set(mRot);
- // Controller rotation as axis, but only if not docked
- if(!data.is_docked)
- {
- RazerHydraUtil::calculateAxisRotation(mRot, maxAxisRadius, mRotAxis);
- }
- else
- {
- mRotAxis.x = 0.0f;
- mRotAxis.y = 0.0f;
- }
- // Thumb stick
- mThumbStick[0] = data.joystick_x;
- mThumbStick[1] = data.joystick_y;
- // Trigger
- mTrigger = data.trigger;
- //Buttons
- mShoulder = data.buttons & SIXENSE_BUTTON_BUMPER;
- mThumb = data.buttons & SIXENSE_BUTTON_JOYSTICK;
- mStart = data.buttons & SIXENSE_BUTTON_START;
- mButton1 = data.buttons & SIXENSE_BUTTON_1;
- mButton2 = data.buttons & SIXENSE_BUTTON_2;
- mButton3 = data.buttons & SIXENSE_BUTTON_3;
- mButton4 = data.buttons & SIXENSE_BUTTON_4;
- // Other data
- mIsDocked = data.is_docked;
- // Store the current sequence number
- mSequenceNum = data.sequence_number;
- mDataSet = true;
- }
- U32 RazerHyrdaControllerData::compare(RazerHyrdaControllerData* other)
- {
- S32 result = DIFF_NONE;
- // Check position
- if(mDataSet)
- {
- if(mPos[0] != other->mPos[0])
- result |= DIFF_POSX;
- if(mPos[1] != other->mPos[1])
- result |= DIFF_POSY;
- if(mPos[2] != other->mPos[2])
- result |= DIFF_POSZ;
- }
- else
- {
- result |= DIFF_POS;
- }
- // Check rotation
- if(mRotQuat != other->mRotQuat || !mDataSet)
- {
- result |= DIFF_ROT;
- }
- // Check rotation as axis
- if(mRotAxis.x != other->mRotAxis.x || !mDataSet)
- {
- result |= DIFF_ROTAXISX;
- }
- if(mRotAxis.y != other->mRotAxis.y || !mDataSet)
- {
- result |= DIFF_ROTAXISY;
- }
- // Check thumb stick
- if(mThumbStick[0] != other->mThumbStick[0] || !mDataSet)
- {
- result |= DIFF_AXISX;
- }
- if(mThumbStick[1] != other->mThumbStick[1] || !mDataSet)
- {
- result |= DIFF_AXISY;
- }
- // Check trigger
- if(mTrigger != other->mTrigger || !mDataSet)
- {
- result |= DIFF_TRIGGER;
- }
- // Check buttons
- if(mShoulder != other->mShoulder)
- {
- result |= DIFF_BUTTON_SHOULDER;
- }
- if(mThumb != other->mThumb)
- {
- result |= DIFF_BUTTON_THUMB;
- }
- if(mStart != other->mStart)
- {
- result |= DIFF_BUTTON_START;
- }
- if(mButton1 != other->mButton1)
- {
- result |= DIFF_BUTTON1;
- }
- if(mButton2 != other->mButton2)
- {
- result |= DIFF_BUTTON2;
- }
- if(mButton3 != other->mButton3)
- {
- result |= DIFF_BUTTON3;
- }
- if(mButton4 != other->mButton4)
- {
- result |= DIFF_BUTTON4;
- }
- return result;
- }
- U32 RazerHyrdaControllerData::compareMeta(RazerHyrdaControllerData* other)
- {
- S32 result = DIFF_NONE;
- if(mIsDocked != other->mIsDocked || !mDataSet)
- {
- result |= METADIFF_DOCKED;
- }
- return result;
- }
|