Send number of frustums in packet

This commit is contained in:
Clement 2018-04-24 19:09:16 -07:00
parent ddde0228ba
commit a283d28686
4 changed files with 21 additions and 7 deletions

View file

@ -600,12 +600,17 @@ void Agent::sendAvatarIdentityPacket() {
void Agent::sendAvatarViewFrustum() {
auto scriptedAvatar = DependencyManager::get<ScriptableAvatar>();
ViewFrustum view;
view.setPosition(scriptedAvatar->getWorldPosition());
view.setOrientation(scriptedAvatar->getHeadOrientation());
view.calculate();
uint8_t numFrustums = 1;
auto viewFrustumByteArray = view.toByteArray();
auto avatarPacket = NLPacket::create(PacketType::ViewFrustum, viewFrustumByteArray.size());
auto avatarPacket = NLPacket::create(PacketType::ViewFrustum, viewFrustumByteArray.size() + sizeof(numFrustums));
avatarPacket->writePrimitive(numFrustums);
avatarPacket->write(viewFrustumByteArray);
DependencyManager::get<NodeList>()->broadcastToNodes(std::move(avatarPacket),

View file

@ -126,13 +126,18 @@ void AvatarMixerClientData::removeFromRadiusIgnoringSet(SharedNodePointer self,
}
}
void AvatarMixerClientData::readViewFrustumPacket(const QByteArray& message) {
void AvatarMixerClientData::readViewFrustumPacket(QByteArray message) {
_currentViewFrustums.clear();
uint8_t numFrustums = 0;
memcpy(&numFrustums, message.constData(), sizeof(numFrustums));
message.remove(0, sizeof(numFrustums));
auto offset = 0;
while (offset < message.size()) {
for (uint8_t i = 0; i < numFrustums; ++i) {
ViewFrustum frustum;
offset += frustum.fromByteArray(message);
auto bytesRead = frustum.fromByteArray(message);
message.remove(0, bytesRead);
_currentViewFrustums.push_back(frustum);
}
}

View file

@ -98,7 +98,7 @@ public:
void removeFromRadiusIgnoringSet(SharedNodePointer self, const QUuid& other);
void ignoreOther(SharedNodePointer self, SharedNodePointer other);
void readViewFrustumPacket(const QByteArray& message);
void readViewFrustumPacket(QByteArray message);
bool otherAvatarInView(const AABox& otherAvatarBox);

View file

@ -5805,12 +5805,16 @@ void Application::update(float deltaTime) {
}
void Application::sendAvatarViewFrustum() {
uint8_t numFrustums = 1;
QByteArray viewFrustumByteArray = _viewFrustum.toByteArray();
if (_hasSecondaryViewFrustum) {
++numFrustums;
viewFrustumByteArray += _secondaryViewFrustum.toByteArray();
}
auto avatarPacket = NLPacket::create(PacketType::ViewFrustum, viewFrustumByteArray.size());
auto avatarPacket = NLPacket::create(PacketType::ViewFrustum, viewFrustumByteArray.size() + sizeof(numFrustums));
avatarPacket->writePrimitive(numFrustums);
avatarPacket->write(viewFrustumByteArray);
DependencyManager::get<NodeList>()->broadcastToNodes(std::move(avatarPacket), NodeSet() << NodeType::AvatarMixer);