mirror of
https://github.com/lubosz/overte.git
synced 2025-08-08 03:08:00 +02:00
commit
4e1eaf8337
6 changed files with 58 additions and 2 deletions
|
@ -348,6 +348,16 @@ void AudioMixer::readPendingDatagrams() {
|
||||||
|| mixerPacketType == PacketTypeSilentAudioFrame) {
|
|| mixerPacketType == PacketTypeSilentAudioFrame) {
|
||||||
|
|
||||||
nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket);
|
nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket);
|
||||||
|
} else if (mixerPacketType == PacketTypeMuteEnvironment) {
|
||||||
|
QByteArray packet = receivedPacket;
|
||||||
|
populatePacketHeader(packet, PacketTypeMuteEnvironment);
|
||||||
|
|
||||||
|
foreach (const SharedNodePointer& node, nodeList->getNodeHash()) {
|
||||||
|
if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && node != nodeList->sendingNodeForPacket(receivedPacket)) {
|
||||||
|
nodeList->writeDatagram(packet, packet.size(), node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// let processNodeData handle it.
|
// let processNodeData handle it.
|
||||||
nodeList->processNodeData(senderSockAddr, receivedPacket);
|
nodeList->processNodeData(senderSockAddr, receivedPacket);
|
||||||
|
|
|
@ -370,7 +370,7 @@ function moveOverlays() {
|
||||||
toolsX = windowDimensions.x - 8 - toolWidth;
|
toolsX = windowDimensions.x - 8 - toolWidth;
|
||||||
toolsY = (windowDimensions.y - toolsHeight) / 2;
|
toolsY = (windowDimensions.y - toolsHeight) / 2;
|
||||||
|
|
||||||
Overlays.addOverlay(firstModel, {
|
Overlays.editOverlay(firstModel, {
|
||||||
x: toolsX, y: toolsY + ((toolHeight + toolVerticalSpacing) * 0), width: toolWidth, height: toolHeight,
|
x: toolsX, y: toolsY + ((toolHeight + toolVerticalSpacing) * 0), width: toolWidth, height: toolHeight,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,20 @@ void DatagramProcessor::processDatagrams() {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PacketTypeMuteEnvironment: {
|
||||||
|
glm::vec3 position;
|
||||||
|
float radius;
|
||||||
|
|
||||||
|
int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment);
|
||||||
|
memcpy(&position, incomingPacket.constData() + headerSize, sizeof(glm::vec3));
|
||||||
|
memcpy(&radius, incomingPacket.constData() + headerSize + sizeof(glm::vec3), sizeof(float));
|
||||||
|
|
||||||
|
if (glm::distance(Application::getInstance()->getAvatar()->getPosition(), position) < radius
|
||||||
|
&& !Application::getInstance()->getAudio()->getMuted()) {
|
||||||
|
Application::getInstance()->getAudio()->toggleMute();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
nodeList->processNodeData(senderSockAddr, incomingPacket);
|
nodeList->processNodeData(senderSockAddr, incomingPacket);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -68,6 +68,7 @@ const float DEFAULT_FACESHIFT_EYE_DEFLECTION = 0.25f;
|
||||||
const float DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER = 1.0f;
|
const float DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER = 1.0f;
|
||||||
const int ONE_SECOND_OF_FRAMES = 60;
|
const int ONE_SECOND_OF_FRAMES = 60;
|
||||||
const int FIVE_SECONDS_OF_FRAMES = 5 * ONE_SECOND_OF_FRAMES;
|
const int FIVE_SECONDS_OF_FRAMES = 5 * ONE_SECOND_OF_FRAMES;
|
||||||
|
const float MUTE_RADIUS = 50;
|
||||||
|
|
||||||
Menu::Menu() :
|
Menu::Menu() :
|
||||||
_actionHash(),
|
_actionHash(),
|
||||||
|
@ -397,6 +398,11 @@ Menu::Menu() :
|
||||||
false,
|
false,
|
||||||
appInstance->getAudio(),
|
appInstance->getAudio(),
|
||||||
SLOT(toggleMute()));
|
SLOT(toggleMute()));
|
||||||
|
addActionToQMenuAndActionHash(audioDebugMenu,
|
||||||
|
MenuOption::MuteEnvironment,
|
||||||
|
0,
|
||||||
|
this,
|
||||||
|
SLOT(muteEnvironment()));
|
||||||
addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioToneInjection,
|
addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioToneInjection,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
|
@ -1000,6 +1006,30 @@ void Menu::multipleDestinationsDecision(const QJsonObject& userData, const QJson
|
||||||
disconnect(manager, &LocationManager::multipleDestinationsFound, this, &Menu::multipleDestinationsDecision);
|
disconnect(manager, &LocationManager::multipleDestinationsFound, this, &Menu::multipleDestinationsDecision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::muteEnvironment() {
|
||||||
|
int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment);
|
||||||
|
int packetSize = headerSize + sizeof(glm::vec3) + sizeof(float);
|
||||||
|
|
||||||
|
glm::vec3 position = Application::getInstance()->getAvatar()->getPosition();
|
||||||
|
|
||||||
|
char* packet = (char*)malloc(packetSize);
|
||||||
|
populatePacketHeader(packet, PacketTypeMuteEnvironment);
|
||||||
|
memcpy(packet + headerSize, &position, sizeof(glm::vec3));
|
||||||
|
memcpy(packet + headerSize + sizeof(glm::vec3), &MUTE_RADIUS, sizeof(float));
|
||||||
|
|
||||||
|
QByteArray mutePacket(packet, packetSize);
|
||||||
|
|
||||||
|
// grab our audio mixer from the NodeList, if it exists
|
||||||
|
SharedNodePointer audioMixer = NodeList::getInstance()->soloNodeOfType(NodeType::AudioMixer);
|
||||||
|
|
||||||
|
if (audioMixer) {
|
||||||
|
// send off this mute packet
|
||||||
|
NodeList::getInstance()->writeDatagram(mutePacket, audioMixer);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(packet);
|
||||||
|
}
|
||||||
|
|
||||||
void Menu::goToLocation() {
|
void Menu::goToLocation() {
|
||||||
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
|
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
|
||||||
glm::vec3 avatarPos = myAvatar->getPosition();
|
glm::vec3 avatarPos = myAvatar->getPosition();
|
||||||
|
|
|
@ -191,6 +191,7 @@ private slots:
|
||||||
void audioMuteToggled();
|
void audioMuteToggled();
|
||||||
void namedLocationCreated(LocationManager::NamedLocationCreateResponse response);
|
void namedLocationCreated(LocationManager::NamedLocationCreateResponse response);
|
||||||
void multipleDestinationsDecision(const QJsonObject& userData, const QJsonObject& placeData);
|
void multipleDestinationsDecision(const QJsonObject& userData, const QJsonObject& placeData);
|
||||||
|
void muteEnvironment();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Menu* _instance;
|
static Menu* _instance;
|
||||||
|
@ -339,6 +340,7 @@ namespace MenuOption {
|
||||||
const QString Models = "Models";
|
const QString Models = "Models";
|
||||||
const QString MoveWithLean = "Move with Lean";
|
const QString MoveWithLean = "Move with Lean";
|
||||||
const QString MuteAudio = "Mute Microphone";
|
const QString MuteAudio = "Mute Microphone";
|
||||||
|
const QString MuteEnvironment = "Mute Environment";
|
||||||
const QString NameLocation = "Name this location";
|
const QString NameLocation = "Name this location";
|
||||||
const QString NewVoxelCullingMode = "New Voxel Culling Mode";
|
const QString NewVoxelCullingMode = "New Voxel Culling Mode";
|
||||||
const QString OctreeStats = "Voxel and Particle Statistics";
|
const QString OctreeStats = "Voxel and Particle Statistics";
|
||||||
|
|
|
@ -39,7 +39,7 @@ enum PacketType {
|
||||||
PacketTypeRequestAssignment,
|
PacketTypeRequestAssignment,
|
||||||
PacketTypeCreateAssignment,
|
PacketTypeCreateAssignment,
|
||||||
PacketTypeDomainOAuthRequest,
|
PacketTypeDomainOAuthRequest,
|
||||||
PacketTypeDataServerGet, // reusable
|
PacketTypeMuteEnvironment,
|
||||||
PacketTypeDataServerSend, // reusable
|
PacketTypeDataServerSend, // reusable
|
||||||
PacketTypeDataServerConfirm,
|
PacketTypeDataServerConfirm,
|
||||||
PacketTypeVoxelQuery,
|
PacketTypeVoxelQuery,
|
||||||
|
|
Loading…
Reference in a new issue