hostile-takeover/game/picktransportform.cpp
2014-07-06 17:47:28 -07:00

134 lines
3.3 KiB
C++

#include "picktransportform.h"
namespace wi {
PickTransportForm::PickTransportForm()
{
m_ptra = NULL;
}
bool PickTransportForm::Init(FormMgr *pfrmm, IniReader *pini, word idf)
{
if (!ShellForm::Init(pfrmm, pini, idf))
return false;
m_ctrad = gtram.GetTransportDescriptions(m_atrad, kctradMax);
LabelControl *plbl =
(LabelControl *)GetControlPtr(kidcNoTransportsAvailable);
if (m_ctrad != 0)
plbl->Show(false);
for (int i = kidcTransport1; i <= kidcTransport6; i++) {
ButtonControl *pbtn = (ButtonControl *)GetControlPtr(i);
if ((i - kidcTransport1) < m_ctrad) {
pbtn->SetText(m_atrad[i - kidcTransport1].szName);
} else {
pbtn->Show(false);
}
}
return true;
}
bool PickTransportForm::DoModal(int *pnResult, bool fAnimate, bool fShowSound)
{
// If there is only one valid transport, don't waste the user's time by
// making them choose it.
if (m_ctrad != 1)
return ShellForm::DoModal(pnResult, fAnimate, fShowSound);
dword result;
m_ptra = OpenTransport(&m_atrad[0], &result);
return m_ptra != NULL;
}
Transport *PickTransportForm::OpenTransport(TransportDescription *ptrad,
dword *result) {
*result = knTransportOpenResultFail;
Transport *ptra = NULL;
{
char szT[64];
sprintf(szT, "OPENING %s...", ptrad->szName);
TransportWaitingUI twui(szT);
*result = ptrad->pfnOpen(ptrad, &ptra);
}
const char *message = NULL;
switch (*result) {
case knTransportOpenResultSuccess:
return ptra;
default:
case knTransportOpenResultFail:
message = "Failure accessing network.";
break;
case knTransportOpenResultNoNetwork:
message = "Please check for network connectivity.";
break;
case knTransportOpenResultCantConnect:
message = "Could not connect to game server.";
break;
case knTransportOpenResultNotResponding:
message = "Timed out waiting for Game server to respond.";
break;
case knTransportOpenResultProtocolMismatch:
message = "Please upgrade to the latest version of Hostile Takeover before playing multiplayer.";
//message = "Please upgrade to the latest version of Hostile Takeover.";
break;
case knTransportOpenResultServerFull:
message = "This server is full. Please try another server.";
break;
}
if (message != NULL) {
HtMessageBox(kfMbWhiteBorder, "Error!", message);
}
return NULL;
}
void PickTransportForm::OnControlSelected(word idc)
{
if (idc == kidcCancel) {
EndForm(idc);
return;
}
dword result;
m_ptra = OpenTransport(&m_atrad[idc - kidcTransport1], &result);
if (m_ptra != NULL) {
EndForm(idc);
}
}
bool PickTransport(Transport **pptra)
{
*pptra = NULL;
PickTransportForm *pfrm = (PickTransportForm *)gpmfrmm->LoadForm(
gpiniForms, kidfPickTransport, new PickTransportForm());
Assert(pfrm != NULL);
if (pfrm == NULL)
return true;
int idc;
pfrm->DoModal(&idc);
*pptra = pfrm->GetTransport();
delete pfrm;
if (gevm.IsAppStopping())
return false;
if (idc == kidcCancel)
return true;
return true;
}
} // namespace wi