Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
235 changes: 235 additions & 0 deletions Transcendence/CExtensionsSession.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
// CExtensionsSession.cpp
//
// CExtensionsSession class
// Copyright (c) 2012 by Kronosaur Productions, LLC. All Rights Reserved.

#include "PreComp.h"
#include "Transcendence.h"

#define CMD_CLOSE_SESSION CONSTLIT("cmdCloseSession")
#define CMD_OK_SESSION CONSTLIT("cmdOKSession")
#define CMD_REFRESH CONSTLIT("cmdRefresh")
#define CMD_REFRESH_COMPLETE CONSTLIT("cmdRefreshComplete")

#define ID_CTRL_TITLE CONSTLIT("ctrlTitle")
#define ID_CTRL_WAIT CONSTLIT("ctrlWait")
#define ID_MESSAGE CONSTLIT("idMessage")
#define ID_LIST CONSTLIT("idList")

#define EVENT_ON_DOUBLE_CLICK CONSTLIT("onDoubleClick")

#define PROP_COLOR CONSTLIT("color")
#define PROP_FONT CONSTLIT("font")
#define PROP_POSITION CONSTLIT("position")
#define PROP_SCALE CONSTLIT("scale")
#define PROP_TEXT CONSTLIT("text")
#define PROP_VIEWPORT_HEIGHT CONSTLIT("viewportHeight")

#define ERR_DESC CONSTLIT("Unable to retrieve extensions: %s")
#define ERR_TITLE CONSTLIT("Unable to list extensions")

const int ENTRY_WIDTH = 720;

CExtensionsSession::CExtensionsSession (CHumanInterface &HI, CCloudService &Service, CExtensionCollection &Extensions, bool bDebugMode) : IHISession(HI),
m_Service(Service),
m_Extensions(Extensions),
m_bDebugMode(bDebugMode)

// CExtensionsSession constructor

{
}

void CExtensionsSession::CmdDone (void)

// CmdDone
//
// Close the session.

{
m_HI.ClosePopupSession();
}

void CExtensionsSession::CmdRefresh ()

// CmdRefresh
//
// Refresh the list

{
const CVisualPalette &VI = m_HI.GetVisuals();
RECT rcCenter;
VI.GetWidescreenRect(&rcCenter);

// Done with current list

StopPerformance(ID_LIST);

// Create a task to read the list of save files from disk

m_HI.AddBackgroundTask(new CListExtensionsTask(m_HI, m_Extensions, ENTRY_WIDTH, m_bDebugMode), 0, this, CMD_REFRESH_COMPLETE);

// Create a wait animation

IAnimatron *pAni;
VI.CreateWaitAnimation(NULL, ID_CTRL_WAIT, rcCenter, &pAni);
StartPerformance(pAni, ID_CTRL_WAIT, CReanimator::SPR_FLAG_DELETE_WHEN_DONE);
}

void CExtensionsSession::CmdRefreshComplete (CListExtensionsTask *pTask)

// CmdRefreshComplete
//
// Done with refresh

{
const CVisualPalette &VI = m_HI.GetVisuals();
RECT rcRect;
VI.GetWidescreenRect(&rcRect);

// Done with wait animation

StopPerformance(ID_CTRL_WAIT);
m_bWaitingForRefresh = false;

// Check for error

/*
CString sError;
if (pTask->GetResult(&sError) != NOERROR)
{
IAnimatron *pMsg;
VI.CreateMessagePane(NULL, ID_MESSAGE, ERR_TITLE, strPatternSubst(ERR_DESC, sError), rcRect, 0, &pMsg);

StartPerformance(pMsg, ID_MESSAGE, CReanimator::SPR_FLAG_DELETE_WHEN_DONE);
return;
}
*/
// Get the list

IAnimatron *pList = pTask->GetListHandoff();

// Show it

RECT rcList;
pList->GetSpacingRect(&rcList);

pList->SetPropertyVector(PROP_POSITION, CVector(rcRect.left + (RectWidth(rcRect) - ENTRY_WIDTH) / 2, rcRect.top));
pList->SetPropertyVector(PROP_SCALE, CVector(ENTRY_WIDTH, RectHeight(rcRect)));
pList->SetPropertyMetric(PROP_VIEWPORT_HEIGHT, (Metric)RectHeight(rcRect));

StartPerformance(pList, ID_LIST, CReanimator::SPR_FLAG_DELETE_WHEN_DONE);

}

ALERROR CExtensionsSession::OnCommand (const CString &sCmd, void *pData)

// OnCommand
//
// Handle a command

{
if (strEquals(sCmd, CMD_CLOSE_SESSION))
CmdDone();
else if (strEquals(sCmd, CMD_OK_SESSION))
#ifdef STEAM_BUILD
CmdDone();
#else
CmdDone();
#endif
else if (strEquals(sCmd, CMD_REFRESH))
CmdRefresh();
else if (strEquals(sCmd, CMD_REFRESH_COMPLETE))
CmdRefreshComplete((CListExtensionsTask *)pData);

return NOERROR;
}

ALERROR CExtensionsSession::OnInit (CString *retsError)

// OnInit
//
// Initialize

{
const CVisualPalette &VI = m_HI.GetVisuals();
RECT rcCenter;
VI.GetWidescreenRect(&rcCenter);

// Create a task to read the list of extensions from disk

m_HI.AddBackgroundTask(new CListExtensionsTask(m_HI, m_Extensions, ENTRY_WIDTH, m_bDebugMode), 0, this, CMD_REFRESH_COMPLETE);
m_bWaitingForRefresh = true;

// Create the title and menu

CUIHelper Helper(m_HI);
TArray<CUIHelper::SMenuEntry> Menu;
DWORD dwOptions = 0;

#ifdef STEAM_BUILD
dwOptions = CUIHelper::OPTION_SESSION_OK_BUTTON | CUIHelper::OPTION_SESSION_NO_CANCEL_BUTTON;
#else
CUIHelper::SMenuEntry *pEntry = Menu.Insert();
pEntry->sCommand = CMD_REFRESH;
pEntry->sLabel = CONSTLIT("Refresh");

dwOptions = CUIHelper::OPTION_SESSION_ADD_EXTENSION_BUTTON;
#endif

IAnimatron *pTitle;
Helper.CreateSessionTitle(this, m_Service, CONSTLIT("Extensions"), &Menu, dwOptions, &pTitle);
StartPerformance(pTitle, ID_CTRL_TITLE, CReanimator::SPR_FLAG_DELETE_WHEN_DONE);

// Create a wait animation

IAnimatron *pAni;
VI.CreateWaitAnimation(NULL, ID_CTRL_WAIT, rcCenter, &pAni);
StartPerformance(pAni, ID_CTRL_WAIT, CReanimator::SPR_FLAG_DELETE_WHEN_DONE);

// Done

return NOERROR;
}

void CExtensionsSession::OnKeyDown (int iVirtKey, DWORD dwKeyData)

// OnKeyDown
//
// KeyDown

{
switch (iVirtKey)
{
case VK_ESCAPE:
CmdDone();
break;

case VK_RETURN:
CmdDone();
break;
}
}

void CExtensionsSession::OnPaint (CG32bitImage &Screen, const RECT &rcInvalid)

// OnPaint
//
// Paint

{
const CVisualPalette &VI = m_HI.GetVisuals();

RECT rcCenter;
VI.DrawSessionBackground(Screen, CG32bitImage(), CG32bitPixel(), CVisualPalette::OPTION_SESSION_DLG_BACKGROUND, &rcCenter);
}

void CExtensionsSession::OnReportHardCrash (CString *retsMessage)

// OnReportHardCrash
//
// Describe current state

{
*retsMessage = CONSTLIT("session: CExtensionsSession\r\n");
}
18 changes: 14 additions & 4 deletions Transcendence/CIntroSession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
#define CMD_ACCOUNT_EDIT CONSTLIT("cmdAccountEdit")
#define CMD_CHANGE_PASSWORD CONSTLIT("cmdChangePassword")
#define CMD_OPEN_NEWS CONSTLIT("cmdOpenNews")
#define CMD_SHOW_MOD_EXCHANGE CONSTLIT("cmdShowModExchange")
#define CMD_RELOAD CONSTLIT("cmdReload")
#define CMD_SHOW_COLLECTION CONSTLIT("cmdShowModExchange")
#define CMD_SHOW_EXTENSIONS CONSTLIT("cmdShowExtensions")
#define CMD_SHOW_PROFILE CONSTLIT("cmdShowProfile")
#define CMD_SHOW_SETTINGS CONSTLIT("cmdShowSettings")
#define CMD_SIGN_OUT CONSTLIT("cmdSignOut")
Expand All @@ -28,8 +30,10 @@
#define CMD_SERVICE_NEWS_LOADED CONSTLIT("serviceNewsLoaded")

#define CMD_UI_CHANGE_PASSWORD CONSTLIT("uiChangePassword")
#define CMD_UI_RELOAD CONSTLIT("uiReload")
#define CMD_UI_SHOW_LOGIN CONSTLIT("uiShowLogin")
#define CMD_UI_SHOW_MOD_EXCHANGE CONSTLIT("uiShowModExchange")
#define CMD_UI_SHOW_COLLECTION CONSTLIT("uiShowModExchange")
#define CMD_UI_SHOW_EXTENSIONS CONSTLIT("uiShowExtensions")
#define CMD_UI_SHOW_PROFILE CONSTLIT("uiShowProfile")
#define CMD_UI_SHOW_SETTINGS CONSTLIT("uiShowSettings")
#define CMD_UI_SIGN_OUT CONSTLIT("uiSignOut")
Expand Down Expand Up @@ -1041,8 +1045,14 @@ ALERROR CIntroSession::OnCommand (const CString &sCmd, void *pData)
else if (strEquals(sCmd, CMD_SIGN_OUT))
m_HI.HICommand(CMD_UI_SIGN_OUT);

else if (strEquals(sCmd, CMD_SHOW_MOD_EXCHANGE))
m_HI.HICommand(CMD_UI_SHOW_MOD_EXCHANGE);
else if (strEquals(sCmd, CMD_SHOW_COLLECTION))
m_HI.HICommand(CMD_UI_SHOW_COLLECTION);

else if (strEquals(sCmd, CMD_SHOW_EXTENSIONS))
m_HI.HICommand(CMD_UI_SHOW_EXTENSIONS);

else if (strEquals(sCmd, CMD_RELOAD))
m_HI.HICommand(CMD_UI_RELOAD);

else if (strEquals(sCmd, CMD_SHOW_SETTINGS))
m_HI.HICommand(CMD_UI_SHOW_SETTINGS);
Expand Down
35 changes: 30 additions & 5 deletions Transcendence/CTranscendenceController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,14 @@
#define CMD_UI_EXIT CONSTLIT("uiExit")
#define CMD_UI_MUSIC_VOLUME_DOWN CONSTLIT("uiMusicVolumeDown")
#define CMD_UI_MUSIC_VOLUME_UP CONSTLIT("uiMusicVolumeUp")
#define CMD_UI_RELOAD CONSTLIT("uiReload")
#define CMD_UI_RESET_PASSWORD CONSTLIT("uiResetPassword")
#define CMD_UI_SHOW_EXTENSIONS CONSTLIT("uiShowExtensions")
#define CMD_UI_SHOW_GAME_STATS CONSTLIT("uiShowGameStats")
#define CMD_UI_SHOW_GALACTIC_MAP CONSTLIT("uiShowGalacticMap")
#define CMD_UI_SHOW_HELP CONSTLIT("uiShowHelp")
#define CMD_UI_SHOW_LOGIN CONSTLIT("uiShowLogin")
#define CMD_UI_SHOW_MOD_EXCHANGE CONSTLIT("uiShowModExchange")
#define CMD_UI_SHOW_COLLECTION CONSTLIT("uiShowModExchange")
#define CMD_UI_SHOW_PROFILE CONSTLIT("uiShowProfile")
#define CMD_UI_SHOW_SETTINGS CONSTLIT("uiShowSettings")
#define CMD_UI_SIGN_OUT CONSTLIT("uiSignOut")
Expand Down Expand Up @@ -159,7 +161,8 @@
#define ERR_CANT_LOAD_GAME CONSTLIT("Unable to load game")
#define ERR_CANT_START_GAME CONSTLIT("Unable to start game")
#define ERR_CANT_SHOW_ADVENTURES CONSTLIT("Unable to show list of adventures")
#define ERR_CANT_SHOW_MOD_EXCHANGE CONSTLIT("Unable to show Mod Collection screen")
#define ERR_CANT_SHOW_COLLECTION CONSTLIT("Unable to show Collection screen")
#define ERR_CANT_SHOW_EXTENSIONS CONSTLIT("Unable to show Extensions screen")
#define ERR_CONTACT_KP CONSTLIT("Contact Kronosaur Productions")
#define ERR_LOAD_ERROR CONSTLIT("Error loading extensions")
#define ERR_RESET_PASSWORD_DESC CONSTLIT("Automated password reset is not yet implemented. Please contact Kronosaur Productions at:\n\ntranscendence@kronosaur.com\n\nPlease provide your username.")
Expand Down Expand Up @@ -1427,7 +1430,7 @@ ALERROR CTranscendenceController::OnCommand (const CString &sCmd, void *pData)

// Mod exchange

else if (strEquals(sCmd, CMD_UI_SHOW_MOD_EXCHANGE))
else if (strEquals(sCmd, CMD_UI_SHOW_COLLECTION))
{
// If we're not logged in, log in first.

Expand All @@ -1436,7 +1439,7 @@ ALERROR CTranscendenceController::OnCommand (const CString &sCmd, void *pData)
// We pass the uiShowModExchange command to the login session. On
// success, it will fire the command.

CLoginSession *pSession = new CLoginSession(m_HI, m_Service, CMD_UI_SHOW_MOD_EXCHANGE);
CLoginSession *pSession = new CLoginSession(m_HI, m_Service, CMD_UI_SHOW_COLLECTION);
if (error = m_HI.OpenPopupSession(pSession))
return error;
}
Expand All @@ -1448,12 +1451,34 @@ ALERROR CTranscendenceController::OnCommand (const CString &sCmd, void *pData)
DisplayMultiverseStatus(NULL_STR);
if (error = m_HI.OpenPopupSession(new CModExchangeSession(m_HI, m_Service, m_Multiverse, g_pUniverse->GetExtensionCollection(), m_Settings.GetBoolean(CGameSettings::debugMode))))
{
m_HI.OpenPopupSession(new CMessageSession(m_HI, ERR_CANT_SHOW_MOD_EXCHANGE, NULL_STR, CMD_NULL));
m_HI.OpenPopupSession(new CMessageSession(m_HI, ERR_CANT_SHOW_COLLECTION, NULL_STR, CMD_NULL));
return NOERROR;
}
}
}

else if(strEquals(sCmd, CMD_UI_SHOW_EXTENSIONS))
{
if (error = m_HI.OpenPopupSession(new CExtensionsSession(m_HI, m_Service, g_pUniverse->GetExtensionCollection(), m_Settings.GetBoolean(CGameSettings::debugMode))))
{
m_HI.OpenPopupSession(new CMessageSession(m_HI, ERR_CANT_SHOW_EXTENSIONS, NULL_STR, CMD_NULL));
return NOERROR;
}
}

else if(strEquals(sCmd, CMD_UI_RELOAD))
{
// Kill the intro
g_pTrans->StopIntro();

CString sCollectionFolder = pathAddComponent(m_Settings.GetAppDataFolder(), FOLDER_COLLECTION);
TArray<CString> ExtensionFolders;
ExtensionFolders.Insert(pathAddComponent(m_Settings.GetAppDataFolder(), FOLDER_EXTENSIONS));

m_HI.AddBackgroundTask(new CInitModelTask(m_HI, m_Model, m_Settings, sCollectionFolder, ExtensionFolders), 0, this, CMD_MODEL_INIT_DONE);
m_HI.ShowSession(new CWaitSession(m_HI, m_Service, CONSTLIT("Reloading")));
}

// Service housekeeping

else if (strEquals(sCmd, CMD_SERVICE_HOUSEKEEPING))
Expand Down
Loading