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() { void Agent::sendAvatarViewFrustum() {
auto scriptedAvatar = DependencyManager::get<ScriptableAvatar>(); auto scriptedAvatar = DependencyManager::get<ScriptableAvatar>();
ViewFrustum view; ViewFrustum view;
view.setPosition(scriptedAvatar->getWorldPosition()); view.setPosition(scriptedAvatar->getWorldPosition());
view.setOrientation(scriptedAvatar->getHeadOrientation()); view.setOrientation(scriptedAvatar->getHeadOrientation());
view.calculate();
uint8_t numFrustums = 1;
auto viewFrustumByteArray = view.toByteArray(); 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); avatarPacket->write(viewFrustumByteArray);
DependencyManager::get<NodeList>()->broadcastToNodes(std::move(avatarPacket), 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(); _currentViewFrustums.clear();
uint8_t numFrustums = 0;
memcpy(&numFrustums, message.constData(), sizeof(numFrustums));
message.remove(0, sizeof(numFrustums));
auto offset = 0; for (uint8_t i = 0; i < numFrustums; ++i) {
while (offset < message.size()) {
ViewFrustum frustum; ViewFrustum frustum;
offset += frustum.fromByteArray(message); auto bytesRead = frustum.fromByteArray(message);
message.remove(0, bytesRead);
_currentViewFrustums.push_back(frustum); _currentViewFrustums.push_back(frustum);
} }
} }

View file

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

View file

@ -5805,12 +5805,16 @@ void Application::update(float deltaTime) {
} }
void Application::sendAvatarViewFrustum() { void Application::sendAvatarViewFrustum() {
uint8_t numFrustums = 1;
QByteArray viewFrustumByteArray = _viewFrustum.toByteArray(); QByteArray viewFrustumByteArray = _viewFrustum.toByteArray();
if (_hasSecondaryViewFrustum) { if (_hasSecondaryViewFrustum) {
++numFrustums;
viewFrustumByteArray += _secondaryViewFrustum.toByteArray(); 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); avatarPacket->write(viewFrustumByteArray);
DependencyManager::get<NodeList>()->broadcastToNodes(std::move(avatarPacket), NodeSet() << NodeType::AvatarMixer); DependencyManager::get<NodeList>()->broadcastToNodes(std::move(avatarPacket), NodeSet() << NodeType::AvatarMixer);