mirror of
https://github.com/spiffcode/hostile-takeover.git
synced 2025-12-23 06:57:23 +00:00
134 lines
3.3 KiB
C++
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
|
|
|