in ID@XboxSDK/PositionalChat/Xbox/PositionalChat.cpp [134:357]
void Sample::Update(DX::StepTimer const& timer)
{
PIXBeginEvent(PIX_COLOR_DEFAULT, L"Update");
float elapsedTime = float(timer.GetElapsedSeconds());
if (m_refreshTimer <= 0.0f && m_needNames)
{
LoadUserDisplayNames();
}
else
{
m_refreshTimer -= elapsedTime;
}
UpdateUIState();
UpdateControllerUIState();
if (m_activationArgs != nullptr)
{
if (m_inLobby)
{
JoinSession();
}
else if (!m_leavingToJoin)
{
m_leavingToJoin = true;
if (m_inChat)
{
LeaveChat();
GetChatIntegrationLayer()->ProcessDataFrames();
}
auto users = User::Users;
for (auto user : users)
{
m_multiplayerManager->LobbySession->RemoveLocalUser(user);
}
}
}
auto leave = false;
auto exiting = false;
for (unsigned x = 0; x < MAXUSERS; x++)
{
auto pad = m_gamePad->GetState(x);
if (pad.IsConnected())
{
auto padUser = GamepadFromPadId(m_gamePad->GetCapabilities(x).id)->User;
m_gamePadButtons.Update(pad);
if (padUser == nullptr || !padUser->IsSignedIn)
{
if (!m_inLobby && m_gamePadButtons.y != GamePad::ButtonStateTracker::PRESSED)
{
// A non-signed in user can only attempt to sign in
continue;
}
}
if (m_inLobby)
{
if (m_gamePadButtons.y == GamePad::ButtonStateTracker::PRESSED)
{
BindControllerToUser(GamepadFromPadId(m_gamePad->GetCapabilities(x).id));
}
else if (m_gamePadButtons.a == GamePad::ButtonStateTracker::PRESSED)
{
if (m_context == nullptr)
{
m_context = ref new XboxLiveContext(padUser);
}
JoinSession();
}
else if (m_gamePadButtons.b == GamePad::ButtonStateTracker::PRESSED)
{
ExitSample();
exiting = true;
}
else if (m_gamePadButtons.x == GamePad::ButtonStateTracker::PRESSED)
{
if (m_context == nullptr)
{
m_context = ref new XboxLiveContext(padUser);
}
SearchJoinableUsers(GamepadFromPadId(m_gamePad->GetCapabilities(x).id)->User);
}
}
else if (m_selectPlayer)
{
if (m_gamePadButtons.b == GamePad::ButtonStateTracker::PRESSED)
{
leave = true;
}
else if (m_gamePadButtons.x == GamePad::ButtonStateTracker::PRESSED)
{
SearchJoinableUsers(padUser);
}
}
else
{
if (m_gamePadButtons.b == GamePad::ButtonStateTracker::PRESSED)
{
auto users = User::Users;
for (auto user : users)
{
m_multiplayerManager->LobbySession->RemoveLocalUser(user);
}
if (m_inChat)
{
LeaveChat();
}
}
else if (m_gamePadButtons.y == GamePad::ButtonStateTracker::PRESSED)
{
SendTextMessage(padUser->XboxUserId);
}
else if (m_gamePadButtons.menu == GamePad::ButtonStateTracker::PRESSED)
{
InviteUsers(padUser);
}
else if (m_gamePadButtons.leftShoulder == GamePad::ButtonStateTracker::PRESSED)
{
ChangeChannel(padUser, -1);
}
else if (m_gamePadButtons.rightShoulder == GamePad::ButtonStateTracker::PRESSED)
{
ChangeChannel(padUser, 1);
}
else if (m_gamePadButtons.rightStick == GamePad::ButtonStateTracker::PRESSED)
{
Windows::Xbox::Multiplayer::PartyChat::IsPartyChatSuppressed = !m_partySuppressed;
}
else if (m_gamePadButtons.view == GamePad::ButtonStateTracker::PRESSED)
{
m_adjustPosition = !m_adjustPosition;
}
else if (m_gamePadButtons.dpadUp == GamePad::ButtonStateTracker::PRESSED)
{
m_reverbIndex++;
if (m_reverbIndex >= NUM_PRESETS - 1)
{
m_reverbIndex = 0;
}
m_gameAudio->SetReverb(m_reverbIndex);
}
else if (m_gamePadButtons.dpadDown == GamePad::ButtonStateTracker::PRESSED)
{
m_reverbIndex--;
if (m_reverbIndex < 0)
{
m_reverbIndex = NUM_PRESETS - 1;
}
m_gameAudio->SetReverb(m_reverbIndex);
}
else if (m_gamePadButtons.dpadLeft == GamePad::ButtonStateTracker::PRESSED ||
m_gamePadButtons.dpadRight == GamePad::ButtonStateTracker::PRESSED)
{
//Adjust what direction the emitter is facing
float fShoulders = 0;
if (m_gamePadButtons.dpadLeft == GamePad::ButtonStateTracker::PRESSED)
{
fShoulders -= 1.0f;
}
if (m_gamePadButtons.dpadRight == GamePad::ButtonStateTracker::PRESSED)
{
fShoulders += 1.0f;
}
m_gameAudio->AdjustEmitterAngle(fShoulders, &m_fEmitterAngle);
}
}
m_gamePadButtons.Reset();
m_gameAudio->Update(pad.thumbSticks.rightX * moveScalar, pad.thumbSticks.rightY * moveScalar);
}
else
{
m_gamePadButtons.Reset();
}
}
auto pad = m_gamePad->GetState(0);
if (pad.IsConnected())
{
concurrency::critical_section::scoped_lock lock(m_uiLock);
m_gamePadButtons.Update(pad);
m_ui->Update(elapsedTime, pad);
}
else
{
m_gamePadButtons.Reset();
}
if (leave)
{
m_selectPlayer = false;
LeaveSession();
}
if (!exiting)
{
ProcessMpmMessages();
}
GetChatIntegrationLayer()->ProcessStateChanges();
GetChatIntegrationLayer()->ProcessStreamStateChanges();
GetChatIntegrationLayer()->ProcessPostDecodeBuffers();
PIXEndEvent();
}