Example #1
0
int AvatarMixerClientData::parseData(ReceivedMessage& message) {

    // pull the sequence number from the data first
    uint16_t sequenceNumber;

    message.readPrimitive(&sequenceNumber);
    
    if (sequenceNumber < _lastReceivedSequenceNumber && _lastReceivedSequenceNumber != UINT16_MAX) {
        incrementNumOutOfOrderSends();
    }
    _lastReceivedSequenceNumber = sequenceNumber;

    // compute the offset to the data payload
    return _avatar->parseDataFromBuffer(message.readWithoutCopy(message.getBytesLeftToRead()));
}
Example #2
0
int AvatarMixerClientData::parseData(ReceivedMessage& message, const SlaveSharedData& slaveSharedData) {
    // pull the sequence number from the data first
    uint16_t sequenceNumber;

    message.readPrimitive(&sequenceNumber);

    if (sequenceNumber < _lastReceivedSequenceNumber && _lastReceivedSequenceNumber != UINT16_MAX) {
        incrementNumOutOfOrderSends();
    }
    _lastReceivedSequenceNumber = sequenceNumber;
    glm::vec3 oldPosition = getPosition();
    bool oldHasPriority = _avatar->getHasPriority();

    // compute the offset to the data payload
    if (!_avatar->parseDataFromBuffer(message.readWithoutCopy(message.getBytesLeftToRead()))) {
        return false;
    }

    // Regardless of what the client says, restore the priority as we know it without triggering any update.
    _avatar->setHasPriorityWithoutTimestampReset(oldHasPriority);

    auto newPosition = getPosition();
    if (newPosition != oldPosition) {
//#define AVATAR_HERO_TEST_HACK
#ifdef AVATAR_HERO_TEST_HACK
        {
            const static QString heroKey { "HERO" };
            _avatar->setPriorityAvatar(_avatar->getDisplayName().contains(heroKey));
        }
#else
        EntityTree& entityTree = *slaveSharedData.entityTree;
        FindPriorityZone findPriorityZone { newPosition, false } ;
        entityTree.recurseTreeWithOperation(&FindPriorityZone::operation, &findPriorityZone);
        _avatar->setHasPriority(findPriorityZone.isInPriorityZone);
        //if (findPriorityZone.isInPriorityZone) {
        //    qCWarning(avatars) << "Avatar" << _avatar->getSessionDisplayName() << "in hero zone";
        //}
#endif
    }

    return true;
}