bool Move::unpackMove(BitStream *stream, const Move* basemove, bool alwaysReadAll) { bool readMove = alwaysReadAll; if(!readMove) { readMove = stream->readFlag(); } if (readMove) { pyaw = stream->readFlag() ? stream->readInt(16) : basemove->pyaw; ppitch = stream->readFlag() ? stream->readInt(16) : basemove->ppitch; proll = stream->readFlag() ? stream->readInt(16) : basemove->proll; px = stream->readFlag() ? stream->readInt(6) : basemove->px; py = stream->readFlag() ? stream->readInt(6) : basemove->py; pz = stream->readFlag() ? stream->readInt(6) : basemove->pz; freeLook = stream->readFlag(); deviceIsKeyboardMouse = stream->readFlag(); bool triggersDiffer = stream->readFlag(); for (S32 i = 0; i< MaxTriggerKeys; i++) trigger[i] = triggersDiffer ? stream->readFlag() : basemove->trigger[i]; unclamp(); } return readMove; }
void Move::unpack(BitStream *stream, const Move * basemove) { bool alwaysReadAll = basemove!=NULL; if (!basemove) basemove=&NullMove; if (alwaysReadAll || stream->readFlag()) { pyaw = stream->readFlag() ? stream->readInt(16) : basemove->pyaw; ppitch = stream->readFlag() ? stream->readInt(16) : basemove->ppitch; proll = stream->readFlag() ? stream->readInt(16) : basemove->proll; px = stream->readFlag() ? stream->readInt(6) : basemove->px; py = stream->readFlag() ? stream->readInt(6) : basemove->py; pz = stream->readFlag() ? stream->readInt(6) : basemove->pz; freeLook = stream->readFlag(); deviceIsKeyboardMouse = stream->readFlag(); bool triggersDiffer = stream->readFlag(); for (S32 i = 0; i< MaxTriggerKeys; i++) trigger[i] = triggersDiffer ? stream->readFlag() : basemove->trigger[i]; unclamp(); } else *this = *basemove; }
void Move::clamp() { // If yaw/pitch/roll goes equal or greater than -PI/+PI it // flips the direction of the rotation... we protect against // that by clamping before the conversion. yaw = clampAngleClamp( yaw ); pitch = clampAngleClamp( pitch ); roll = clampAngleClamp( roll ); // angles are all 16 bit. pyaw = FANG2IANG(yaw); ppitch = FANG2IANG(pitch); proll = FANG2IANG(roll); px = clampRangeClamp(x); py = clampRangeClamp(y); pz = clampRangeClamp(z); unclamp(); }