288 lines
8.1 KiB
C++
288 lines
8.1 KiB
C++
![]() |
/////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// FILE : VideoEditorPauseMenu.cpp
|
||
|
// PURPOSE : the pausemenu menu tab for replay editor
|
||
|
// AUTHOR : Derek Payne
|
||
|
// STARTED : 11/09/2014
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "Frontend/VideoEditorPauseMenu.h"
|
||
|
|
||
|
#if GTA_REPLAY
|
||
|
#include "audio/frontendaudioentity.h"
|
||
|
#include "control/replay/ReplaySettings.h"
|
||
|
#include "Frontend/ButtonEnum.h"
|
||
|
#include "Frontend/CMenuBase.h"
|
||
|
#include "Frontend/VideoEditor/ui/Editor.h"
|
||
|
#include "Frontend/PauseMenu.h"
|
||
|
#include "Network/Live/livemanager.h"
|
||
|
#include "Network/NetworkInterface.h"
|
||
|
#include "Script/Script.h"
|
||
|
|
||
|
FRONTEND_OPTIMISATIONS()
|
||
|
|
||
|
bool CPauseVideoEditorMenu::sm_waitOnSignIn = false;
|
||
|
bool CPauseVideoEditorMenu::sm_waitOnSignInUi = false;
|
||
|
char CPauseVideoEditorMenu::sm_ButtonURL[MAX_NEWS_URL_LENGTH];
|
||
|
|
||
|
|
||
|
CPauseVideoEditorMenu::CPauseVideoEditorMenu( CMenuScreen& owner ): CMenuBase(owner),
|
||
|
m_isDisplayingNews(false),
|
||
|
m_storyTextPosted(false)
|
||
|
{
|
||
|
Reset();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
CPauseVideoEditorMenu::~CPauseVideoEditorMenu()
|
||
|
{
|
||
|
Reset();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void CPauseVideoEditorMenu::Reset()
|
||
|
{
|
||
|
sm_waitOnSignInUi = false;
|
||
|
sm_waitOnSignIn = false;
|
||
|
memset(sm_ButtonURL, '\0', MAX_NEWS_URL_LENGTH);
|
||
|
}
|
||
|
|
||
|
void CPauseVideoEditorMenu::Init()
|
||
|
{
|
||
|
Reset();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void CPauseVideoEditorMenu::Update()
|
||
|
{
|
||
|
CMenuBase::Update();
|
||
|
|
||
|
if (sm_waitOnSignInUi)
|
||
|
{
|
||
|
if (CLiveManager::IsSystemUiShowing()) // we were waiting on the ui, once appears, we wait on a sign in by the user
|
||
|
{
|
||
|
sm_waitOnSignInUi = false;
|
||
|
sm_waitOnSignIn = true;
|
||
|
|
||
|
Populate(MENU_UNIQUE_ID_REPLAY_EDITOR); // repopulate
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (sm_waitOnSignIn) // waiting on sign in by the user
|
||
|
{
|
||
|
// the !SystemShowing check was causing some issues on Durango, so made it Orbisy only.
|
||
|
|
||
|
if (CLiveManager::IsSignedIn() && NetworkInterface::IsCloudAvailable() ORBIS_ONLY( || !CLiveManager::IsSystemUiShowing() ) ) // if we are now signed in, or the ui is put away (Orbis only)
|
||
|
{
|
||
|
Reset(); // no longer waiting on sign in
|
||
|
|
||
|
Populate(MENU_UNIQUE_ID_REPLAY_EDITOR); // repopulate
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// update news events - 2205108
|
||
|
if (m_isDisplayingNews)
|
||
|
{
|
||
|
CNetworkPauseMenuNewsController& newsController = CNetworkPauseMenuNewsController::Get();
|
||
|
if(newsController.IsPendingStoryReady())
|
||
|
{
|
||
|
PostEditorStory(newsController.GetPendingStory(), true);
|
||
|
UpdateStoreColumnScroll(newsController.GetNumStories(), newsController.GetPendingStoryIndex());
|
||
|
CNetworkPauseMenuNewsController::Get().MarkPendingStoryAsShown();
|
||
|
m_storyTextPosted = false;
|
||
|
}
|
||
|
else if(!m_storyTextPosted && newsController.IsPendingStoryDataRcvd())
|
||
|
{
|
||
|
PostEditorStory(newsController.GetPendingStory(), false);
|
||
|
UpdateStoreColumnScroll(newsController.GetNumStories(), newsController.GetPendingStoryIndex());
|
||
|
m_storyTextPosted = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
bool CPauseVideoEditorMenu::UpdateInput( s32 sInput )
|
||
|
{
|
||
|
if( sInput == PAD_CROSS )
|
||
|
{
|
||
|
#if USE_SAVE_SYSTEM // If we've enabled the code to trigger a savegame on viewing a clip, we can't allow the player to enter the Replay Editor while they're on a mission or in director mode
|
||
|
const bool bIsOnMission = CTheScripts::GetPlayerIsOnAMission() || CTheScripts::GetPlayerIsInAnimalForm() || CTheScripts::GetPlayerIsRepeatingAMission();
|
||
|
#else // USE_SAVE_SYSTEM
|
||
|
// Viewing a clip while repeating a mission causes problems even if the savegame code is disabled, so we'll block the Replay Editor during a mission repeat
|
||
|
const bool bIsOnMission = CTheScripts::GetPlayerIsRepeatingAMission();
|
||
|
#endif // USE_SAVE_SYSTEM
|
||
|
|
||
|
if (!bIsOnMission)
|
||
|
{
|
||
|
const bool bNeedsToSignIn = RSG_PC ? false : !CLiveManager::IsSignedIn();
|
||
|
|
||
|
if ( (!sm_waitOnSignInUi) && (bNeedsToSignIn) )
|
||
|
{
|
||
|
CLiveManager::ShowSigninUi();
|
||
|
sm_waitOnSignInUi = true;
|
||
|
}
|
||
|
else if ( (!sm_waitOnSignInUi) && (!sm_waitOnSignIn) )
|
||
|
{
|
||
|
#if GTA_REPLAY
|
||
|
g_FrontendAudioEntity.PlaySound( "SELECT", "HUD_FRONTEND_DEFAULT_SOUNDSET" ); // play sound here as we never actually "enter" this menu
|
||
|
CPauseMenu::UpdateProfileFromMenuOptions(false);
|
||
|
CVideoEditorUi::Open(OFS_CODE_PAUSE_MENU);
|
||
|
#endif // #if GTA_REPLAY
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return CMenuBase::UpdateInput( sInput );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
bool CPauseVideoEditorMenu::Populate(MenuScreenId newScreenId)
|
||
|
{
|
||
|
bool result = false;
|
||
|
|
||
|
if(newScreenId.GetValue() == MENU_UNIQUE_ID_REPLAY_EDITOR)
|
||
|
{
|
||
|
bool bShowAcceptButton = true;
|
||
|
|
||
|
const bool bNeedsToSignIn = RSG_PC ? false : !CLiveManager::IsSignedIn();
|
||
|
|
||
|
#if USE_SAVE_SYSTEM // If we've enabled the code to trigger a savegame on viewing a clip, we can't allow the player to enter the Replay Editor while they're on a mission or in director mode
|
||
|
const bool bIsOnMission = CTheScripts::GetPlayerIsOnAMission() || CTheScripts::GetPlayerIsInAnimalForm() || CTheScripts::GetPlayerIsRepeatingAMission();
|
||
|
#else // USE_SAVE_SYSTEM
|
||
|
// Viewing a clip while repeating a mission causes problems even if the savegame code is disabled, so we'll block the Replay Editor during a mission repeat
|
||
|
const bool bIsOnMission = CTheScripts::GetPlayerIsRepeatingAMission();
|
||
|
#endif // USE_SAVE_SYSTEM
|
||
|
|
||
|
if (bIsOnMission)
|
||
|
{
|
||
|
PopulateWarning("PM_PANE_MOV", "VE_NOTAVAIL");
|
||
|
bShowAcceptButton = false;
|
||
|
}
|
||
|
else if (bNeedsToSignIn)
|
||
|
{
|
||
|
PopulateWarning("WARNING_NOT_CONNECTED_TITLE", "NOT_CONNECTED");
|
||
|
}
|
||
|
else if (!PopulateNews()) // populate the news
|
||
|
{
|
||
|
PopulateWarning("PM_PANE_MOV", "VE_ENTERVIDEOEDITOR");
|
||
|
}
|
||
|
|
||
|
if (bShowAcceptButton)
|
||
|
{
|
||
|
if( SUIContexts::IsActive( "HIDE_ACCEPTBUTTON" ) )
|
||
|
{
|
||
|
SUIContexts::Deactivate("HIDE_ACCEPTBUTTON");
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SUIContexts::Activate("HIDE_ACCEPTBUTTON");
|
||
|
}
|
||
|
|
||
|
result = true;
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
void CPauseVideoEditorMenu::PopulateWarning(const char* locTitle, const char* locBody)
|
||
|
{
|
||
|
ShowColumnWarning_Loc(PM_COLUMN_LEFT, 3, locBody, locTitle, 0, "PAUSE_MENU_WARNING_REDITOR", "REDITOR", IMG_ALIGN_RIGHT, "", true);
|
||
|
}
|
||
|
|
||
|
void CPauseVideoEditorMenu::LoseFocus()
|
||
|
{
|
||
|
Reset();
|
||
|
|
||
|
m_isDisplayingNews = false;
|
||
|
|
||
|
// Cleanup Newswire
|
||
|
CNetworkPauseMenuNewsController::Get().Reset();
|
||
|
}
|
||
|
|
||
|
void CPauseVideoEditorMenu::UpdateStoreColumnScroll(int iNumStories, int iSelectedStory)
|
||
|
{
|
||
|
char pszCaption[64];
|
||
|
CNumberWithinMessage pArrayOfNumbers[2];
|
||
|
pArrayOfNumbers[0].Set(iSelectedStory+1);
|
||
|
pArrayOfNumbers[1].Set(iNumStories);
|
||
|
|
||
|
CMessages::InsertNumbersAndSubStringsIntoString(TheText.Get("NEWS_NUM_STORIES"),pArrayOfNumbers,2,NULL,0,pszCaption,64);
|
||
|
CScaleformMenuHelper::SET_COLUMN_SCROLL(PM_COLUMN_LEFT, pszCaption);
|
||
|
}
|
||
|
|
||
|
|
||
|
bool CPauseVideoEditorMenu::PopulateNews()
|
||
|
{
|
||
|
if (CLiveManager::IsOnline() && NetworkInterface::IsCloudAvailable())
|
||
|
{
|
||
|
CNetworkPauseMenuNewsController& newsController = CNetworkPauseMenuNewsController::Get();
|
||
|
|
||
|
if(!m_isDisplayingNews && newsController.InitControl(NEWS_TYPE_ROCKSTAR_EDITOR_HASH))
|
||
|
{
|
||
|
int iNumStories = newsController.GetNumStories();
|
||
|
if(iNumStories > 1)
|
||
|
{
|
||
|
if(!SUIContexts::IsActive("STORE_CanScroll"))
|
||
|
{
|
||
|
SUIContexts::Activate("STORE_CanScroll");
|
||
|
CPauseMenu::RedrawInstructionalButtons();
|
||
|
}
|
||
|
UpdateStoreColumnScroll(iNumStories, newsController.GetPendingStoryIndex());
|
||
|
}
|
||
|
|
||
|
m_isDisplayingNews = true;
|
||
|
ShowColumnWarning(PM_COLUMN_LEFT, 3, "");
|
||
|
CScaleformMenuHelper::SET_BUSY_SPINNER(PM_COLUMN_MIDDLE, true);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
void CPauseVideoEditorMenu::PostEditorStory(CNetworkSCNewsStoryRequest* pNewsItem, bool bUpdateTexture)
|
||
|
{
|
||
|
CScaleformMenuHelper::SET_BUSY_SPINNER(PM_COLUMN_MIDDLE_RIGHT, false);
|
||
|
|
||
|
if(bUpdateTexture)
|
||
|
{
|
||
|
ShowColumnWarning(PM_COLUMN_LEFT, 3, pNewsItem->GetContent(), pNewsItem->GetHeadline(), 0, pNewsItem->GetTxdName(), pNewsItem->GetTxdName(), IMG_ALIGN_RIGHT);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ShowColumnWarning(PM_COLUMN_LEFT, 3, pNewsItem->GetContent(), pNewsItem->GetHeadline(), 0, "", "", IMG_ALIGN_RIGHT);
|
||
|
}
|
||
|
|
||
|
if(pNewsItem->HasExtraDataMember("buttonurl"))
|
||
|
{
|
||
|
pNewsItem->GetExtraNewsData("buttonurl", sm_ButtonURL, MAX_NEWS_URL_LENGTH);
|
||
|
}
|
||
|
|
||
|
if(pNewsItem->HasExtraDataMember("showbutton"))
|
||
|
{
|
||
|
int iShowButton = 0;
|
||
|
pNewsItem->GetExtraNewsData("showbutton", iShowButton);
|
||
|
SUIContexts::SetActive("SHOW_VIDEO_BUTTON", iShowButton == 1);
|
||
|
CPauseMenu::RedrawInstructionalButtons();
|
||
|
}
|
||
|
|
||
|
CScaleformMenuHelper::SET_BUSY_SPINNER(PM_COLUMN_MIDDLE, false);
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif //GTA_REPLAY
|
||
|
|
||
|
// eof
|