mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2025-02-16 23:20:09 +01:00
Backed out the splitting up of SeriousSam/Menu.cpp
This commit is contained in:
parent
f35e86661e
commit
5ba4bccabd
@ -598,54 +598,9 @@ add_executable(SeriousSam
|
|||||||
SeriousSam/LCDDrawing.cpp
|
SeriousSam/LCDDrawing.cpp
|
||||||
SeriousSam/SplashScreen.cpp
|
SeriousSam/SplashScreen.cpp
|
||||||
SeriousSam/MainWindow.cpp
|
SeriousSam/MainWindow.cpp
|
||||||
SeriousSam/GUI/Menus/GameMenu.cpp
|
SeriousSam/Menu.cpp
|
||||||
SeriousSam/GUI/Menus/MAudioOptions.cpp
|
SeriousSam/MenuGadgets.cpp
|
||||||
SeriousSam/GUI/Menus/MConfirm.cpp
|
SeriousSam/MenuPrinting.cpp
|
||||||
SeriousSam/GUI/Menus/MControls.cpp
|
|
||||||
SeriousSam/GUI/Menus/MCustomizeAxis.cpp
|
|
||||||
SeriousSam/GUI/Menus/MCustomizeKeyboard.cpp
|
|
||||||
SeriousSam/GUI/Menus/MDisabled.cpp
|
|
||||||
SeriousSam/GUI/Menus/MenuActions.cpp
|
|
||||||
SeriousSam/GUI/Menus/Menu.cpp
|
|
||||||
SeriousSam/GUI/Menus/MenuManager.cpp
|
|
||||||
SeriousSam/GUI/Menus/MenuPrinting.cpp
|
|
||||||
SeriousSam/GUI/Menus/MenuStartersAF.cpp
|
|
||||||
SeriousSam/GUI/Menus/MenuStarters.cpp
|
|
||||||
SeriousSam/GUI/Menus/MenuStuff.cpp
|
|
||||||
SeriousSam/GUI/Menus/MHighScore.cpp
|
|
||||||
SeriousSam/GUI/Menus/MInGame.cpp
|
|
||||||
SeriousSam/GUI/Menus/MLevels.cpp
|
|
||||||
SeriousSam/GUI/Menus/MLoadSave.cpp
|
|
||||||
SeriousSam/GUI/Menus/MMain.cpp
|
|
||||||
SeriousSam/GUI/Menus/MNetwork.cpp
|
|
||||||
SeriousSam/GUI/Menus/MNetworkJoin.cpp
|
|
||||||
SeriousSam/GUI/Menus/MNetworkOpen.cpp
|
|
||||||
SeriousSam/GUI/Menus/MNetworkStart.cpp
|
|
||||||
SeriousSam/GUI/Menus/MOptions.cpp
|
|
||||||
SeriousSam/GUI/Menus/MPlayerProfile.cpp
|
|
||||||
SeriousSam/GUI/Menus/MSelectPlayers.cpp
|
|
||||||
SeriousSam/GUI/Menus/MServers.cpp
|
|
||||||
SeriousSam/GUI/Menus/MSinglePlayer.cpp
|
|
||||||
SeriousSam/GUI/Menus/MSinglePlayerNew.cpp
|
|
||||||
SeriousSam/GUI/Menus/MSplitScreen.cpp
|
|
||||||
SeriousSam/GUI/Menus/MSplitStart.cpp
|
|
||||||
SeriousSam/GUI/Menus/MVar.cpp
|
|
||||||
SeriousSam/GUI/Menus/MVideoOptions.cpp
|
|
||||||
SeriousSam/GUI/Components/MenuGadget.cpp
|
|
||||||
SeriousSam/GUI/Components/MGArrow.cpp
|
|
||||||
SeriousSam/GUI/Components/MGButton.cpp
|
|
||||||
SeriousSam/GUI/Components/MGChangePlayer.cpp
|
|
||||||
SeriousSam/GUI/Components/MGEdit.cpp
|
|
||||||
SeriousSam/GUI/Components/MGFileButton.cpp
|
|
||||||
SeriousSam/GUI/Components/MGHighScore.cpp
|
|
||||||
SeriousSam/GUI/Components/MGKeyDefinition.cpp
|
|
||||||
SeriousSam/GUI/Components/MGLevelButton.cpp
|
|
||||||
SeriousSam/GUI/Components/MGModel.cpp
|
|
||||||
SeriousSam/GUI/Components/MGServerList.cpp
|
|
||||||
SeriousSam/GUI/Components/MGSlider.cpp
|
|
||||||
SeriousSam/GUI/Components/MGTitle.cpp
|
|
||||||
SeriousSam/GUI/Components/MGTrigger.cpp
|
|
||||||
SeriousSam/GUI/Components/MGVarButton.cpp
|
|
||||||
)
|
)
|
||||||
add_dependencies(SeriousSam ParseAllEntities)
|
add_dependencies(SeriousSam ParseAllEntities)
|
||||||
|
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGArrow.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CMGArrow::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
|
|
||||||
CTString str;
|
|
||||||
if (mg_adDirection == AD_NONE) {
|
|
||||||
str = "???";
|
|
||||||
} else if (mg_adDirection == AD_UP) {
|
|
||||||
str = TRANS("Page Up");
|
|
||||||
} else if (mg_adDirection == AD_DOWN) {
|
|
||||||
str = TRANS("Page Down");
|
|
||||||
} else {
|
|
||||||
ASSERT(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
PIX pixI = box.Min()(1);
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
pdp->PutText(str, pixI, pixJ, col);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGArrow::OnActivate(void)
|
|
||||||
{
|
|
||||||
if (mg_adDirection == AD_UP) {
|
|
||||||
pgmCurrentMenu->ScrollList(-3);
|
|
||||||
}
|
|
||||||
else if (mg_adDirection == AD_DOWN) {
|
|
||||||
pgmCurrentMenu->ScrollList(+3);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_ARROW_H
|
|
||||||
#define SE_INCL_MENU_GADGET_ARROW_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/ArrowDir.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGArrow : public CMGButton {
|
|
||||||
public:
|
|
||||||
enum ArrowDir mg_adDirection;
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
void OnActivate(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,182 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
#include "SeriousSam/VarList.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
extern CMenuGadget *_pmgLastActivatedGadget;
|
|
||||||
|
|
||||||
|
|
||||||
CMGButton::CMGButton(void)
|
|
||||||
{
|
|
||||||
mg_pActivatedFunction = NULL;
|
|
||||||
mg_iIndex = 0;
|
|
||||||
mg_iCenterI = 0;
|
|
||||||
mg_iTextMode = 1;
|
|
||||||
mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
mg_iCursorPos = -1;
|
|
||||||
mg_bRectangle = FALSE;
|
|
||||||
mg_bMental = FALSE;
|
|
||||||
mg_bEditing = FALSE;
|
|
||||||
mg_bHighlighted = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CMGButton::SetText(CTString strNew)
|
|
||||||
{
|
|
||||||
mg_strText = strNew;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CMGButton::OnActivate(void)
|
|
||||||
{
|
|
||||||
if (mg_pActivatedFunction != NULL && mg_bEnabled)
|
|
||||||
{
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
_pmgLastActivatedGadget = this;
|
|
||||||
(*mg_pActivatedFunction)();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CMGButton::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
if (mg_bfsFontSize == BFS_LARGE) {
|
|
||||||
SetFontBig(pdp);
|
|
||||||
} else if (mg_bfsFontSize == BFS_MEDIUM) {
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
} else {
|
|
||||||
ASSERT(mg_bfsFontSize == BFS_SMALL);
|
|
||||||
SetFontSmall(pdp);
|
|
||||||
}
|
|
||||||
pdp->SetTextMode(mg_iTextMode);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
if (mg_bEditing) {
|
|
||||||
col = _pGame->LCDGetColor(C_GREEN | 0xFF, "editing");
|
|
||||||
}
|
|
||||||
|
|
||||||
COLOR colRectangle = col;
|
|
||||||
if (mg_bHighlighted) {
|
|
||||||
col = _pGame->LCDGetColor(C_WHITE | 0xFF, "hilited");
|
|
||||||
if (!mg_bFocused) {
|
|
||||||
colRectangle = _pGame->LCDGetColor(C_WHITE | 0xFF, "hilited rectangle");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mg_bMental) {
|
|
||||||
FLOAT tmIn = 0.2f;
|
|
||||||
FLOAT tmOut = 1.0f;
|
|
||||||
FLOAT tmFade = 0.1f;
|
|
||||||
FLOAT tmExist = tmFade + tmIn + tmFade;
|
|
||||||
FLOAT tmTotal = tmFade + tmIn + tmFade + tmOut;
|
|
||||||
|
|
||||||
FLOAT tmTime = _pTimer->GetHighPrecisionTimer().GetSeconds();
|
|
||||||
FLOAT fFactor = 1;
|
|
||||||
if (tmTime>0.1f) {
|
|
||||||
tmTime = fmod(tmTime, tmTotal);
|
|
||||||
fFactor = CalculateRatio(tmTime, 0, tmExist, tmFade / tmExist, tmFade / tmExist);
|
|
||||||
}
|
|
||||||
col = (col&~0xFF) | INDEX(0xFF * fFactor);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mg_bRectangle) {
|
|
||||||
// put border
|
|
||||||
const PIX pixLeft = box.Min()(1);
|
|
||||||
const PIX pixUp = box.Min()(2) - 3;
|
|
||||||
const PIX pixWidth = box.Size()(1) + 1;
|
|
||||||
const PIX pixHeight = box.Size()(2);
|
|
||||||
pdp->DrawBorder(pixLeft, pixUp, pixWidth, pixHeight, colRectangle);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mg_bEditing) {
|
|
||||||
// put border
|
|
||||||
PIX pixLeft = box.Min()(1);
|
|
||||||
PIX pixUp = box.Min()(2) - 3;
|
|
||||||
PIX pixWidth = box.Size()(1) + 1;
|
|
||||||
PIX pixHeight = box.Size()(2);
|
|
||||||
if (mg_strLabel != "") {
|
|
||||||
pixLeft = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
pixWidth = box.Size()(1)*0.45f + 1;
|
|
||||||
}
|
|
||||||
pdp->Fill(pixLeft, pixUp, pixWidth, pixHeight, _pGame->LCDGetColor(C_dGREEN | 0x40, "edit fill"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
INDEX iCursor = mg_iCursorPos;
|
|
||||||
|
|
||||||
// print text
|
|
||||||
if (mg_strLabel != "") {
|
|
||||||
PIX pixIL = box.Min()(1) + box.Size()(1)*0.45f;
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
|
|
||||||
pdp->PutTextR(mg_strLabel, pixIL, pixJ, col);
|
|
||||||
pdp->PutText(mg_strText, pixIR, pixJ, col);
|
|
||||||
} else {
|
|
||||||
CTString str = mg_strText;
|
|
||||||
if (pdp->dp_FontData->fd_bFixedWidth) {
|
|
||||||
str = str.Undecorated();
|
|
||||||
INDEX iLen = str.Length();
|
|
||||||
INDEX iMaxLen = ClampDn(box.Size()(1) / (pdp->dp_pixTextCharSpacing + pdp->dp_FontData->fd_pixCharWidth), 1L);
|
|
||||||
if (iCursor >= iMaxLen) {
|
|
||||||
str.TrimRight(iCursor);
|
|
||||||
str.TrimLeft(iMaxLen);
|
|
||||||
iCursor = iMaxLen;
|
|
||||||
} else {
|
|
||||||
str.TrimRight(iMaxLen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mg_iCenterI == -1) pdp->PutText(str, box.Min()(1), box.Min()(2), col);
|
|
||||||
else if (mg_iCenterI == +1) pdp->PutTextR(str, box.Max()(1), box.Min()(2), col);
|
|
||||||
else pdp->PutTextC(str, box.Center()(1), box.Min()(2), col);
|
|
||||||
}
|
|
||||||
|
|
||||||
// put cursor if editing
|
|
||||||
if (mg_bEditing && (((ULONG)(_pTimer->GetRealTimeTick() * 2)) & 1)) {
|
|
||||||
PIX pixX = box.Min()(1) + GetCharOffset(pdp, iCursor);
|
|
||||||
if (mg_strLabel != "") {
|
|
||||||
pixX += box.Size()(1)*0.55f;
|
|
||||||
}
|
|
||||||
|
|
||||||
PIX pixY = box.Min()(2);
|
|
||||||
if (!pdp->dp_FontData->fd_bFixedWidth) {
|
|
||||||
pixY -= pdp->dp_fTextScaling * 2;
|
|
||||||
}
|
|
||||||
pdp->PutText("|", pixX, pixY, _pGame->LCDGetColor(C_WHITE | 0xFF, "editing cursor"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PIX CMGButton::GetCharOffset(CDrawPort *pdp, INDEX iCharNo)
|
|
||||||
{
|
|
||||||
if (pdp->dp_FontData->fd_bFixedWidth) {
|
|
||||||
return (pdp->dp_FontData->fd_pixCharWidth + pdp->dp_pixTextCharSpacing)*(iCharNo - 0.5f);
|
|
||||||
}
|
|
||||||
CTString strCut(mg_strText);
|
|
||||||
strCut.TrimLeft(strlen(mg_strText) - iCharNo);
|
|
||||||
PIX pixFullWidth = pdp->GetTextWidth(mg_strText);
|
|
||||||
PIX pixCutWidth = pdp->GetTextWidth(strCut);
|
|
||||||
// !!!! not implemented for different centering
|
|
||||||
return pixFullWidth - pixCutWidth;
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_BUTTON_H
|
|
||||||
#define SE_INCL_MENU_GADGET_BUTTON_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MenuGadget.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGButton : public CMenuGadget {
|
|
||||||
public:
|
|
||||||
CTString mg_strLabel; // for those that have labels separately from main text
|
|
||||||
CTString mg_strText;
|
|
||||||
INDEX mg_iCenterI;
|
|
||||||
enum ButtonFontSize mg_bfsFontSize;
|
|
||||||
BOOL mg_bEditing;
|
|
||||||
BOOL mg_bHighlighted;
|
|
||||||
BOOL mg_bRectangle;
|
|
||||||
BOOL mg_bMental;
|
|
||||||
INDEX mg_iTextMode;
|
|
||||||
INDEX mg_iCursorPos;
|
|
||||||
INDEX mg_iIndex;
|
|
||||||
|
|
||||||
void(*mg_pActivatedFunction)(void);
|
|
||||||
|
|
||||||
CMGButton(void);
|
|
||||||
void SetText(CTString strNew);
|
|
||||||
void OnActivate(void);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
PIX GetCharOffset(CDrawPort *pdp, INDEX iCharNo);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,53 +0,0 @@
|
|||||||
/* C/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGChangePlayer.h"
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuManager.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
|
|
||||||
void CMGChangePlayer::OnActivate(void)
|
|
||||||
{
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
_iLocalPlayer = mg_iLocalPlayer;
|
|
||||||
|
|
||||||
if (_pGame->gm_aiMenuLocalPlayers[mg_iLocalPlayer] < 0)
|
|
||||||
_pGame->gm_aiMenuLocalPlayers[mg_iLocalPlayer] = 0;
|
|
||||||
|
|
||||||
_pGUIM->gmPlayerProfile.gm_piCurrentPlayer = &_pGame->gm_aiMenuLocalPlayers[mg_iLocalPlayer];
|
|
||||||
_pGUIM->gmPlayerProfile.gm_pgmParentMenu = &_pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
extern BOOL _bPlayerMenuFromSinglePlayer;
|
|
||||||
_bPlayerMenuFromSinglePlayer = FALSE;
|
|
||||||
ChangeToMenu(&_pGUIM->gmPlayerProfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGChangePlayer::SetPlayerText(void)
|
|
||||||
{
|
|
||||||
INDEX iPlayer = _pGame->gm_aiMenuLocalPlayers[mg_iLocalPlayer];
|
|
||||||
CPlayerCharacter &pc = _pGame->gm_apcPlayers[iPlayer];
|
|
||||||
|
|
||||||
if (iPlayer<0 || iPlayer>7) {
|
|
||||||
mg_strText = "????";
|
|
||||||
} else {
|
|
||||||
mg_strText.PrintF(TRANS("Player %d: %s\n"), mg_iLocalPlayer + 1, (const char *) pc.GetNameForPrinting());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_CHANGEPLAYER_H
|
|
||||||
#define SE_INCL_MENU_GADGET_CHANGEPLAYER_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGChangePlayer : public CMGButton {
|
|
||||||
public:
|
|
||||||
INDEX mg_iLocalPlayer;
|
|
||||||
|
|
||||||
void SetPlayerText(void);
|
|
||||||
void OnActivate(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,174 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
extern BOOL _bEditingString;
|
|
||||||
|
|
||||||
|
|
||||||
CMGEdit::CMGEdit(void)
|
|
||||||
{
|
|
||||||
mg_pstrToChange = NULL;
|
|
||||||
mg_ctMaxStringLen = 70;
|
|
||||||
Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGEdit::Clear(void)
|
|
||||||
{
|
|
||||||
mg_iCursorPos = 0;
|
|
||||||
mg_bEditing = FALSE;
|
|
||||||
_bEditingString = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGEdit::OnActivate(void)
|
|
||||||
{
|
|
||||||
if (!mg_bEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ASSERT(mg_pstrToChange != NULL);
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
SetText(mg_strText);
|
|
||||||
mg_iCursorPos = strlen(mg_strText);
|
|
||||||
mg_bEditing = TRUE;
|
|
||||||
_bEditingString = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// focus lost
|
|
||||||
void CMGEdit::OnKillFocus(void)
|
|
||||||
{
|
|
||||||
// go out of editing mode
|
|
||||||
if (mg_bEditing) {
|
|
||||||
OnKeyDown(VK_RETURN);
|
|
||||||
Clear();
|
|
||||||
}
|
|
||||||
// proceed
|
|
||||||
CMenuGadget::OnKillFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
// helper function for deleting char(s) from string
|
|
||||||
static void Key_BackDel(CTString &str, INDEX &iPos, BOOL bShift, BOOL bRight)
|
|
||||||
{
|
|
||||||
// do nothing if string is empty
|
|
||||||
INDEX ctChars = strlen(str);
|
|
||||||
if (ctChars == 0) return;
|
|
||||||
if (bRight && iPos<ctChars) { // DELETE key
|
|
||||||
if (bShift) {
|
|
||||||
// delete to end of line
|
|
||||||
str.TrimRight(iPos);
|
|
||||||
} else {
|
|
||||||
// delete only one char
|
|
||||||
str.DeleteChar(iPos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!bRight && iPos>0) { // BACKSPACE key
|
|
||||||
if (bShift) {
|
|
||||||
// delete to start of line
|
|
||||||
str.TrimLeft(ctChars - iPos);
|
|
||||||
iPos = 0;
|
|
||||||
} else {
|
|
||||||
// delete only one char
|
|
||||||
str.DeleteChar(iPos - 1);
|
|
||||||
iPos--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// key/mouse button pressed
|
|
||||||
BOOL CMGEdit::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
// if not in edit mode
|
|
||||||
if (!mg_bEditing) {
|
|
||||||
// behave like normal gadget
|
|
||||||
return CMenuGadget::OnKeyDown(iVKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
// finish editing?
|
|
||||||
BOOL bShift = GetKeyState(VK_SHIFT) & 0x8000;
|
|
||||||
switch (iVKey) {
|
|
||||||
case VK_UP: case VK_DOWN:
|
|
||||||
case VK_RETURN: case VK_LBUTTON: *mg_pstrToChange = mg_strText; Clear(); OnStringChanged(); break;
|
|
||||||
case VK_ESCAPE: case VK_RBUTTON: mg_strText = *mg_pstrToChange; Clear(); OnStringCanceled(); break;
|
|
||||||
case VK_LEFT: if (mg_iCursorPos > 0) mg_iCursorPos--; break;
|
|
||||||
case VK_RIGHT: if (mg_iCursorPos < strlen(mg_strText)) mg_iCursorPos++; break;
|
|
||||||
case VK_HOME: mg_iCursorPos = 0; break;
|
|
||||||
case VK_END: mg_iCursorPos = strlen(mg_strText); break;
|
|
||||||
case VK_BACK: Key_BackDel(mg_strText, mg_iCursorPos, bShift, FALSE); break;
|
|
||||||
case VK_DELETE: Key_BackDel(mg_strText, mg_iCursorPos, bShift, TRUE); break;
|
|
||||||
default: break; // ignore all other special keys
|
|
||||||
}
|
|
||||||
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// char typed
|
|
||||||
BOOL CMGEdit::OnChar(MSG msg)
|
|
||||||
{
|
|
||||||
// if not in edit mode
|
|
||||||
if (!mg_bEditing) {
|
|
||||||
// behave like normal gadget
|
|
||||||
return CMenuGadget::OnChar(msg);
|
|
||||||
}
|
|
||||||
// only chars are allowed
|
|
||||||
const INDEX ctFullLen = mg_strText.Length();
|
|
||||||
const INDEX ctNakedLen = mg_strText.LengthNaked();
|
|
||||||
mg_iCursorPos = Clamp(mg_iCursorPos, 0L, ctFullLen);
|
|
||||||
int iVKey = msg.wParam;
|
|
||||||
if (isprint(iVKey) && ctNakedLen <= mg_ctMaxStringLen) {
|
|
||||||
mg_strText.InsertChar(mg_iCursorPos, (char)iVKey);
|
|
||||||
mg_iCursorPos++;
|
|
||||||
}
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGEdit::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
if (mg_bEditing) {
|
|
||||||
mg_iTextMode = -1;
|
|
||||||
} else if (mg_bFocused) {
|
|
||||||
mg_iTextMode = 0;
|
|
||||||
} else {
|
|
||||||
mg_iTextMode = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mg_strText == "" && !mg_bEditing) {
|
|
||||||
if (mg_bfsFontSize == BFS_SMALL) {
|
|
||||||
mg_strText = "*";
|
|
||||||
} else {
|
|
||||||
mg_strText = TRANS("<none>");
|
|
||||||
}
|
|
||||||
CMGButton::Render(pdp);
|
|
||||||
mg_strText = "";
|
|
||||||
} else {
|
|
||||||
CMGButton::Render(pdp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGEdit::OnStringChanged(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGEdit::OnStringCanceled(void)
|
|
||||||
{
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_EDIT_H
|
|
||||||
#define SE_INCL_MENU_GADGET_EDIT_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGEdit : public CMGButton {
|
|
||||||
public:
|
|
||||||
INDEX mg_ctMaxStringLen;
|
|
||||||
CTString *mg_pstrToChange;
|
|
||||||
|
|
||||||
CMGEdit(void);
|
|
||||||
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
BOOL OnChar(MSG msg);
|
|
||||||
void Clear(void);
|
|
||||||
void OnActivate(void);
|
|
||||||
void OnKillFocus(void);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
virtual void OnStringChanged(void);
|
|
||||||
virtual void OnStringCanceled(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,243 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGFileButton.h"
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuManager.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
|
|
||||||
CMGFileButton::CMGFileButton(void)
|
|
||||||
{
|
|
||||||
mg_iState = FBS_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// refresh current text from description
|
|
||||||
void CMGFileButton::RefreshText(void)
|
|
||||||
{
|
|
||||||
mg_strText = mg_strDes;
|
|
||||||
mg_strText.OnlyFirstLine();
|
|
||||||
mg_strInfo = mg_strDes;
|
|
||||||
mg_strInfo.RemovePrefix(mg_strText);
|
|
||||||
mg_strInfo.DeleteChar(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::SaveDescription(void)
|
|
||||||
{
|
|
||||||
CTFileName fnFileNameDescription = mg_fnm.NoExt() + ".des";
|
|
||||||
try {
|
|
||||||
mg_strDes.Save_t(fnFileNameDescription);
|
|
||||||
} catch (char *strError) {
|
|
||||||
CPrintF("%s\n", strError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CMGFileButton *_pmgFileToSave = NULL;
|
|
||||||
void OnFileSaveOK(void)
|
|
||||||
{
|
|
||||||
if (_pmgFileToSave != NULL) {
|
|
||||||
_pmgFileToSave->SaveYes();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::DoSave(void)
|
|
||||||
{
|
|
||||||
if (FileExistsForWriting(mg_fnm)) {
|
|
||||||
_pmgFileToSave = this;
|
|
||||||
extern void SaveConfirm(void);
|
|
||||||
SaveConfirm();
|
|
||||||
} else {
|
|
||||||
SaveYes();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::SaveYes(void)
|
|
||||||
{
|
|
||||||
ASSERT(_pGUIM->gmLoadSaveMenu.gm_bSave);
|
|
||||||
// call saving function
|
|
||||||
BOOL bSucceeded = _pGUIM->gmLoadSaveMenu.gm_pAfterFileChosen(mg_fnm);
|
|
||||||
// if saved
|
|
||||||
if (bSucceeded) {
|
|
||||||
// save the description too
|
|
||||||
SaveDescription();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::DoLoad(void)
|
|
||||||
{
|
|
||||||
ASSERT(!_pGUIM->gmLoadSaveMenu.gm_bSave);
|
|
||||||
// if no file
|
|
||||||
if (!FileExists(mg_fnm)) {
|
|
||||||
// do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (_pGUIM->gmLoadSaveMenu.gm_pgmNextMenu != NULL) {
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmParentMenu = _pGUIM->gmLoadSaveMenu.gm_pgmNextMenu;
|
|
||||||
}
|
|
||||||
// call loading function
|
|
||||||
BOOL bSucceeded = _pGUIM->gmLoadSaveMenu.gm_pAfterFileChosen(mg_fnm);
|
|
||||||
ASSERT(bSucceeded);
|
|
||||||
}
|
|
||||||
|
|
||||||
static CTString _strTmpDescription;
|
|
||||||
static CTString _strOrgDescription;
|
|
||||||
|
|
||||||
void CMGFileButton::StartEdit(void)
|
|
||||||
{
|
|
||||||
CMGEdit::OnActivate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::OnActivate(void)
|
|
||||||
{
|
|
||||||
if (mg_fnm == "") {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
|
|
||||||
// if loading
|
|
||||||
if (!_pGUIM->gmLoadSaveMenu.gm_bSave) {
|
|
||||||
// load now
|
|
||||||
DoLoad();
|
|
||||||
// if saving
|
|
||||||
} else {
|
|
||||||
// switch to editing mode
|
|
||||||
BOOL bWasEmpty = mg_strText == EMPTYSLOTSTRING;
|
|
||||||
mg_strDes = _pGUIM->gmLoadSaveMenu.gm_strSaveDes;
|
|
||||||
RefreshText();
|
|
||||||
_strOrgDescription = _strTmpDescription = mg_strText;
|
|
||||||
|
|
||||||
if (bWasEmpty) {
|
|
||||||
_strOrgDescription = EMPTYSLOTSTRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
mg_pstrToChange = &_strTmpDescription;
|
|
||||||
StartEdit();
|
|
||||||
mg_iState = FBS_SAVENAME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CMGFileButton::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
if (mg_iState == FBS_NORMAL) {
|
|
||||||
if (_pGUIM->gmLoadSaveMenu.gm_bSave || _pGUIM->gmLoadSaveMenu.gm_bManage) {
|
|
||||||
if (iVKey == VK_F2) {
|
|
||||||
if (FileExistsForWriting(mg_fnm)) {
|
|
||||||
// switch to renaming mode
|
|
||||||
_strOrgDescription = mg_strText;
|
|
||||||
_strTmpDescription = mg_strText;
|
|
||||||
mg_pstrToChange = &_strTmpDescription;
|
|
||||||
StartEdit();
|
|
||||||
mg_iState = FBS_RENAME;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
} else if (iVKey == VK_DELETE) {
|
|
||||||
if (FileExistsForWriting(mg_fnm)) {
|
|
||||||
// delete the file, its description and thumbnail
|
|
||||||
RemoveFile(mg_fnm);
|
|
||||||
RemoveFile(mg_fnm.NoExt() + ".des");
|
|
||||||
RemoveFile(mg_fnm.NoExt() + "Tbn.tex");
|
|
||||||
// refresh menu
|
|
||||||
_pGUIM->gmLoadSaveMenu.EndMenu();
|
|
||||||
_pGUIM->gmLoadSaveMenu.StartMenu();
|
|
||||||
OnSetFocus();
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return CMenuGadget::OnKeyDown(iVKey);
|
|
||||||
} else {
|
|
||||||
// go out of editing mode
|
|
||||||
if (mg_bEditing) {
|
|
||||||
if (iVKey == VK_UP || iVKey == VK_DOWN) {
|
|
||||||
CMGEdit::OnKeyDown(VK_ESCAPE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return CMGEdit::OnKeyDown(iVKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::OnSetFocus(void)
|
|
||||||
{
|
|
||||||
mg_iState = FBS_NORMAL;
|
|
||||||
|
|
||||||
if (_pGUIM->gmLoadSaveMenu.gm_bAllowThumbnails && mg_bEnabled) {
|
|
||||||
SetThumbnail(mg_fnm);
|
|
||||||
} else {
|
|
||||||
ClearThumbnail();
|
|
||||||
}
|
|
||||||
|
|
||||||
pgmCurrentMenu->KillAllFocuses();
|
|
||||||
CMGButton::OnSetFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::OnKillFocus(void)
|
|
||||||
{
|
|
||||||
// go out of editing mode
|
|
||||||
if (mg_bEditing) {
|
|
||||||
OnKeyDown(VK_ESCAPE);
|
|
||||||
}
|
|
||||||
|
|
||||||
CMGEdit::OnKillFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
// override from edit gadget
|
|
||||||
void CMGFileButton::OnStringChanged(void)
|
|
||||||
{
|
|
||||||
// if saving
|
|
||||||
if (mg_iState == FBS_SAVENAME) {
|
|
||||||
// do the save
|
|
||||||
mg_strDes = _strTmpDescription + "\n" + mg_strInfo;
|
|
||||||
DoSave();
|
|
||||||
// if renaming
|
|
||||||
} else if (mg_iState == FBS_RENAME) {
|
|
||||||
// do the rename
|
|
||||||
mg_strDes = _strTmpDescription + "\n" + mg_strInfo;
|
|
||||||
SaveDescription();
|
|
||||||
// refresh menu
|
|
||||||
_pGUIM->gmLoadSaveMenu.EndMenu();
|
|
||||||
_pGUIM->gmLoadSaveMenu.StartMenu();
|
|
||||||
OnSetFocus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void CMGFileButton::OnStringCanceled(void)
|
|
||||||
{
|
|
||||||
mg_strText = _strOrgDescription;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGFileButton::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
// render original gadget first
|
|
||||||
CMGEdit::Render(pdp);
|
|
||||||
|
|
||||||
// if currently selected
|
|
||||||
if (mg_bFocused && mg_bEnabled) {
|
|
||||||
// add info at the bottom if screen
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, BoxSaveLoad(15.0));
|
|
||||||
PIX pixI = box.Min()(1);
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
|
|
||||||
COLOR col = _pGame->LCDGetColor(C_mlGREEN | 255, "file info");
|
|
||||||
pdp->PutText(mg_strInfo, pixI, pixJ, col);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_FILEBUTTON_H
|
|
||||||
#define SE_INCL_MENU_GADGET_FILEBUTTON_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
|
|
||||||
// file button states
|
|
||||||
#define FBS_NORMAL 0 // normal active state
|
|
||||||
#define FBS_SAVENAME 1 // typing in the save name
|
|
||||||
#define FBS_RENAME 2 // renaming existing file
|
|
||||||
class CMGFileButton : public CMGEdit {
|
|
||||||
public:
|
|
||||||
CMGFileButton(void);
|
|
||||||
CTFileName mg_fnm;
|
|
||||||
CTString mg_strDes; // entire description goes here
|
|
||||||
CTString mg_strInfo; // info part of text to print above the gadget tip
|
|
||||||
INDEX mg_iState;
|
|
||||||
|
|
||||||
// refresh current text from description
|
|
||||||
void RefreshText(void);
|
|
||||||
// save description to disk
|
|
||||||
void SaveDescription(void);
|
|
||||||
void SaveYes(void);
|
|
||||||
void DoSave(void);
|
|
||||||
void DoLoad(void);
|
|
||||||
void StartEdit(void);
|
|
||||||
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
void OnActivate(void);
|
|
||||||
void OnSetFocus(void);
|
|
||||||
void OnKillFocus(void);
|
|
||||||
|
|
||||||
// overrides from edit gadget
|
|
||||||
void OnStringChanged(void);
|
|
||||||
void OnStringCanceled(void);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,102 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGHighScore.h"
|
|
||||||
|
|
||||||
#define HSCOLUMNS 6
|
|
||||||
CTString strHighScores[HIGHSCORE_COUNT + 1][HSCOLUMNS];
|
|
||||||
FLOAT afI[HSCOLUMNS] = {
|
|
||||||
0.12f, 0.15f, 0.6f, 0.7f, 0.78f, 0.9f
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void CMGHighScore::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
COLOR colHeader = _pGame->LCDGetColor(C_GREEN | 255, "hiscore header");
|
|
||||||
COLOR colData = _pGame->LCDGetColor(C_mdGREEN | 255, "hiscore data");
|
|
||||||
COLOR colLastSet = _pGame->LCDGetColor(C_mlGREEN | 255, "hiscore last set");
|
|
||||||
INDEX iLastSet = _pGame->gm_iLastSetHighScore;
|
|
||||||
|
|
||||||
CTString strText;
|
|
||||||
|
|
||||||
strHighScores[0][0] = TRANS("No.");
|
|
||||||
strHighScores[0][1] = TRANS("Player Name");
|
|
||||||
strHighScores[0][2] = TRANS("Difficulty");
|
|
||||||
strHighScores[0][3] = TRANS("Time");
|
|
||||||
strHighScores[0][4] = TRANS("Kills");
|
|
||||||
strHighScores[0][5] = TRANS("Score");
|
|
||||||
|
|
||||||
{for (INDEX i = 0; i<HIGHSCORE_COUNT; i++) {
|
|
||||||
switch (_pGame->gm_ahseHighScores[i].hse_gdDifficulty) {
|
|
||||||
default:
|
|
||||||
ASSERT(FALSE);
|
|
||||||
case (CSessionProperties::GameDifficulty) - 100:
|
|
||||||
strHighScores[i + 1][1] = "---";
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
case CSessionProperties::GD_TOURIST:
|
|
||||||
strHighScores[i + 1][2] = TRANS("Tourist");
|
|
||||||
break;
|
|
||||||
case CSessionProperties::GD_EASY:
|
|
||||||
strHighScores[i + 1][2] = TRANS("Easy");
|
|
||||||
break;
|
|
||||||
case CSessionProperties::GD_NORMAL:
|
|
||||||
strHighScores[i + 1][2] = TRANS("Normal");
|
|
||||||
break;
|
|
||||||
case CSessionProperties::GD_HARD:
|
|
||||||
strHighScores[i + 1][2] = TRANS("Hard");
|
|
||||||
break;
|
|
||||||
case CSessionProperties::GD_EXTREME:
|
|
||||||
strHighScores[i + 1][2] = TRANS("Serious");
|
|
||||||
break;
|
|
||||||
case CSessionProperties::GD_EXTREME + 1:
|
|
||||||
strHighScores[i + 1][2] = TRANS("Mental");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
strHighScores[i + 1][0].PrintF("%d", i + 1);
|
|
||||||
strHighScores[i + 1][1] = _pGame->gm_ahseHighScores[i].hse_strPlayer;
|
|
||||||
strHighScores[i + 1][3] = TimeToString(_pGame->gm_ahseHighScores[i].hse_tmTime);
|
|
||||||
strHighScores[i + 1][4].PrintF("%03d", _pGame->gm_ahseHighScores[i].hse_ctKills);
|
|
||||||
strHighScores[i + 1][5].PrintF("%9d", _pGame->gm_ahseHighScores[i].hse_ctScore);
|
|
||||||
}}
|
|
||||||
|
|
||||||
PIX pixJ = pdp->GetHeight()*0.25f;
|
|
||||||
{for (INDEX iRow = 0; iRow<HIGHSCORE_COUNT + 1; iRow++) {
|
|
||||||
COLOR col = (iRow == 0) ? colHeader : colData;
|
|
||||||
if (iLastSet != -1 && iRow - 1 == iLastSet) {
|
|
||||||
col = colLastSet;
|
|
||||||
}
|
|
||||||
{for (INDEX iColumn = 0; iColumn<HSCOLUMNS; iColumn++) {
|
|
||||||
PIX pixI = pdp->GetWidth()*afI[iColumn];
|
|
||||||
if (iColumn == 1) {
|
|
||||||
pdp->PutText(strHighScores[iRow][iColumn], pixI, pixJ, col);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pdp->PutTextR(strHighScores[iRow][iColumn], pixI, pixJ, col);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
if (iRow == 0) {
|
|
||||||
pixJ += pdp->GetHeight()*0.06f;
|
|
||||||
} else {
|
|
||||||
pixJ += pdp->GetHeight()*0.04f;
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_HIGHSCORE_H
|
|
||||||
#define SE_INCL_MENU_GADGET_HIGHSCORE_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MenuGadget.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGHighScore : public CMenuGadget {
|
|
||||||
public:
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,223 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGKeyDefinition.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdSelect;
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
extern BOOL _bDefiningKey;
|
|
||||||
|
|
||||||
|
|
||||||
CMGKeyDefinition::CMGKeyDefinition(void)
|
|
||||||
{
|
|
||||||
mg_iState = DOING_NOTHING;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGKeyDefinition::OnActivate(void)
|
|
||||||
{
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
SetBindingNames(/*bDefining=*/TRUE);
|
|
||||||
mg_iState = RELEASE_RETURN_WAITING;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CMGKeyDefinition::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
// if waiting for a key definition
|
|
||||||
if (mg_iState == PRESS_KEY_WAITING) {
|
|
||||||
// do nothing
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if backspace pressed
|
|
||||||
if (iVKey == VK_BACK) {
|
|
||||||
// clear both keys
|
|
||||||
DefineKey(KID_NONE);
|
|
||||||
// message is processed
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return CMenuGadget::OnKeyDown(iVKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set names for both key bindings
|
|
||||||
void CMGKeyDefinition::SetBindingNames(BOOL bDefining)
|
|
||||||
{
|
|
||||||
// find the button
|
|
||||||
INDEX ict = 0;
|
|
||||||
INDEX iDik = 0;
|
|
||||||
FOREACHINLIST(CButtonAction, ba_lnNode, _pGame->gm_ctrlControlsExtra->ctrl_lhButtonActions, itba) {
|
|
||||||
if (ict == mg_iControlNumber) {
|
|
||||||
CButtonAction &ba = *itba;
|
|
||||||
// get the current bindings and names
|
|
||||||
INDEX iKey1 = ba.ba_iFirstKey;
|
|
||||||
INDEX iKey2 = ba.ba_iSecondKey;
|
|
||||||
BOOL bKey1Bound = iKey1 != KID_NONE;
|
|
||||||
BOOL bKey2Bound = iKey2 != KID_NONE;
|
|
||||||
CTString strKey1 = _pInput->GetButtonTransName(iKey1);
|
|
||||||
CTString strKey2 = _pInput->GetButtonTransName(iKey2);
|
|
||||||
|
|
||||||
// if defining
|
|
||||||
if (bDefining) {
|
|
||||||
// if only first key is defined
|
|
||||||
if (bKey1Bound && !bKey2Bound) {
|
|
||||||
// put question mark for second key
|
|
||||||
mg_strBinding = strKey1 + TRANS(" or ") + "?";
|
|
||||||
// otherwise
|
|
||||||
} else {
|
|
||||||
// put question mark only
|
|
||||||
mg_strBinding = "?";
|
|
||||||
}
|
|
||||||
// if not defining
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// if second key is defined
|
|
||||||
if (bKey2Bound) {
|
|
||||||
// add both
|
|
||||||
mg_strBinding = strKey1 + TRANS(" or ") + strKey2;
|
|
||||||
// if second key is undefined
|
|
||||||
} else {
|
|
||||||
// display only first one
|
|
||||||
mg_strBinding = strKey1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ict++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if not found, put errorneous string
|
|
||||||
mg_strBinding = "???";
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGKeyDefinition::Appear(void)
|
|
||||||
{
|
|
||||||
SetBindingNames(/*bDefining=*/FALSE);
|
|
||||||
CMenuGadget::Appear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGKeyDefinition::Disappear(void)
|
|
||||||
{
|
|
||||||
CMenuGadget::Disappear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGKeyDefinition::DefineKey(INDEX iDik)
|
|
||||||
{
|
|
||||||
// for each button in controls
|
|
||||||
INDEX ict = 0;
|
|
||||||
FOREACHINLIST(CButtonAction, ba_lnNode, _pGame->gm_ctrlControlsExtra->ctrl_lhButtonActions, itba) {
|
|
||||||
CButtonAction &ba = *itba;
|
|
||||||
// if it is this one
|
|
||||||
if (ict == mg_iControlNumber) {
|
|
||||||
// if should clear
|
|
||||||
if (iDik == KID_NONE) {
|
|
||||||
// unbind both
|
|
||||||
ba.ba_iFirstKey = KID_NONE;
|
|
||||||
ba.ba_iSecondKey = KID_NONE;
|
|
||||||
}
|
|
||||||
// if first key is unbound, or both keys are bound
|
|
||||||
if (ba.ba_iFirstKey == KID_NONE || ba.ba_iSecondKey != KID_NONE) {
|
|
||||||
// bind first key
|
|
||||||
ba.ba_iFirstKey = iDik;
|
|
||||||
// clear second key
|
|
||||||
ba.ba_iSecondKey = KID_NONE;
|
|
||||||
// if only first key bound
|
|
||||||
} else {
|
|
||||||
// bind second key
|
|
||||||
ba.ba_iSecondKey = iDik;
|
|
||||||
}
|
|
||||||
// if it is not this one
|
|
||||||
} else {
|
|
||||||
// clear bindings that contain this key
|
|
||||||
if (ba.ba_iFirstKey == iDik) {
|
|
||||||
ba.ba_iFirstKey = KID_NONE;
|
|
||||||
}
|
|
||||||
if (ba.ba_iSecondKey == iDik) {
|
|
||||||
ba.ba_iSecondKey = KID_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ict++;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetBindingNames(/*bDefining=*/FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGKeyDefinition::Think(void)
|
|
||||||
{
|
|
||||||
if (mg_iState == RELEASE_RETURN_WAITING)
|
|
||||||
{
|
|
||||||
_bDefiningKey = TRUE;
|
|
||||||
extern BOOL _bMouseUsedLast;
|
|
||||||
_bMouseUsedLast = FALSE;
|
|
||||||
_pInput->SetJoyPolling(TRUE);
|
|
||||||
_pInput->GetInput(FALSE);
|
|
||||||
if (_pInput->IsInputEnabled() &&
|
|
||||||
!_pInput->GetButtonState(KID_ENTER) &&
|
|
||||||
!_pInput->GetButtonState(KID_MOUSE1))
|
|
||||||
{
|
|
||||||
mg_iState = PRESS_KEY_WAITING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (mg_iState == PRESS_KEY_WAITING)
|
|
||||||
{
|
|
||||||
_pInput->SetJoyPolling(TRUE);
|
|
||||||
_pInput->GetInput(FALSE);
|
|
||||||
for (INDEX iDik = 0; iDik<MAX_OVERALL_BUTTONS; iDik++)
|
|
||||||
{
|
|
||||||
if (_pInput->GetButtonState(iDik))
|
|
||||||
{
|
|
||||||
// skip keys that cannot be defined
|
|
||||||
if (iDik == KID_TILDE) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// if escape not pressed
|
|
||||||
if (iDik != KID_ESCAPE) {
|
|
||||||
// define the new key
|
|
||||||
DefineKey(iDik);
|
|
||||||
// if escape pressed
|
|
||||||
} else {
|
|
||||||
// undefine the key
|
|
||||||
DefineKey(KID_NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// end defining loop
|
|
||||||
mg_iState = DOING_NOTHING;
|
|
||||||
_bDefiningKey = FALSE;
|
|
||||||
// refresh all buttons
|
|
||||||
pgmCurrentMenu->FillListItems();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGKeyDefinition::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixIL = box.Min()(1) + box.Size()(1)*0.45f;
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
pdp->PutTextR(mg_strLabel, pixIL, pixJ, col);
|
|
||||||
pdp->PutText(mg_strBinding, pixIR, pixJ, col);
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_KEYDEFINITION_H
|
|
||||||
#define SE_INCL_MENU_GADGET_KEYDEFINITION_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MenuGadget.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGKeyDefinition : public CMenuGadget {
|
|
||||||
public:
|
|
||||||
INDEX mg_iState;
|
|
||||||
INDEX mg_iControlNumber;
|
|
||||||
|
|
||||||
CTString mg_strLabel;
|
|
||||||
CTString mg_strBinding;
|
|
||||||
|
|
||||||
CMGKeyDefinition(void);
|
|
||||||
void Appear(void);
|
|
||||||
void Disappear(void);
|
|
||||||
void OnActivate(void);
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
void Think(void);
|
|
||||||
// set names for both key bindings
|
|
||||||
void SetBindingNames(BOOL bDefining);
|
|
||||||
void DefineKey(INDEX iDik);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,38 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGLevelButton.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
|
|
||||||
void CMGLevelButton::OnActivate(void)
|
|
||||||
{
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
_pGame->gam_strCustomLevel = mg_fnmLevel;
|
|
||||||
extern void(*_pAfterLevelChosen)(void);
|
|
||||||
_pAfterLevelChosen();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGLevelButton::OnSetFocus(void)
|
|
||||||
{
|
|
||||||
SetThumbnail(mg_fnmLevel);
|
|
||||||
CMGButton::OnSetFocus();
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_LEVELBUTTON_H
|
|
||||||
#define SE_INCL_MENU_GADGET_LEVELBUTTON_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGLevelButton : public CMGButton {
|
|
||||||
public:
|
|
||||||
CTFileName mg_fnmLevel;
|
|
||||||
|
|
||||||
void OnActivate(void);
|
|
||||||
void OnSetFocus(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,126 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGModel.h"
|
|
||||||
|
|
||||||
extern INDEX sam_bWideScreen;
|
|
||||||
|
|
||||||
|
|
||||||
CMGModel::CMGModel(void)
|
|
||||||
{
|
|
||||||
mg_fFloorY = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGModel::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
// if no model
|
|
||||||
if (mg_moModel.GetData() == NULL) {
|
|
||||||
// just render text
|
|
||||||
mg_strText = TRANS("No model");
|
|
||||||
CMGButton::Render(pdp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get position on screen
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
CDrawPort dpModel(pdp, box);
|
|
||||||
dpModel.Lock();
|
|
||||||
dpModel.FillZBuffer(1.0f);
|
|
||||||
|
|
||||||
_pGame->LCDSetDrawport(&dpModel);
|
|
||||||
// clear menu here
|
|
||||||
dpModel.Fill(C_BLACK | 255);
|
|
||||||
_pGame->LCDRenderClouds1();
|
|
||||||
_pGame->LCDRenderClouds2();
|
|
||||||
|
|
||||||
// prepare projection
|
|
||||||
CRenderModel rmRenderModel;
|
|
||||||
CPerspectiveProjection3D pr;
|
|
||||||
pr.FOVL() = sam_bWideScreen ? AngleDeg(45.0f) : AngleDeg(30.0f);
|
|
||||||
pr.ScreenBBoxL() = FLOATaabbox2D(
|
|
||||||
FLOAT2D(0.0f, 0.0f),
|
|
||||||
FLOAT2D((float)dpModel.GetWidth(), (float)dpModel.GetHeight())
|
|
||||||
);
|
|
||||||
pr.AspectRatioL() = 1.0f;
|
|
||||||
pr.FrontClipDistanceL() = 0.3f;
|
|
||||||
pr.ViewerPlacementL() = CPlacement3D(FLOAT3D(0, 0, 0), ANGLE3D(0, 0, 0));
|
|
||||||
|
|
||||||
// initialize remdering
|
|
||||||
CAnyProjection3D apr;
|
|
||||||
apr = pr;
|
|
||||||
BeginModelRenderingView(apr, &dpModel);
|
|
||||||
rmRenderModel.rm_vLightDirection = FLOAT3D(0.2f, -0.2f, -0.2f);
|
|
||||||
|
|
||||||
// if model needs floor
|
|
||||||
if (mg_moFloor.GetData() != NULL) {
|
|
||||||
// set floor's position
|
|
||||||
CPlacement3D pl = mg_plModel;
|
|
||||||
pl.pl_OrientationAngle = ANGLE3D(0, 0, 0);
|
|
||||||
pl.pl_PositionVector = mg_plModel.pl_PositionVector;
|
|
||||||
pl.pl_PositionVector(2) += mg_fFloorY;
|
|
||||||
rmRenderModel.SetObjectPlacement(pl);
|
|
||||||
|
|
||||||
// render the floor
|
|
||||||
rmRenderModel.rm_colLight = C_WHITE;
|
|
||||||
rmRenderModel.rm_colAmbient = C_WHITE;
|
|
||||||
mg_moFloor.SetupModelRendering(rmRenderModel);
|
|
||||||
mg_moFloor.RenderModel(rmRenderModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set model's position
|
|
||||||
CPlacement3D pl;
|
|
||||||
pl.pl_OrientationAngle = mg_plModel.pl_OrientationAngle;
|
|
||||||
pl.pl_PositionVector = mg_plModel.pl_PositionVector;
|
|
||||||
extern FLOAT sam_fPlayerOffset;
|
|
||||||
pl.pl_PositionVector(3) += sam_fPlayerOffset;
|
|
||||||
rmRenderModel.SetObjectPlacement(pl);
|
|
||||||
|
|
||||||
// render the model
|
|
||||||
rmRenderModel.rm_colLight = LerpColor(C_BLACK, C_WHITE, 0.4f) | CT_OPAQUE;
|
|
||||||
rmRenderModel.rm_colAmbient = LerpColor(C_BLACK, C_WHITE, 0.2f) | CT_OPAQUE;
|
|
||||||
mg_moModel.SetupModelRendering(rmRenderModel);
|
|
||||||
FLOATplane3D plFloorPlane = FLOATplane3D(FLOAT3D(0.0f, 1.0f, 0.0f),
|
|
||||||
mg_plModel.pl_PositionVector(2) + mg_fFloorY);
|
|
||||||
FLOAT3D vShadowLightDir = FLOAT3D(-0.2f, -0.4f, -0.6f);
|
|
||||||
CPlacement3D plLightPlacement = CPlacement3D(
|
|
||||||
mg_plModel.pl_PositionVector +
|
|
||||||
vShadowLightDir*mg_plModel.pl_PositionVector(3) * 5,
|
|
||||||
ANGLE3D(0, 0, 0));
|
|
||||||
mg_moModel.RenderShadow(rmRenderModel, plLightPlacement, 200.0f, 200.0f, 1.0f, plFloorPlane);
|
|
||||||
mg_moModel.RenderModel(rmRenderModel);
|
|
||||||
EndModelRenderingView();
|
|
||||||
|
|
||||||
_pGame->LCDScreenBox(_pGame->LCDGetColor(C_GREEN, "model box") | GetCurrentColor());
|
|
||||||
|
|
||||||
dpModel.Unlock();
|
|
||||||
|
|
||||||
pdp->Unlock();
|
|
||||||
pdp->Lock();
|
|
||||||
_pGame->LCDSetDrawport(pdp);
|
|
||||||
|
|
||||||
// print the model name
|
|
||||||
{
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, BoxPlayerModelName());
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
|
|
||||||
PIX pixI = box.Min()(1);
|
|
||||||
PIX pixJ = box.Max()(2);
|
|
||||||
pdp->PutText(mg_strText, pixI, pixJ, col);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_MODEL_H
|
|
||||||
#define SE_INCL_MENU_GADGET_MODEL_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGModel : public CMGButton {
|
|
||||||
public:
|
|
||||||
CModelObject mg_moModel;
|
|
||||||
CModelObject mg_moFloor;
|
|
||||||
CPlacement3D mg_plModel;
|
|
||||||
BOOL mg_fFloorY;
|
|
||||||
|
|
||||||
CMGModel(void);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,454 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "MGServerList.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdSelect;
|
|
||||||
extern CSoundData *_psdPress;
|
|
||||||
|
|
||||||
|
|
||||||
FLOATaabbox2D GetBoxPartHoriz(const FLOATaabbox2D &box, FLOAT fMin, FLOAT fMax)
|
|
||||||
{
|
|
||||||
FLOAT fBoxMin = box.Min()(1);
|
|
||||||
FLOAT fBoxSize = box.Size()(1);
|
|
||||||
|
|
||||||
return FLOATaabbox2D(
|
|
||||||
FLOAT2D(fBoxMin + fBoxSize*fMin, box.Min()(2)),
|
|
||||||
FLOAT2D(fBoxMin + fBoxSize*fMax, box.Max()(2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintInBox(CDrawPort *pdp, PIX pixI, PIX pixJ, PIX pixSizeI, CTString str, COLOR col)
|
|
||||||
{
|
|
||||||
str = str.Undecorated();
|
|
||||||
PIX pixCharSize = pdp->dp_pixTextCharSpacing + pdp->dp_FontData->fd_pixCharWidth;
|
|
||||||
str.TrimRight(pixSizeI / pixCharSize);
|
|
||||||
|
|
||||||
// print text
|
|
||||||
pdp->PutText(str, pixI, pixJ, col);
|
|
||||||
}
|
|
||||||
|
|
||||||
CMGServerList::CMGServerList()
|
|
||||||
{
|
|
||||||
mg_iSelected = 0;
|
|
||||||
mg_iFirstOnScreen = 0;
|
|
||||||
mg_ctOnScreen = 10;
|
|
||||||
mg_pixMinI = 0;
|
|
||||||
mg_pixMaxI = 0;
|
|
||||||
mg_pixListMinJ = 0;
|
|
||||||
mg_pixListStepJ = 0;
|
|
||||||
mg_pixDragJ = -1;
|
|
||||||
mg_iDragLine = -1;
|
|
||||||
mg_pixMouseDrag = -1;
|
|
||||||
// by default, sort by ping, best on top
|
|
||||||
mg_iSort = 2;
|
|
||||||
mg_bSortDown = FALSE;
|
|
||||||
}
|
|
||||||
void CMGServerList::AdjustFirstOnScreen(void)
|
|
||||||
{
|
|
||||||
INDEX ctSessions = _lhServers.Count();
|
|
||||||
mg_iSelected = Clamp(mg_iSelected, 0L, ClampDn(ctSessions - 1L, 0L));
|
|
||||||
mg_iFirstOnScreen = Clamp(mg_iFirstOnScreen, 0L, ClampDn(ctSessions - mg_ctOnScreen, 0L));
|
|
||||||
|
|
||||||
if (mg_iSelected<mg_iFirstOnScreen) {
|
|
||||||
mg_iFirstOnScreen = ClampUp(mg_iSelected, ClampDn(ctSessions - mg_ctOnScreen - 1L, 0L));
|
|
||||||
} else if (mg_iSelected >= mg_iFirstOnScreen + mg_ctOnScreen) {
|
|
||||||
mg_iFirstOnScreen = ClampDn(mg_iSelected - mg_ctOnScreen + 1L, 0L);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL _iSort = 0;
|
|
||||||
BOOL _bSortDown = FALSE;
|
|
||||||
|
|
||||||
int CompareSessions(const void *pv0, const void *pv1)
|
|
||||||
{
|
|
||||||
const CNetworkSession &ns0 = **(const CNetworkSession **)pv0;
|
|
||||||
const CNetworkSession &ns1 = **(const CNetworkSession **)pv1;
|
|
||||||
|
|
||||||
int iResult = 0;
|
|
||||||
switch (_iSort) {
|
|
||||||
case 0: iResult = stricmp(ns0.ns_strSession, ns1.ns_strSession); break;
|
|
||||||
case 1: iResult = stricmp(ns0.ns_strWorld, ns1.ns_strWorld); break;
|
|
||||||
case 2: iResult = Sgn(ns0.ns_tmPing - ns1.ns_tmPing); break;
|
|
||||||
case 3: iResult = Sgn(ns0.ns_ctPlayers - ns1.ns_ctPlayers); break;
|
|
||||||
case 4: iResult = stricmp(ns0.ns_strGameType, ns1.ns_strGameType); break;
|
|
||||||
case 5: iResult = stricmp(ns0.ns_strMod, ns1.ns_strMod); break;
|
|
||||||
case 6: iResult = stricmp(ns0.ns_strVer, ns1.ns_strVer); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iResult == 0) { // make sure we always have unique order when resorting
|
|
||||||
return stricmp(ns0.ns_strAddress, ns1.ns_strAddress);;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _bSortDown ? -iResult : iResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern CMGButton mgServerColumn[7];
|
|
||||||
extern CMGEdit mgServerFilter[7];
|
|
||||||
|
|
||||||
void SortAndFilterServers(void)
|
|
||||||
{
|
|
||||||
{FORDELETELIST(CNetworkSession, ns_lnNode, _lhServers, itns) {
|
|
||||||
delete &*itns;
|
|
||||||
}}
|
|
||||||
|
|
||||||
{FOREACHINLIST(CNetworkSession, ns_lnNode, _pNetwork->ga_lhEnumeratedSessions, itns) {
|
|
||||||
CNetworkSession &ns = *itns;
|
|
||||||
extern CTString _strServerFilter[7];
|
|
||||||
if (_strServerFilter[0] != "" && !ns.ns_strSession.Matches("*" + _strServerFilter[0] + "*")) continue;
|
|
||||||
if (_strServerFilter[1] != "" && !ns.ns_strWorld.Matches("*" + _strServerFilter[1] + "*")) continue;
|
|
||||||
if (_strServerFilter[2] != "") {
|
|
||||||
char strCompare[3] = { 0, 0, 0 };
|
|
||||||
int iPing = 0;
|
|
||||||
_strServerFilter[2].ScanF("%2[<>=]%d", strCompare, &iPing);
|
|
||||||
if (strcmp(strCompare, "<") == 0 && !(int(ns.ns_tmPing * 1000)< iPing)) continue;
|
|
||||||
if (strcmp(strCompare, "<=") == 0 && !(int(ns.ns_tmPing * 1000) <= iPing)) continue;
|
|
||||||
if (strcmp(strCompare, ">") == 0 && !(int(ns.ns_tmPing * 1000)> iPing)) continue;
|
|
||||||
if (strcmp(strCompare, ">=") == 0 && !(int(ns.ns_tmPing * 1000) >= iPing)) continue;
|
|
||||||
if (strcmp(strCompare, "=") == 0 && !(int(ns.ns_tmPing * 1000) == iPing)) continue;
|
|
||||||
}
|
|
||||||
if (_strServerFilter[3] != "") {
|
|
||||||
char strCompare[3] = { 0, 0, 0 };
|
|
||||||
int iPlayers = 0;
|
|
||||||
_strServerFilter[3].ScanF("%2[<>=]%d", strCompare, &iPlayers);
|
|
||||||
if (strcmp(strCompare, "<") == 0 && !(ns.ns_ctPlayers< iPlayers)) continue;
|
|
||||||
if (strcmp(strCompare, "<=") == 0 && !(ns.ns_ctPlayers <= iPlayers)) continue;
|
|
||||||
if (strcmp(strCompare, ">") == 0 && !(ns.ns_ctPlayers> iPlayers)) continue;
|
|
||||||
if (strcmp(strCompare, ">=") == 0 && !(ns.ns_ctPlayers >= iPlayers)) continue;
|
|
||||||
if (strcmp(strCompare, "=") == 0 && !(ns.ns_ctPlayers == iPlayers)) continue;
|
|
||||||
}
|
|
||||||
if (_strServerFilter[4] != "" && !ns.ns_strGameType.Matches("*" + _strServerFilter[4] + "*")) continue;
|
|
||||||
if (_strServerFilter[5] != "" && !ns.ns_strMod.Matches("*" + _strServerFilter[5] + "*")) continue;
|
|
||||||
if (_strServerFilter[6] != "" && !ns.ns_strVer.Matches("*" + _strServerFilter[6] + "*")) continue;
|
|
||||||
|
|
||||||
CNetworkSession *pnsNew = new CNetworkSession;
|
|
||||||
pnsNew->Copy(*itns);
|
|
||||||
_lhServers.AddTail(pnsNew->ns_lnNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_lhServers.Sort(CompareSessions, offsetof(CNetworkSession, ns_lnNode));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGServerList::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
_iSort = mg_iSort;
|
|
||||||
_bSortDown = mg_bSortDown;
|
|
||||||
SortAndFilterServers();
|
|
||||||
|
|
||||||
SetFontSmall(pdp);
|
|
||||||
BOOL bFocusedBefore = mg_bFocused;
|
|
||||||
mg_bFocused = FALSE;
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
|
|
||||||
PIX pixDPSizeI = pdp->GetWidth();
|
|
||||||
PIX pixDPSizeJ = pdp->GetHeight();
|
|
||||||
PIX pixCharSizeI = pdp->dp_pixTextCharSpacing + pdp->dp_FontData->fd_pixCharWidth;
|
|
||||||
PIX pixCharSizeJ = pdp->dp_pixTextLineSpacing + pdp->dp_FontData->fd_pixCharHeight + 1;
|
|
||||||
PIX pixLineSize = 1;
|
|
||||||
PIX pixSliderSizeI = 10;
|
|
||||||
PIX pixOuterMargin = 20;
|
|
||||||
|
|
||||||
INDEX ctSessions = _lhServers.Count();
|
|
||||||
INDEX iSession = 0;
|
|
||||||
|
|
||||||
INDEX ctColumns[7];
|
|
||||||
{for (INDEX i = 0; i<ARRAYCOUNT(ctColumns); i++) {
|
|
||||||
ctColumns[i] = mgServerColumn[i].mg_strText.Length() + 1;
|
|
||||||
}}
|
|
||||||
|
|
||||||
PIX pixSizePing = Max(PIX(pixCharSizeI * 5), pixCharSizeI*ctColumns[2]) + pixLineSize * 2;
|
|
||||||
PIX pixSizePlayerCt = Max(PIX(pixCharSizeI * 5), pixCharSizeI*ctColumns[3]) + pixLineSize * 2;
|
|
||||||
PIX pixSizeGameType = Max(Min(PIX(pixCharSizeI * 20), PIX(pixDPSizeI*0.2f)), pixCharSizeI*ctColumns[4]) + pixLineSize * 2;
|
|
||||||
PIX pixSizeMapName = Max(PIX(pixDPSizeI*0.25f), pixCharSizeI*ctColumns[1]) + pixLineSize * 2;
|
|
||||||
PIX pixSizeMod = Max(Min(PIX(pixCharSizeI * 11), PIX(pixDPSizeI*0.2f)), pixCharSizeI*ctColumns[5]) + pixLineSize * 2;
|
|
||||||
PIX pixSizeVer = Max(PIX(pixCharSizeI * 7), pixCharSizeI*ctColumns[6]) + pixLineSize * 2;
|
|
||||||
|
|
||||||
PIX apixSeparatorI[9];
|
|
||||||
apixSeparatorI[0] = pixOuterMargin;
|
|
||||||
apixSeparatorI[8] = pixDPSizeI - pixOuterMargin - pixLineSize;
|
|
||||||
apixSeparatorI[7] = apixSeparatorI[8] - pixSliderSizeI - pixLineSize;
|
|
||||||
apixSeparatorI[6] = apixSeparatorI[7] - pixSizeVer - pixLineSize;
|
|
||||||
apixSeparatorI[5] = apixSeparatorI[6] - pixSizeMod - pixLineSize;
|
|
||||||
apixSeparatorI[4] = apixSeparatorI[5] - pixSizeGameType - pixLineSize;
|
|
||||||
apixSeparatorI[3] = apixSeparatorI[4] - pixSizePlayerCt - pixLineSize;
|
|
||||||
apixSeparatorI[2] = apixSeparatorI[3] - pixSizePing - pixLineSize;
|
|
||||||
apixSeparatorI[1] = apixSeparatorI[2] - pixSizeMapName - pixLineSize;
|
|
||||||
apixSeparatorI[1] = apixSeparatorI[2] - pixSizeMapName - pixLineSize;
|
|
||||||
PIX pixSizeServerName = apixSeparatorI[1] - apixSeparatorI[0] - pixLineSize;
|
|
||||||
|
|
||||||
PIX pixTopJ = pixDPSizeJ*0.15f;
|
|
||||||
PIX pixBottomJ = pixDPSizeJ*0.82f;
|
|
||||||
|
|
||||||
PIX pixFilterTopJ = pixTopJ + pixLineSize * 3 + pixCharSizeJ + pixLineSize * 3;
|
|
||||||
PIX pixListTopJ = pixFilterTopJ + pixLineSize + pixCharSizeJ + pixLineSize;
|
|
||||||
INDEX ctSessionsOnScreen = (pixBottomJ - pixListTopJ) / pixCharSizeJ;
|
|
||||||
pixBottomJ = pixListTopJ + pixCharSizeJ*ctSessionsOnScreen + pixLineSize * 2;
|
|
||||||
|
|
||||||
mg_pixMinI = apixSeparatorI[0];
|
|
||||||
mg_pixMaxI = apixSeparatorI[5];
|
|
||||||
mg_pixListMinJ = pixListTopJ;
|
|
||||||
mg_pixListStepJ = pixCharSizeJ;
|
|
||||||
mg_pixSBMinI = apixSeparatorI[7];
|
|
||||||
mg_pixSBMaxI = apixSeparatorI[8];
|
|
||||||
mg_pixSBMinJ = pixListTopJ;
|
|
||||||
mg_pixSBMaxJ = pixBottomJ;
|
|
||||||
mg_pixHeaderMinJ = pixTopJ;
|
|
||||||
mg_pixHeaderMidJ = pixTopJ + pixLineSize + pixCharSizeJ;
|
|
||||||
mg_pixHeaderMaxJ = pixTopJ + (pixLineSize + pixCharSizeJ) * 2;
|
|
||||||
memcpy(mg_pixHeaderI, apixSeparatorI, sizeof(mg_pixHeaderI));
|
|
||||||
|
|
||||||
{for (INDEX i = 0; i<ARRAYCOUNT(mgServerFilter); i++) {
|
|
||||||
mgServerColumn[i].mg_boxOnScreen = PixBoxToFloatBox(pdp,
|
|
||||||
PIXaabbox2D(PIX2D(apixSeparatorI[i] + pixCharSizeI / 2, pixTopJ + pixLineSize * 4), PIX2D(apixSeparatorI[i + 1] - pixCharSizeI / 2, pixTopJ + pixLineSize * 4 + pixCharSizeJ)));
|
|
||||||
mgServerFilter[i].mg_boxOnScreen = PixBoxToFloatBox(pdp,
|
|
||||||
PIXaabbox2D(PIX2D(apixSeparatorI[i] + pixCharSizeI / 2, pixFilterTopJ), PIX2D(apixSeparatorI[i + 1] - pixCharSizeI / 2, pixFilterTopJ + pixCharSizeJ)));
|
|
||||||
}}
|
|
||||||
|
|
||||||
for (INDEX i = 0; i<ARRAYCOUNT(apixSeparatorI); i++) {
|
|
||||||
pdp->DrawLine(apixSeparatorI[i], pixTopJ, apixSeparatorI[i], pixBottomJ, col | CT_OPAQUE);
|
|
||||||
}
|
|
||||||
pdp->DrawLine(apixSeparatorI[0], pixTopJ, apixSeparatorI[8], pixTopJ, col | CT_OPAQUE);
|
|
||||||
pdp->DrawLine(apixSeparatorI[0], pixListTopJ - pixLineSize, apixSeparatorI[8], pixListTopJ - pixLineSize, col | CT_OPAQUE);
|
|
||||||
pdp->DrawLine(apixSeparatorI[0], pixBottomJ, apixSeparatorI[8], pixBottomJ, col | CT_OPAQUE);
|
|
||||||
|
|
||||||
PIXaabbox2D boxHandle = GetScrollBarHandleBox();
|
|
||||||
pdp->Fill(boxHandle.Min()(1) + 2, boxHandle.Min()(2) + 2, boxHandle.Size()(1) - 3, boxHandle.Size()(2) - 3, col | CT_OPAQUE);
|
|
||||||
|
|
||||||
PIX pixJ = pixTopJ + pixLineSize * 2 + 1;
|
|
||||||
|
|
||||||
mg_ctOnScreen = ctSessionsOnScreen;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
|
|
||||||
if (_lhServers.Count() == 0) {
|
|
||||||
if (_pNetwork->ga_strEnumerationStatus != "") {
|
|
||||||
mg_bFocused = TRUE;
|
|
||||||
COLOR colItem = GetCurrentColor();
|
|
||||||
PrintInBox(pdp, apixSeparatorI[0] + pixCharSizeI, pixListTopJ + pixCharSizeJ + pixLineSize + 1, apixSeparatorI[1] - apixSeparatorI[0],
|
|
||||||
TRANS("searching..."), colItem);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
FOREACHINLIST(CNetworkSession, ns_lnNode, _lhServers, itns) {
|
|
||||||
CNetworkSession &ns = *itns;
|
|
||||||
|
|
||||||
if (iSession<mg_iFirstOnScreen || iSession >= mg_iFirstOnScreen + ctSessionsOnScreen) {
|
|
||||||
iSession++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
PIX pixJ = pixListTopJ + (iSession - mg_iFirstOnScreen)*pixCharSizeJ + pixLineSize + 1;
|
|
||||||
|
|
||||||
mg_bFocused = bFocusedBefore&&iSession == mg_iSelected;
|
|
||||||
COLOR colItem = GetCurrentColor();
|
|
||||||
|
|
||||||
if (ns.ns_strVer != _SE_VER_STRING) {
|
|
||||||
colItem = MulColors(colItem, 0xA0A0A0FF);
|
|
||||||
}
|
|
||||||
|
|
||||||
CTString strPing(0, "%4d", INDEX(ns.ns_tmPing * 1000));
|
|
||||||
CTString strPlayersCt(0, "%2d/%2d", ns.ns_ctPlayers, ns.ns_ctMaxPlayers);
|
|
||||||
CTString strMod = ns.ns_strMod;
|
|
||||||
if (strMod == "") {
|
|
||||||
strMod = "SeriousSam";
|
|
||||||
}
|
|
||||||
PrintInBox(pdp, apixSeparatorI[0] + pixCharSizeI / 2, pixJ, apixSeparatorI[1] - apixSeparatorI[0] - pixCharSizeI, ns.ns_strSession, colItem);
|
|
||||||
PrintInBox(pdp, apixSeparatorI[1] + pixCharSizeI / 2, pixJ, apixSeparatorI[2] - apixSeparatorI[1] - pixCharSizeI, TranslateConst(ns.ns_strWorld), colItem);
|
|
||||||
PrintInBox(pdp, apixSeparatorI[2] + pixCharSizeI / 2, pixJ, apixSeparatorI[3] - apixSeparatorI[2] - pixCharSizeI, strPing, colItem);
|
|
||||||
PrintInBox(pdp, apixSeparatorI[3] + pixCharSizeI / 2, pixJ, apixSeparatorI[4] - apixSeparatorI[3] - pixCharSizeI, strPlayersCt, colItem);
|
|
||||||
PrintInBox(pdp, apixSeparatorI[4] + pixCharSizeI / 2, pixJ, apixSeparatorI[5] - apixSeparatorI[4] - pixCharSizeI, TranslateConst(ns.ns_strGameType), colItem);
|
|
||||||
PrintInBox(pdp, apixSeparatorI[5] + pixCharSizeI / 2, pixJ, apixSeparatorI[6] - apixSeparatorI[5] - pixCharSizeI, TranslateConst(strMod), colItem);
|
|
||||||
PrintInBox(pdp, apixSeparatorI[6] + pixCharSizeI / 2, pixJ, apixSeparatorI[7] - apixSeparatorI[6] - pixCharSizeI, ns.ns_strVer, colItem);
|
|
||||||
|
|
||||||
iSession++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mg_bFocused = bFocusedBefore;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INDEX SliderPixToIndex(PIX pixOffset, INDEX iVisible, INDEX iTotal, PIXaabbox2D boxFull)
|
|
||||||
{
|
|
||||||
FLOAT fSize = ClampUp(FLOAT(iVisible) / iTotal, 1.0f);
|
|
||||||
PIX pixFull = boxFull.Size()(2);
|
|
||||||
PIX pixSize = PIX(pixFull*fSize);
|
|
||||||
if (pixSize >= boxFull.Size()(2)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return (iTotal*pixOffset) / pixFull;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PIXaabbox2D GetSliderBox(INDEX iFirst, INDEX iVisible, INDEX iTotal,
|
|
||||||
PIXaabbox2D boxFull)
|
|
||||||
{
|
|
||||||
if (iTotal <= 0) {
|
|
||||||
return boxFull;
|
|
||||||
}
|
|
||||||
FLOAT fSize = ClampUp(FLOAT(iVisible) / iTotal, 1.0f);
|
|
||||||
PIX pixFull = boxFull.Size()(2);
|
|
||||||
PIX pixSize = PIX(pixFull*fSize);
|
|
||||||
pixSize = ClampDn(pixSize, boxFull.Size()(1));
|
|
||||||
PIX pixTop = pixFull*(FLOAT(iFirst) / iTotal) + boxFull.Min()(2);
|
|
||||||
PIX pixI0 = boxFull.Min()(1);
|
|
||||||
PIX pixI1 = boxFull.Max()(1);
|
|
||||||
return PIXaabbox2D(PIX2D(pixI0, pixTop), PIX2D(pixI1, pixTop + pixSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
PIXaabbox2D CMGServerList::GetScrollBarFullBox(void)
|
|
||||||
{
|
|
||||||
return PIXaabbox2D(PIX2D(mg_pixSBMinI, mg_pixSBMinJ), PIX2D(mg_pixSBMaxI, mg_pixSBMaxJ));
|
|
||||||
}
|
|
||||||
|
|
||||||
PIXaabbox2D CMGServerList::GetScrollBarHandleBox(void)
|
|
||||||
{
|
|
||||||
return GetSliderBox(mg_iFirstOnScreen, mg_ctOnScreen, _lhServers.Count(), GetScrollBarFullBox());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGServerList::OnMouseOver(PIX pixI, PIX pixJ)
|
|
||||||
{
|
|
||||||
mg_pixMouseI = pixI;
|
|
||||||
mg_pixMouseJ = pixJ;
|
|
||||||
|
|
||||||
if (!(GetKeyState(VK_LBUTTON) & 0x8000)) {
|
|
||||||
mg_pixDragJ = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL bInSlider = (pixI >= mg_pixSBMinI && pixI <= mg_pixSBMaxI && pixJ >= mg_pixSBMinJ && pixJ <= mg_pixSBMaxJ);
|
|
||||||
if (mg_pixDragJ >= 0 && bInSlider) {
|
|
||||||
PIX pixDelta = pixJ - mg_pixDragJ;
|
|
||||||
INDEX ctSessions = _lhServers.Count();
|
|
||||||
INDEX iWantedLine = mg_iDragLine +
|
|
||||||
SliderPixToIndex(pixDelta, mg_ctOnScreen, ctSessions, GetScrollBarFullBox());
|
|
||||||
mg_iFirstOnScreen = Clamp(iWantedLine, 0L, ClampDn(ctSessions - mg_ctOnScreen, 0L));
|
|
||||||
mg_iSelected = Clamp(mg_iSelected, mg_iFirstOnScreen, mg_iFirstOnScreen + mg_ctOnScreen - 1L);
|
|
||||||
// AdjustFirstOnScreen();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if some server is selected
|
|
||||||
if (pixI >= mg_pixMinI && pixI <= mg_pixMaxI) {
|
|
||||||
INDEX iOnScreen = (pixJ - mg_pixListMinJ) / mg_pixListStepJ;
|
|
||||||
if (iOnScreen >= 0 && iOnScreen<mg_ctOnScreen) {
|
|
||||||
// put focus on it
|
|
||||||
mg_iSelected = mg_iFirstOnScreen + iOnScreen;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
mg_pixMouseDrag = -1;
|
|
||||||
}
|
|
||||||
} else if (bInSlider) {
|
|
||||||
mg_pixMouseDrag = pixJ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CMGServerList::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
switch (iVKey) {
|
|
||||||
case VK_UP:
|
|
||||||
mg_iSelected -= 1;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
break;
|
|
||||||
case VK_DOWN:
|
|
||||||
mg_iSelected += 1;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
break;
|
|
||||||
case VK_PRIOR:
|
|
||||||
mg_iSelected -= mg_ctOnScreen - 1;
|
|
||||||
mg_iFirstOnScreen -= mg_ctOnScreen - 1;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
break;
|
|
||||||
case VK_NEXT:
|
|
||||||
mg_iSelected += mg_ctOnScreen - 1;
|
|
||||||
mg_iFirstOnScreen += mg_ctOnScreen - 1;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
break;
|
|
||||||
case 11:
|
|
||||||
mg_iSelected -= 3;
|
|
||||||
mg_iFirstOnScreen -= 3;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
mg_iSelected += 3;
|
|
||||||
mg_iFirstOnScreen += 3;
|
|
||||||
AdjustFirstOnScreen();
|
|
||||||
break;
|
|
||||||
case VK_LBUTTON:
|
|
||||||
/* if (mg_pixMouseJ>=mg_pixHeaderMinJ && mg_pixMouseJ<=mg_pixHeaderMidJ
|
|
||||||
&& mg_pixMouseI>=mg_pixHeaderI[0] && mg_pixMouseI<=mg_pixHeaderI[7]) {
|
|
||||||
INDEX iNewSort = mg_iSort;
|
|
||||||
if (mg_pixMouseI<=mg_pixHeaderI[1]) {
|
|
||||||
iNewSort = 0;
|
|
||||||
} else if (mg_pixMouseI<=mg_pixHeaderI[2]) {
|
|
||||||
iNewSort = 1;
|
|
||||||
} else if (mg_pixMouseI<=mg_pixHeaderI[3]) {
|
|
||||||
iNewSort = 2;
|
|
||||||
} else if (mg_pixMouseI<=mg_pixHeaderI[4]) {
|
|
||||||
iNewSort = 3;
|
|
||||||
} else if (mg_pixMouseI<=mg_pixHeaderI[5]) {
|
|
||||||
iNewSort = 4;
|
|
||||||
} else if (mg_pixMouseI<=mg_pixHeaderI[6]) {
|
|
||||||
iNewSort = 5;
|
|
||||||
} else if (mg_pixMouseI<=mg_pixHeaderI[7]) {
|
|
||||||
iNewSort = 6;
|
|
||||||
}
|
|
||||||
if (iNewSort==mg_iSort) {
|
|
||||||
mg_bSortDown = !mg_bSortDown;
|
|
||||||
} else {
|
|
||||||
mg_bSortDown = FALSE;
|
|
||||||
}
|
|
||||||
mg_iSort = iNewSort;
|
|
||||||
break;
|
|
||||||
} else */if (mg_pixMouseDrag >= 0) {
|
|
||||||
mg_pixDragJ = mg_pixMouseDrag;
|
|
||||||
mg_iDragLine = mg_iFirstOnScreen;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case VK_RETURN:
|
|
||||||
PlayMenuSound(_psdPress);
|
|
||||||
IFeel_PlayEffect("Menu_press");
|
|
||||||
{INDEX i = 0;
|
|
||||||
FOREACHINLIST(CNetworkSession, ns_lnNode, _lhServers, itns) {
|
|
||||||
if (i == mg_iSelected) {
|
|
||||||
|
|
||||||
char strAddress[256];
|
|
||||||
int iPort;
|
|
||||||
itns->ns_strAddress.ScanF("%200[^:]:%d", &strAddress, &iPort);
|
|
||||||
_pGame->gam_strJoinAddress = strAddress;
|
|
||||||
_pShell->SetINDEX("net_iPort", iPort);
|
|
||||||
extern void StartSelectPlayersMenuFromServers(void);
|
|
||||||
StartSelectPlayersMenuFromServers();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGServerList::OnSetFocus(void)
|
|
||||||
{
|
|
||||||
mg_bFocused = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGServerList::OnKillFocus(void)
|
|
||||||
{
|
|
||||||
mg_bFocused = FALSE;
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_SERVERLIST_H
|
|
||||||
#define SE_INCL_MENU_GADGET_SERVERLIST_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGServerList : public CMGButton {
|
|
||||||
public:
|
|
||||||
INDEX mg_iSelected;
|
|
||||||
INDEX mg_iFirstOnScreen;
|
|
||||||
INDEX mg_ctOnScreen;
|
|
||||||
// server list dimensions
|
|
||||||
PIX mg_pixMinI;
|
|
||||||
PIX mg_pixMaxI;
|
|
||||||
PIX mg_pixListMinJ;
|
|
||||||
PIX mg_pixListStepJ;
|
|
||||||
// header dimensions
|
|
||||||
PIX mg_pixHeaderMinJ;
|
|
||||||
PIX mg_pixHeaderMidJ;
|
|
||||||
PIX mg_pixHeaderMaxJ;
|
|
||||||
PIX mg_pixHeaderI[8];
|
|
||||||
// scrollbar dimensions
|
|
||||||
PIX mg_pixSBMinI;
|
|
||||||
PIX mg_pixSBMaxI;
|
|
||||||
PIX mg_pixSBMinJ;
|
|
||||||
PIX mg_pixSBMaxJ;
|
|
||||||
// scrollbar dragging params
|
|
||||||
PIX mg_pixDragJ;
|
|
||||||
PIX mg_iDragLine;
|
|
||||||
PIX mg_pixMouseDrag;
|
|
||||||
// current mouse pos
|
|
||||||
PIX mg_pixMouseI;
|
|
||||||
PIX mg_pixMouseJ;
|
|
||||||
|
|
||||||
INDEX mg_iSort; // column to sort by
|
|
||||||
BOOL mg_bSortDown; // sort in reverse order
|
|
||||||
|
|
||||||
CMGServerList();
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
PIXaabbox2D GetScrollBarFullBox(void);
|
|
||||||
PIXaabbox2D GetScrollBarHandleBox(void);
|
|
||||||
void OnSetFocus(void);
|
|
||||||
void OnKillFocus(void);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
void AdjustFirstOnScreen(void);
|
|
||||||
void OnMouseOver(PIX pixI, PIX pixJ);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,126 +0,0 @@
|
|||||||
/* /* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGSlider.h"
|
|
||||||
|
|
||||||
extern PIX _pixCursorPosI;
|
|
||||||
extern PIX _pixCursorPosJ;
|
|
||||||
extern INDEX sam_bWideScreen;
|
|
||||||
|
|
||||||
|
|
||||||
CMGSlider::CMGSlider()
|
|
||||||
{
|
|
||||||
mg_iMinPos = 0;
|
|
||||||
mg_iMaxPos = 16;
|
|
||||||
mg_iCurPos = 8;
|
|
||||||
mg_pOnSliderChange = NULL;
|
|
||||||
mg_fFactor = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGSlider::ApplyCurrentPosition(void)
|
|
||||||
{
|
|
||||||
mg_iCurPos = Clamp(mg_iCurPos, mg_iMinPos, mg_iMaxPos);
|
|
||||||
FLOAT fStretch = FLOAT(mg_iCurPos) / (mg_iMaxPos - mg_iMinPos);
|
|
||||||
mg_fFactor = fStretch;
|
|
||||||
|
|
||||||
if (mg_pOnSliderChange != NULL) {
|
|
||||||
mg_pOnSliderChange(mg_iCurPos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGSlider::ApplyGivenPosition(INDEX iMin, INDEX iMax, INDEX iCur)
|
|
||||||
{
|
|
||||||
mg_iMinPos = iMin;
|
|
||||||
mg_iMaxPos = iMax;
|
|
||||||
mg_iCurPos = iCur;
|
|
||||||
ApplyCurrentPosition();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BOOL CMGSlider::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
// if scrolling left
|
|
||||||
if ((iVKey == VK_BACK || iVKey == VK_LEFT) && mg_iCurPos>mg_iMinPos) {
|
|
||||||
mg_iCurPos--;
|
|
||||||
ApplyCurrentPosition();
|
|
||||||
return TRUE;
|
|
||||||
// if scrolling right
|
|
||||||
} else if ((iVKey == VK_RETURN || iVKey == VK_RIGHT) && mg_iCurPos<mg_iMaxPos) {
|
|
||||||
mg_iCurPos++;
|
|
||||||
ApplyCurrentPosition();
|
|
||||||
return TRUE;
|
|
||||||
// if lmb pressed
|
|
||||||
} else if (iVKey == VK_LBUTTON) {
|
|
||||||
// get position of slider box on screen
|
|
||||||
PIXaabbox2D boxSlider = GetSliderBox();
|
|
||||||
// if mouse is within
|
|
||||||
if (boxSlider >= PIX2D(_pixCursorPosI, _pixCursorPosJ)) {
|
|
||||||
// set new position exactly where mouse pointer is
|
|
||||||
FLOAT fRatio = FLOAT(_pixCursorPosI - boxSlider.Min()(1)) / boxSlider.Size()(1);
|
|
||||||
fRatio = (fRatio - 0.01f) / (0.99f - 0.01f);
|
|
||||||
fRatio = Clamp(fRatio, 0.0f, 1.0f);
|
|
||||||
mg_iCurPos = fRatio*(mg_iMaxPos - mg_iMinPos) + mg_iMinPos;
|
|
||||||
ApplyCurrentPosition();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return CMenuGadget::OnKeyDown(iVKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
PIXaabbox2D CMGSlider::GetSliderBox(void)
|
|
||||||
{
|
|
||||||
extern CDrawPort *pdp;
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
PIX pixJSize = box.Size()(2)*0.95f;
|
|
||||||
PIX pixISizeR = box.Size()(1)*0.45f;
|
|
||||||
if (sam_bWideScreen) pixJSize++;
|
|
||||||
return PIXaabbox2D(PIX2D(pixIR + 1, pixJ + 1), PIX2D(pixIR + pixISizeR - 2, pixJ + pixJSize - 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGSlider::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
// get geometry
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixIL = box.Min()(1) + box.Size()(1)*0.45f;
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
PIX pixJSize = box.Size()(2)*0.95f;
|
|
||||||
PIX pixISizeR = box.Size()(1)*0.45f;
|
|
||||||
if (sam_bWideScreen) pixJSize++;
|
|
||||||
|
|
||||||
// print text left of slider
|
|
||||||
pdp->PutTextR(mg_strText, pixIL, pixJ, col);
|
|
||||||
|
|
||||||
// draw box around slider
|
|
||||||
_pGame->LCDDrawBox(0, -1, PIXaabbox2D(PIX2D(pixIR + 1, pixJ), PIX2D(pixIR + pixISizeR - 2, pixJ + pixJSize - 2)),
|
|
||||||
_pGame->LCDGetColor(C_GREEN | 255, "slider box"));
|
|
||||||
|
|
||||||
// draw filled part of slider
|
|
||||||
pdp->Fill(pixIR + 2, pixJ + 1, (pixISizeR - 5)*mg_fFactor, (pixJSize - 4), col);
|
|
||||||
|
|
||||||
// print percentage text
|
|
||||||
CTString strPercentage;
|
|
||||||
strPercentage.PrintF("%d%%", (int)floor(mg_fFactor * 100 + 0.5f));
|
|
||||||
pdp->PutTextC(strPercentage, pixIR + pixISizeR / 2, pixJ + 1, col);
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_SLIDER_H
|
|
||||||
#define SE_INCL_MENU_GADGET_SLIDER_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGSlider : public CMGButton {
|
|
||||||
public:
|
|
||||||
FLOAT mg_fFactor;
|
|
||||||
INDEX mg_iMinPos;
|
|
||||||
INDEX mg_iMaxPos;
|
|
||||||
INDEX mg_iCurPos;
|
|
||||||
|
|
||||||
CMGSlider();
|
|
||||||
void ApplyCurrentPosition(void);
|
|
||||||
void ApplyGivenPosition(INDEX iMin, INDEX iMax, INDEX iCur);
|
|
||||||
// return TRUE if handled
|
|
||||||
virtual BOOL OnKeyDown(int iVKey);
|
|
||||||
void(*mg_pOnSliderChange)(INDEX iCurPos);
|
|
||||||
PIXaabbox2D GetSliderBox(void);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CMGTitle::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
SetFontTitle(pdp);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixI = box.Center()(1);
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
|
|
||||||
pdp->PutTextC(mg_strText, pixI, pixJ, _pGame->LCDGetColor(C_WHITE | CT_OPAQUE, "title"));
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_TITLE_H
|
|
||||||
#define SE_INCL_MENU_GADGET_TITLE_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MenuGadget.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGTitle : public CMenuGadget {
|
|
||||||
public:
|
|
||||||
CTString mg_strText;
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,122 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
INDEX GetNewLoopValue(int iVKey, INDEX iCurrent, INDEX ctMembers)
|
|
||||||
{
|
|
||||||
INDEX iPrev = (iCurrent + ctMembers - 1) % ctMembers;
|
|
||||||
INDEX iNext = (iCurrent + 1) % ctMembers;
|
|
||||||
// return and right arrow set new text
|
|
||||||
if (iVKey == VK_RETURN || iVKey == VK_LBUTTON || iVKey == VK_RIGHT)
|
|
||||||
{
|
|
||||||
return iNext;
|
|
||||||
// left arrow and backspace sets prev text
|
|
||||||
} else if ((iVKey == VK_BACK || iVKey == VK_RBUTTON) || (iVKey == VK_LEFT)) {
|
|
||||||
return iPrev;
|
|
||||||
}
|
|
||||||
return iCurrent;
|
|
||||||
}
|
|
||||||
|
|
||||||
CMGTrigger::CMGTrigger(void)
|
|
||||||
{
|
|
||||||
mg_pPreTriggerChange = NULL;
|
|
||||||
mg_pOnTriggerChange = NULL;
|
|
||||||
mg_iCenterI = 0;
|
|
||||||
mg_bVisual = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGTrigger::ApplyCurrentSelection(void)
|
|
||||||
{
|
|
||||||
mg_iSelected = Clamp(mg_iSelected, 0L, mg_ctTexts - 1L);
|
|
||||||
mg_strValue = mg_astrTexts[mg_iSelected];
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGTrigger::OnSetNextInList(int iVKey)
|
|
||||||
{
|
|
||||||
if (mg_pPreTriggerChange != NULL) {
|
|
||||||
mg_pPreTriggerChange(mg_iSelected);
|
|
||||||
}
|
|
||||||
|
|
||||||
mg_iSelected = GetNewLoopValue(iVKey, mg_iSelected, mg_ctTexts);
|
|
||||||
mg_strValue = mg_astrTexts[mg_iSelected];
|
|
||||||
|
|
||||||
if (mg_pOnTriggerChange != NULL) {
|
|
||||||
(*mg_pOnTriggerChange)(mg_iSelected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CMGTrigger::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
if ((iVKey == VK_RETURN || iVKey == VK_LBUTTON) ||
|
|
||||||
(iVKey == VK_LEFT) ||
|
|
||||||
(iVKey == VK_BACK || iVKey == VK_RBUTTON) ||
|
|
||||||
(iVKey == VK_RIGHT))
|
|
||||||
{
|
|
||||||
// key is handled
|
|
||||||
if (mg_bEnabled) OnSetNextInList(iVKey);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
// key is not handled
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGTrigger::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixIL = box.Min()(1) + box.Size()(1)*0.45f;
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
if (!mg_bVisual || mg_strValue == "") {
|
|
||||||
CTString strValue = mg_strValue;
|
|
||||||
if (mg_bVisual) {
|
|
||||||
strValue = TRANS("none");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mg_iCenterI == -1) {
|
|
||||||
pdp->PutText(mg_strLabel, box.Min()(1), pixJ, col);
|
|
||||||
pdp->PutTextR(strValue, box.Max()(1), pixJ, col);
|
|
||||||
} else {
|
|
||||||
pdp->PutTextR(mg_strLabel, pixIL, pixJ, col);
|
|
||||||
pdp->PutText(strValue, pixIR, pixJ, col);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
CTString strLabel = mg_strLabel + ": ";
|
|
||||||
pdp->PutText(strLabel, box.Min()(1), pixJ, col);
|
|
||||||
CTextureObject to;
|
|
||||||
try {
|
|
||||||
to.SetData_t(mg_strValue);
|
|
||||||
CTextureData *ptd = (CTextureData *)to.GetData();
|
|
||||||
PIX pixSize = box.Size()(2);
|
|
||||||
PIX pixCX = box.Max()(1) - pixSize / 2;
|
|
||||||
PIX pixCY = box.Center()(2);
|
|
||||||
pdp->PutTexture(&to, PIXaabbox2D(
|
|
||||||
PIX2D(pixCX - pixSize / 2, pixCY - pixSize / 2),
|
|
||||||
PIX2D(pixCX - pixSize / 2 + pixSize, pixCY - pixSize / 2 + pixSize)), C_WHITE | 255);
|
|
||||||
} catch (char *strError) {
|
|
||||||
CPrintF("%s\n", strError);
|
|
||||||
}
|
|
||||||
to.SetData(NULL);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_TRIGGER_H
|
|
||||||
#define SE_INCL_MENU_GADGET_TRIGGER_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MenuGadget.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGTrigger : public CMenuGadget {
|
|
||||||
public:
|
|
||||||
CTString mg_strLabel;
|
|
||||||
CTString mg_strValue;
|
|
||||||
CTString *mg_astrTexts;
|
|
||||||
INDEX mg_ctTexts;
|
|
||||||
INDEX mg_iSelected;
|
|
||||||
INDEX mg_iCenterI;
|
|
||||||
BOOL mg_bVisual;
|
|
||||||
|
|
||||||
CMGTrigger(void);
|
|
||||||
|
|
||||||
void ApplyCurrentSelection(void);
|
|
||||||
void OnSetNextInList(int iVKey);
|
|
||||||
void(*mg_pPreTriggerChange)(INDEX iCurrentlySelected);
|
|
||||||
void(*mg_pOnTriggerChange)(INDEX iCurrentlySelected);
|
|
||||||
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,181 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/VarList.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGVarButton.h"
|
|
||||||
|
|
||||||
extern PIX _pixCursorPosI;
|
|
||||||
extern PIX _pixCursorPosJ;
|
|
||||||
|
|
||||||
|
|
||||||
BOOL CMGVarButton::IsSeparator(void)
|
|
||||||
{
|
|
||||||
if (mg_pvsVar == NULL) return FALSE;
|
|
||||||
return mg_pvsVar->vs_bSeparator;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CMGVarButton::IsEnabled(void)
|
|
||||||
{
|
|
||||||
return(_gmRunningGameMode == GM_NONE
|
|
||||||
|| mg_pvsVar == NULL
|
|
||||||
|| mg_pvsVar->vs_bCanChangeInGame);
|
|
||||||
}
|
|
||||||
|
|
||||||
// return slider position on scren
|
|
||||||
PIXaabbox2D CMGVarButton::GetSliderBox(void)
|
|
||||||
{
|
|
||||||
extern CDrawPort *pdp;
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
PIX pixISize = box.Size()(1)*0.13f;
|
|
||||||
PIX pixJSize = box.Size()(2);
|
|
||||||
return PIXaabbox2D(PIX2D(pixIR, pixJ + 1), PIX2D(pixIR + pixISize - 4, pixJ + pixJSize - 6));
|
|
||||||
}
|
|
||||||
|
|
||||||
extern BOOL _bVarChanged;
|
|
||||||
BOOL CMGVarButton::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
if (mg_pvsVar == NULL || mg_pvsVar->vs_bSeparator || !mg_pvsVar->Validate() || !mg_bEnabled) {
|
|
||||||
return CMenuGadget::OnKeyDown(iVKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle slider
|
|
||||||
if (mg_pvsVar->vs_iSlider && !mg_pvsVar->vs_bCustom) {
|
|
||||||
// ignore RMB
|
|
||||||
if (iVKey == VK_RBUTTON) return TRUE;
|
|
||||||
// handle LMB
|
|
||||||
if (iVKey == VK_LBUTTON) {
|
|
||||||
// get position of slider box on screen
|
|
||||||
PIXaabbox2D boxSlider = GetSliderBox();
|
|
||||||
// if mouse is within
|
|
||||||
if (boxSlider >= PIX2D(_pixCursorPosI, _pixCursorPosJ)) {
|
|
||||||
// set new position exactly where mouse pointer is
|
|
||||||
mg_pvsVar->vs_iValue = (FLOAT)(_pixCursorPosI - boxSlider.Min()(1)) / boxSlider.Size()(1) * (mg_pvsVar->vs_ctValues);
|
|
||||||
_bVarChanged = TRUE;
|
|
||||||
}
|
|
||||||
// handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iVKey == VK_RETURN) {
|
|
||||||
FlushVarSettings(TRUE);
|
|
||||||
void MenuGoToParent(void);
|
|
||||||
MenuGoToParent();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iVKey == VK_LBUTTON || iVKey == VK_RIGHT) {
|
|
||||||
if (mg_pvsVar != NULL) {
|
|
||||||
INDEX iOldValue = mg_pvsVar->vs_iValue;
|
|
||||||
mg_pvsVar->vs_iValue++;
|
|
||||||
if (mg_pvsVar->vs_iValue >= mg_pvsVar->vs_ctValues) {
|
|
||||||
// wrap non-sliders, clamp sliders
|
|
||||||
if (mg_pvsVar->vs_iSlider) mg_pvsVar->vs_iValue = mg_pvsVar->vs_ctValues - 1L;
|
|
||||||
else mg_pvsVar->vs_iValue = 0;
|
|
||||||
}
|
|
||||||
if (iOldValue != mg_pvsVar->vs_iValue) {
|
|
||||||
_bVarChanged = TRUE;
|
|
||||||
mg_pvsVar->vs_bCustom = FALSE;
|
|
||||||
mg_pvsVar->Validate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iVKey == VK_LEFT || iVKey == VK_RBUTTON) {
|
|
||||||
if (mg_pvsVar != NULL) {
|
|
||||||
INDEX iOldValue = mg_pvsVar->vs_iValue;
|
|
||||||
mg_pvsVar->vs_iValue--;
|
|
||||||
if (mg_pvsVar->vs_iValue<0) {
|
|
||||||
// wrap non-sliders, clamp sliders
|
|
||||||
if (mg_pvsVar->vs_iSlider) mg_pvsVar->vs_iValue = 0;
|
|
||||||
else mg_pvsVar->vs_iValue = mg_pvsVar->vs_ctValues - 1L;
|
|
||||||
}
|
|
||||||
if (iOldValue != mg_pvsVar->vs_iValue) {
|
|
||||||
_bVarChanged = TRUE;
|
|
||||||
mg_pvsVar->vs_bCustom = FALSE;
|
|
||||||
mg_pvsVar->Validate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// not handled
|
|
||||||
return CMenuGadget::OnKeyDown(iVKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMGVarButton::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
if (mg_pvsVar == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetFontMedium(pdp);
|
|
||||||
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(pdp, mg_boxOnScreen);
|
|
||||||
PIX pixIL = box.Min()(1) + box.Size()(1)*0.45f;
|
|
||||||
PIX pixIR = box.Min()(1) + box.Size()(1)*0.55f;
|
|
||||||
PIX pixIC = box.Center()(1);
|
|
||||||
PIX pixJ = box.Min()(2);
|
|
||||||
|
|
||||||
if (mg_pvsVar->vs_bSeparator)
|
|
||||||
{
|
|
||||||
mg_bEnabled = FALSE;
|
|
||||||
COLOR col = _pGame->LCDGetColor(C_WHITE | 255, "separator");
|
|
||||||
CTString strText = mg_pvsVar->vs_strName;
|
|
||||||
pdp->PutTextC(strText, pixIC, pixJ, col);
|
|
||||||
} else if (mg_pvsVar->Validate()) {
|
|
||||||
// check whether the variable is disabled
|
|
||||||
if (mg_pvsVar->vs_strFilter != "") mg_bEnabled = _pShell->GetINDEX(mg_pvsVar->vs_strFilter);
|
|
||||||
COLOR col = GetCurrentColor();
|
|
||||||
pdp->PutTextR(mg_pvsVar->vs_strName, pixIL, pixJ, col);
|
|
||||||
// custom is by default
|
|
||||||
CTString strText = TRANS("Custom");
|
|
||||||
if (!mg_pvsVar->vs_bCustom)
|
|
||||||
{ // not custom!
|
|
||||||
strText = mg_pvsVar->vs_astrTexts[mg_pvsVar->vs_iValue];
|
|
||||||
// need slider?
|
|
||||||
if (mg_pvsVar->vs_iSlider>0) {
|
|
||||||
// draw box around slider
|
|
||||||
PIX pixISize = box.Size()(1)*0.13f;
|
|
||||||
PIX pixJSize = box.Size()(2);
|
|
||||||
_pGame->LCDDrawBox(0, -1, PIXaabbox2D(PIX2D(pixIR, pixJ + 1), PIX2D(pixIR + pixISize - 4, pixJ + pixJSize - 6)),
|
|
||||||
_pGame->LCDGetColor(C_GREEN | 255, "slider box"));
|
|
||||||
|
|
||||||
// draw filled part of slider
|
|
||||||
if (mg_pvsVar->vs_iSlider == 1) {
|
|
||||||
// fill slider
|
|
||||||
FLOAT fFactor = (FLOAT)(mg_pvsVar->vs_iValue + 1) / mg_pvsVar->vs_ctValues;
|
|
||||||
pdp->Fill(pixIR + 1, pixJ + 2, (pixISize - 6)*fFactor, pixJSize - 9, col);
|
|
||||||
} else {
|
|
||||||
// ratio slider
|
|
||||||
ASSERT(mg_pvsVar->vs_iSlider == 2);
|
|
||||||
FLOAT fUnitWidth = (FLOAT)(pixISize - 5) / mg_pvsVar->vs_ctValues;
|
|
||||||
pdp->Fill(pixIR + 1 + (mg_pvsVar->vs_iValue*fUnitWidth), pixJ + 2, fUnitWidth, pixJSize - 9, col);
|
|
||||||
}
|
|
||||||
// move text printout to the right of slider
|
|
||||||
pixIR += box.Size()(1)*0.15f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// write right text
|
|
||||||
pdp->PutText(strText, pixIR, pixJ, col);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_VARBUTTON_H
|
|
||||||
#define SE_INCL_MENU_GADGET_VARBUTTON_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMGVarButton : public CMGButton {
|
|
||||||
public:
|
|
||||||
class CVarSetting *mg_pvsVar;
|
|
||||||
PIXaabbox2D GetSliderBox(void);
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
void Render(CDrawPort *pdp);
|
|
||||||
BOOL IsSeparator(void);
|
|
||||||
BOOL IsEnabled(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,137 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Base/KeyNames.h>
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
#include "SeriousSam/VarList.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MenuGadget.h"
|
|
||||||
|
|
||||||
extern CSoundData *_psdSelect;
|
|
||||||
|
|
||||||
BOOL _bDefiningKey = FALSE;
|
|
||||||
BOOL _bEditingString = FALSE;
|
|
||||||
CMenuGadget *_pmgLastActivatedGadget = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
CMenuGadget::CMenuGadget(void)
|
|
||||||
{
|
|
||||||
mg_pmgLeft = NULL;
|
|
||||||
mg_pmgRight = NULL;
|
|
||||||
mg_pmgUp = NULL;
|
|
||||||
mg_pmgDown = NULL;
|
|
||||||
|
|
||||||
mg_bVisible = TRUE;
|
|
||||||
mg_bEnabled = TRUE;
|
|
||||||
mg_bLabel = FALSE;
|
|
||||||
mg_bFocused = FALSE;
|
|
||||||
mg_iInList = -1; // not in list
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::OnActivate(void)
|
|
||||||
{
|
|
||||||
NOTHING;
|
|
||||||
}
|
|
||||||
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL CMenuGadget::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
// if return pressed
|
|
||||||
if (iVKey == VK_RETURN || iVKey == VK_LBUTTON) {
|
|
||||||
// activate
|
|
||||||
OnActivate();
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
// key is not handled
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BOOL CMenuGadget::OnChar(MSG msg)
|
|
||||||
{
|
|
||||||
// key is not handled
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CMenuGadget::OnSetFocus(void)
|
|
||||||
{
|
|
||||||
mg_bFocused = TRUE;
|
|
||||||
if (!IsSeparator())
|
|
||||||
{
|
|
||||||
PlayMenuSound(_psdSelect);
|
|
||||||
IFeel_PlayEffect("Menu_select");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::OnKillFocus(void)
|
|
||||||
{
|
|
||||||
mg_bFocused = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::Appear(void)
|
|
||||||
{
|
|
||||||
mg_bVisible = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::Disappear(void)
|
|
||||||
{
|
|
||||||
mg_bVisible = FALSE;
|
|
||||||
mg_bFocused = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::Think(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::OnMouseOver(PIX pixI, PIX pixJ)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// get current color for the gadget
|
|
||||||
COLOR CMenuGadget::GetCurrentColor(void)
|
|
||||||
{
|
|
||||||
// use normal colors
|
|
||||||
COLOR colUnselected = _pGame->LCDGetColor(C_GREEN, "unselected");
|
|
||||||
COLOR colSelected = _pGame->LCDGetColor(C_WHITE, "selected");
|
|
||||||
// if disabled
|
|
||||||
if (!mg_bEnabled) {
|
|
||||||
// use a bit darker colors
|
|
||||||
colUnselected = _pGame->LCDGetColor(C_dGREEN, "disabled unselected");
|
|
||||||
colSelected = _pGame->LCDGetColor(C_GRAY, "disabled selected");
|
|
||||||
// if label
|
|
||||||
if (mg_bLabel) {
|
|
||||||
// use white
|
|
||||||
colUnselected = colSelected = _pGame->LCDGetColor(C_WHITE, "label");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// use unselected color
|
|
||||||
COLOR colRet = colUnselected;
|
|
||||||
// if selected
|
|
||||||
if (mg_bFocused) {
|
|
||||||
// oscilate towards selected color
|
|
||||||
FLOAT tmNow = _pTimer->GetHighPrecisionTimer().GetSeconds();
|
|
||||||
colRet = LerpColor((colUnselected >> 1) & 0x7F7F7F7F, colSelected, sin(tmNow*10.0f)*0.5f + 0.5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
return colRet | CT_OPAQUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMenuGadget::Render(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_GADGET_H
|
|
||||||
#define SE_INCL_MENU_GADGET_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
|
|
||||||
#define DOING_NOTHING 0
|
|
||||||
#define PRESS_KEY_WAITING 1
|
|
||||||
#define RELEASE_RETURN_WAITING 2
|
|
||||||
|
|
||||||
#define EMPTYSLOTSTRING TRANS("<save a new one>")
|
|
||||||
|
|
||||||
|
|
||||||
class CMenuGadget {
|
|
||||||
public:
|
|
||||||
CListNode mg_lnNode;
|
|
||||||
FLOATaabbox2D mg_boxOnScreen;
|
|
||||||
BOOL mg_bVisible;
|
|
||||||
BOOL mg_bEnabled;
|
|
||||||
BOOL mg_bLabel;
|
|
||||||
BOOL mg_bFocused;
|
|
||||||
INDEX mg_iInList; // for scrollable gadget lists
|
|
||||||
|
|
||||||
CTString mg_strTip;
|
|
||||||
CMenuGadget *mg_pmgLeft;
|
|
||||||
CMenuGadget *mg_pmgRight;
|
|
||||||
CMenuGadget *mg_pmgUp;
|
|
||||||
CMenuGadget *mg_pmgDown;
|
|
||||||
|
|
||||||
CMenuGadget(void);
|
|
||||||
// return TRUE if handled
|
|
||||||
virtual BOOL OnKeyDown(int iVKey);
|
|
||||||
virtual BOOL OnChar(MSG msg);
|
|
||||||
virtual void OnActivate(void);
|
|
||||||
virtual void OnSetFocus(void);
|
|
||||||
virtual void OnKillFocus(void);
|
|
||||||
virtual void Appear(void);
|
|
||||||
virtual void Disappear(void);
|
|
||||||
virtual void Think(void);
|
|
||||||
virtual void OnMouseOver(PIX pixI, PIX pixJ);
|
|
||||||
|
|
||||||
virtual COLOR GetCurrentColor(void);
|
|
||||||
virtual void Render(CDrawPort *pdp);
|
|
||||||
virtual BOOL IsSeparator(void) { return FALSE; };
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ButtonFontSize {
|
|
||||||
BFS_SMALL = 0,
|
|
||||||
BFS_MEDIUM = 1,
|
|
||||||
BFS_LARGE = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,351 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
|
|
||||||
|
|
||||||
CGameMenu::CGameMenu(void)
|
|
||||||
{
|
|
||||||
gm_pgmParentMenu = NULL;
|
|
||||||
gm_pmgSelectedByDefault = NULL;
|
|
||||||
gm_pmgArrowUp = NULL;
|
|
||||||
gm_pmgArrowDn = NULL;
|
|
||||||
gm_pmgListTop = NULL;
|
|
||||||
gm_pmgListBottom = NULL;
|
|
||||||
gm_iListOffset = 0;
|
|
||||||
gm_ctListVisible = 0;
|
|
||||||
gm_ctListTotal = 0;
|
|
||||||
gm_bPopup = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::Destroy(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::FillListItems(void)
|
|
||||||
{
|
|
||||||
ASSERT(FALSE); // must be implemented to scroll up/down
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::KillAllFocuses(void)
|
|
||||||
{
|
|
||||||
// for each menu gadget in menu
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, gm_lhGadgets, itmg) {
|
|
||||||
itmg->mg_bFocused = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::Think(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// +-1 -> hit top/bottom when pressing up/down on keyboard
|
|
||||||
// +-2 -> pressed pageup/pagedown on keyboard
|
|
||||||
// +-3 -> pressed arrow up/down button in menu
|
|
||||||
// +-4 -> scrolling with mouse wheel
|
|
||||||
void CGameMenu::ScrollList(INDEX iDir)
|
|
||||||
{
|
|
||||||
// if not valid for scrolling
|
|
||||||
if (gm_ctListTotal <= 0
|
|
||||||
|| gm_pmgArrowUp == NULL || gm_pmgArrowDn == NULL
|
|
||||||
|| gm_pmgListTop == NULL || gm_pmgListBottom == NULL) {
|
|
||||||
// do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
INDEX iOldTopKey = gm_iListOffset;
|
|
||||||
// change offset
|
|
||||||
switch (iDir) {
|
|
||||||
case -1:
|
|
||||||
gm_iListOffset -= 1;
|
|
||||||
break;
|
|
||||||
case -4:
|
|
||||||
gm_iListOffset -= 3;
|
|
||||||
break;
|
|
||||||
case -2:
|
|
||||||
case -3:
|
|
||||||
gm_iListOffset -= gm_ctListVisible;
|
|
||||||
break;
|
|
||||||
case +1:
|
|
||||||
gm_iListOffset += 1;
|
|
||||||
break;
|
|
||||||
case +4:
|
|
||||||
gm_iListOffset += 3;
|
|
||||||
break;
|
|
||||||
case +2:
|
|
||||||
case +3:
|
|
||||||
gm_iListOffset += gm_ctListVisible;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT(FALSE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (gm_ctListTotal <= gm_ctListVisible) {
|
|
||||||
gm_iListOffset = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gm_iListOffset = Clamp(gm_iListOffset, INDEX(0), INDEX(gm_ctListTotal - gm_ctListVisible));
|
|
||||||
}
|
|
||||||
|
|
||||||
// set new names
|
|
||||||
FillListItems();
|
|
||||||
|
|
||||||
// if scroling with wheel
|
|
||||||
if (iDir == +4 || iDir == -4) {
|
|
||||||
// no focus changing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete all focuses
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
itmg->OnKillFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
// set new focus
|
|
||||||
const INDEX iFirst = 0;
|
|
||||||
const INDEX iLast = gm_ctListVisible - 1;
|
|
||||||
switch (iDir) {
|
|
||||||
case +1:
|
|
||||||
gm_pmgListBottom->OnSetFocus();
|
|
||||||
break;
|
|
||||||
case +2:
|
|
||||||
if (gm_iListOffset != iOldTopKey) {
|
|
||||||
gm_pmgListTop->OnSetFocus();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gm_pmgListBottom->OnSetFocus();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case +3:
|
|
||||||
gm_pmgArrowDn->OnSetFocus();
|
|
||||||
break;
|
|
||||||
case -1:
|
|
||||||
gm_pmgListTop->OnSetFocus();
|
|
||||||
break;
|
|
||||||
case -2:
|
|
||||||
gm_pmgListTop->OnSetFocus();
|
|
||||||
break;
|
|
||||||
case -3:
|
|
||||||
gm_pmgArrowUp->OnSetFocus();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL CGameMenu::OnChar(MSG msg)
|
|
||||||
{
|
|
||||||
// find curently active gadget
|
|
||||||
CMenuGadget *pmgActive = NULL;
|
|
||||||
// for each menu gadget in menu
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
// if focused
|
|
||||||
if (itmg->mg_bFocused) {
|
|
||||||
// remember as active
|
|
||||||
pmgActive = &itmg.Current();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if none focused
|
|
||||||
if (pmgActive == NULL) {
|
|
||||||
// do nothing
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if active gadget handles it
|
|
||||||
if (pmgActive->OnChar(msg)) {
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// key is not handled
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL CGameMenu::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
// find curently active gadget
|
|
||||||
CMenuGadget *pmgActive = NULL;
|
|
||||||
// for each menu gadget in menu
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
// if focused
|
|
||||||
if (itmg->mg_bFocused) {
|
|
||||||
// remember as active
|
|
||||||
pmgActive = &itmg.Current();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if none focused
|
|
||||||
if (pmgActive == NULL) {
|
|
||||||
// do nothing
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if active gadget handles it
|
|
||||||
if (pmgActive->OnKeyDown(iVKey)) {
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// process normal in menu movement
|
|
||||||
switch (iVKey) {
|
|
||||||
case VK_PRIOR:
|
|
||||||
ScrollList(-2);
|
|
||||||
return TRUE;
|
|
||||||
case VK_NEXT:
|
|
||||||
ScrollList(+2);
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
ScrollList(-4);
|
|
||||||
return TRUE;
|
|
||||||
case 10:
|
|
||||||
ScrollList(+4);
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case VK_UP:
|
|
||||||
// if this is top button in list
|
|
||||||
if (pmgActive == gm_pmgListTop) {
|
|
||||||
// scroll list up
|
|
||||||
ScrollList(-1);
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
// if we can go up
|
|
||||||
if (pmgActive->mg_pmgUp != NULL && pmgActive->mg_pmgUp->mg_bVisible) {
|
|
||||||
// call lose focus to still active gadget and
|
|
||||||
pmgActive->OnKillFocus();
|
|
||||||
// set focus to new one
|
|
||||||
pmgActive = pmgActive->mg_pmgUp;
|
|
||||||
pmgActive->OnSetFocus();
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case VK_DOWN:
|
|
||||||
// if this is bottom button in list
|
|
||||||
if (pmgActive == gm_pmgListBottom) {
|
|
||||||
// scroll list down
|
|
||||||
ScrollList(+1);
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
// if we can go down
|
|
||||||
if (pmgActive->mg_pmgDown != NULL && pmgActive->mg_pmgDown->mg_bVisible) {
|
|
||||||
// call lose focus to still active gadget and
|
|
||||||
pmgActive->OnKillFocus();
|
|
||||||
// set focus to new one
|
|
||||||
pmgActive = pmgActive->mg_pmgDown;
|
|
||||||
pmgActive->OnSetFocus();
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case VK_LEFT:
|
|
||||||
// if we can go left
|
|
||||||
if (pmgActive->mg_pmgLeft != NULL) {
|
|
||||||
// call lose focus to still active gadget and
|
|
||||||
pmgActive->OnKillFocus();
|
|
||||||
// set focus to new one
|
|
||||||
if (!pmgActive->mg_pmgLeft->mg_bVisible && gm_pmgSelectedByDefault != NULL) {
|
|
||||||
pmgActive = gm_pmgSelectedByDefault;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pmgActive = pmgActive->mg_pmgLeft;
|
|
||||||
}
|
|
||||||
pmgActive->OnSetFocus();
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case VK_RIGHT:
|
|
||||||
// if we can go right
|
|
||||||
if (pmgActive->mg_pmgRight != NULL) {
|
|
||||||
// call lose focus to still active gadget and
|
|
||||||
pmgActive->OnKillFocus();
|
|
||||||
// set focus to new one
|
|
||||||
if (!pmgActive->mg_pmgRight->mg_bVisible && gm_pmgSelectedByDefault != NULL) {
|
|
||||||
pmgActive = gm_pmgSelectedByDefault;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pmgActive = pmgActive->mg_pmgRight;
|
|
||||||
}
|
|
||||||
pmgActive->OnSetFocus();
|
|
||||||
// key is handled
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// key is not handled
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
// for each menu gadget in menu
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, gm_lhGadgets, itmg)
|
|
||||||
{
|
|
||||||
itmg->mg_bFocused = FALSE;
|
|
||||||
// call appear
|
|
||||||
itmg->Appear();
|
|
||||||
}
|
|
||||||
|
|
||||||
// if there is a list
|
|
||||||
if (gm_pmgListTop != NULL) {
|
|
||||||
// scroll it so that the wanted tem is centered
|
|
||||||
gm_iListOffset = gm_iListWantedItem - gm_ctListVisible / 2;
|
|
||||||
// clamp the scrolling
|
|
||||||
gm_iListOffset = Clamp(gm_iListOffset, 0L, Max(0L, gm_ctListTotal - gm_ctListVisible));
|
|
||||||
|
|
||||||
// fill the list
|
|
||||||
FillListItems();
|
|
||||||
|
|
||||||
// for each menu gadget in menu
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, gm_lhGadgets, itmg) {
|
|
||||||
// if in list, but disabled
|
|
||||||
if (itmg->mg_iInList == -2) {
|
|
||||||
// hide it
|
|
||||||
itmg->mg_bVisible = FALSE;
|
|
||||||
// if in list
|
|
||||||
} else if (itmg->mg_iInList >= 0) {
|
|
||||||
// show it
|
|
||||||
itmg->mg_bVisible = TRUE;
|
|
||||||
}
|
|
||||||
// if wanted
|
|
||||||
if (itmg->mg_iInList == gm_iListWantedItem) {
|
|
||||||
// focus it
|
|
||||||
itmg->OnSetFocus();
|
|
||||||
gm_pmgSelectedByDefault = itmg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
// for each menu gadget in menu
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, gm_lhGadgets, itmg)
|
|
||||||
{
|
|
||||||
// call disappear
|
|
||||||
itmg->Disappear();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_H
|
|
||||||
#define SE_INCL_GAME_MENU_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
class CGameMenu {
|
|
||||||
public:
|
|
||||||
CListHead gm_lhGadgets;
|
|
||||||
CGameMenu *gm_pgmParentMenu;
|
|
||||||
BOOL gm_bPopup;
|
|
||||||
const char *gm_strName; // menu name (for mod interface only)
|
|
||||||
class CMenuGadget *gm_pmgSelectedByDefault;
|
|
||||||
class CMenuGadget *gm_pmgArrowUp;
|
|
||||||
class CMenuGadget *gm_pmgArrowDn;
|
|
||||||
class CMenuGadget *gm_pmgListTop;
|
|
||||||
class CMenuGadget *gm_pmgListBottom;
|
|
||||||
INDEX gm_iListOffset;
|
|
||||||
INDEX gm_iListWantedItem; // item you want to focus initially
|
|
||||||
INDEX gm_ctListVisible;
|
|
||||||
INDEX gm_ctListTotal;
|
|
||||||
CGameMenu(void);
|
|
||||||
void ScrollList(INDEX iDir);
|
|
||||||
void KillAllFocuses(void);
|
|
||||||
virtual void Initialize_t(void);
|
|
||||||
virtual void Destroy(void);
|
|
||||||
virtual void StartMenu(void);
|
|
||||||
virtual void FillListItems(void);
|
|
||||||
virtual void EndMenu(void);
|
|
||||||
// return TRUE if handled
|
|
||||||
virtual BOOL OnKeyDown(int iVKey);
|
|
||||||
virtual BOOL OnChar(MSG msg);
|
|
||||||
virtual void Think(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,78 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MAudioOptions.h"
|
|
||||||
|
|
||||||
extern void RefreshSoundFormat(void);
|
|
||||||
|
|
||||||
|
|
||||||
void CAudioOptionsMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize Audio options menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("AUDIO");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgAudioAutoTrigger, 0,
|
|
||||||
gm_mgApply, gm_mgFrequencyTrigger, TRANS("AUTO-ADJUST"), astrNoYes);
|
|
||||||
gm_mgAudioAutoTrigger.mg_strTip = TRANS("adjust quality to fit your system");
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgFrequencyTrigger, 1,
|
|
||||||
gm_mgAudioAutoTrigger, gm_mgAudioAPITrigger, TRANS("FREQUENCY"), astrFrequencyRadioTexts);
|
|
||||||
gm_mgFrequencyTrigger.mg_strTip = TRANS("select sound quality or turn sound off");
|
|
||||||
gm_mgFrequencyTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgAudioAPITrigger, 2,
|
|
||||||
gm_mgFrequencyTrigger, gm_mgWaveVolume, TRANS("SOUND SYSTEM"), astrSoundAPIRadioTexts);
|
|
||||||
gm_mgAudioAPITrigger.mg_strTip = TRANS("choose sound system (API) to use");
|
|
||||||
gm_mgAudioAPITrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
gm_mgWaveVolume.mg_boxOnScreen = BoxMediumRow(3);
|
|
||||||
gm_mgWaveVolume.mg_strText = TRANS("SOUND EFFECTS VOLUME");
|
|
||||||
gm_mgWaveVolume.mg_strTip = TRANS("adjust volume of in-game sound effects");
|
|
||||||
gm_mgWaveVolume.mg_pmgUp = &gm_mgAudioAPITrigger;
|
|
||||||
gm_mgWaveVolume.mg_pmgDown = &gm_mgMPEGVolume;
|
|
||||||
gm_mgWaveVolume.mg_pOnSliderChange = NULL;
|
|
||||||
gm_mgWaveVolume.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgWaveVolume.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgMPEGVolume.mg_boxOnScreen = BoxMediumRow(4);
|
|
||||||
gm_mgMPEGVolume.mg_strText = TRANS("MUSIC VOLUME");
|
|
||||||
gm_mgMPEGVolume.mg_strTip = TRANS("adjust volume of in-game music");
|
|
||||||
gm_mgMPEGVolume.mg_pmgUp = &gm_mgWaveVolume;
|
|
||||||
gm_mgMPEGVolume.mg_pmgDown = &gm_mgApply;
|
|
||||||
gm_mgMPEGVolume.mg_pOnSliderChange = NULL;
|
|
||||||
gm_mgMPEGVolume.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgMPEGVolume.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgApply.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgApply.mg_boxOnScreen = BoxBigRow(4);
|
|
||||||
gm_mgApply.mg_strText = TRANS("APPLY");
|
|
||||||
gm_mgApply.mg_strTip = TRANS("activate selected options");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgApply.mg_lnNode);
|
|
||||||
gm_mgApply.mg_pmgUp = &gm_mgMPEGVolume;
|
|
||||||
gm_mgApply.mg_pmgDown = &gm_mgAudioAutoTrigger;
|
|
||||||
gm_mgApply.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CAudioOptionsMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
RefreshSoundFormat();
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_AUDIOOPTIONS_H
|
|
||||||
#define SE_INCL_GAME_MENU_AUDIOOPTIONS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGSlider.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CAudioOptionsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGTrigger gm_mgAudioAutoTrigger;
|
|
||||||
CMGTrigger gm_mgAudioAPITrigger;
|
|
||||||
CMGTrigger gm_mgFrequencyTrigger;
|
|
||||||
CMGSlider gm_mgWaveVolume;
|
|
||||||
CMGSlider gm_mgMPEGVolume;
|
|
||||||
CMGButton gm_mgApply;
|
|
||||||
|
|
||||||
void StartMenu(void);
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,83 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MConfirm.h"
|
|
||||||
|
|
||||||
void CConfirmMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_bPopup = TRUE;
|
|
||||||
|
|
||||||
gm_mgConfirmLabel.mg_strText = "";
|
|
||||||
gm_lhGadgets.AddTail(gm_mgConfirmLabel.mg_lnNode);
|
|
||||||
gm_mgConfirmLabel.mg_boxOnScreen = BoxPopupLabel();
|
|
||||||
gm_mgConfirmLabel.mg_iCenterI = 0;
|
|
||||||
gm_mgConfirmLabel.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
|
|
||||||
gm_mgConfirmYes.mg_strText = TRANS("YES");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgConfirmYes.mg_lnNode);
|
|
||||||
gm_mgConfirmYes.mg_boxOnScreen = BoxPopupYesLarge();
|
|
||||||
gm_mgConfirmYes.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgConfirmYes.mg_pmgLeft =
|
|
||||||
gm_mgConfirmYes.mg_pmgRight = &gm_mgConfirmNo;
|
|
||||||
gm_mgConfirmYes.mg_iCenterI = 1;
|
|
||||||
gm_mgConfirmYes.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
|
|
||||||
gm_mgConfirmNo.mg_strText = TRANS("NO");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgConfirmNo.mg_lnNode);
|
|
||||||
gm_mgConfirmNo.mg_boxOnScreen = BoxPopupNoLarge();
|
|
||||||
gm_mgConfirmNo.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgConfirmNo.mg_pmgLeft =
|
|
||||||
gm_mgConfirmNo.mg_pmgRight = &gm_mgConfirmYes;
|
|
||||||
gm_mgConfirmNo.mg_iCenterI = -1;
|
|
||||||
gm_mgConfirmNo.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
|
|
||||||
_pConfimedYes = NULL;
|
|
||||||
_pConfimedNo = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfirmMenu::BeLarge(void)
|
|
||||||
{
|
|
||||||
gm_mgConfirmLabel.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgConfirmYes.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgConfirmNo.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
|
|
||||||
gm_mgConfirmLabel.mg_iCenterI = 0;
|
|
||||||
gm_mgConfirmYes.mg_boxOnScreen = BoxPopupYesLarge();
|
|
||||||
gm_mgConfirmNo.mg_boxOnScreen = BoxPopupNoLarge();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CConfirmMenu::BeSmall(void)
|
|
||||||
{
|
|
||||||
gm_mgConfirmLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgConfirmYes.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgConfirmNo.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
|
|
||||||
gm_mgConfirmLabel.mg_iCenterI = -1;
|
|
||||||
gm_mgConfirmYes.mg_boxOnScreen = BoxPopupYesSmall();
|
|
||||||
gm_mgConfirmNo.mg_boxOnScreen = BoxPopupNoSmall();
|
|
||||||
}
|
|
||||||
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL CConfirmMenu::OnKeyDown(int iVKey)
|
|
||||||
{
|
|
||||||
if ((iVKey == VK_ESCAPE || iVKey == VK_RBUTTON) && gm_mgConfirmNo.mg_pActivatedFunction != NULL) {
|
|
||||||
gm_mgConfirmNo.OnActivate();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return CGameMenu::OnKeyDown(iVKey);
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_CONFIRM_H
|
|
||||||
#define SE_INCL_GAME_MENU_CONFIRM_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CConfirmMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGButton gm_mgConfirmLabel;
|
|
||||||
CMGButton gm_mgConfirmYes;
|
|
||||||
CMGButton gm_mgConfirmNo;
|
|
||||||
|
|
||||||
void(*_pConfimedYes)(void) = NULL;
|
|
||||||
void(*_pConfimedNo)(void) = NULL;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
// return TRUE if handled
|
|
||||||
BOOL OnKeyDown(int iVKey);
|
|
||||||
|
|
||||||
void BeLarge(void);
|
|
||||||
void BeSmall(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,159 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MControls.h"
|
|
||||||
|
|
||||||
extern CTFileName _fnmControlsToCustomize;
|
|
||||||
|
|
||||||
|
|
||||||
void CControlsMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize player and controls menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("CONTROLS");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgNameLabel.mg_strText = "";
|
|
||||||
gm_mgNameLabel.mg_boxOnScreen = BoxMediumRow(0.0);
|
|
||||||
gm_mgNameLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgNameLabel.mg_iCenterI = -1;
|
|
||||||
gm_mgNameLabel.mg_bEnabled = FALSE;
|
|
||||||
gm_mgNameLabel.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNameLabel.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgButtons.mg_strText = TRANS("CUSTOMIZE BUTTONS");
|
|
||||||
gm_mgButtons.mg_boxOnScreen = BoxMediumRow(2.0);
|
|
||||||
gm_mgButtons.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgButtons.mg_iCenterI = 0;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgButtons.mg_lnNode);
|
|
||||||
gm_mgButtons.mg_pmgUp = &gm_mgPredefined;
|
|
||||||
gm_mgButtons.mg_pmgDown = &gm_mgAdvanced;
|
|
||||||
gm_mgButtons.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgButtons.mg_strTip = TRANS("customize buttons in current controls");
|
|
||||||
|
|
||||||
gm_mgAdvanced.mg_strText = TRANS("ADVANCED JOYSTICK SETUP");
|
|
||||||
gm_mgAdvanced.mg_iCenterI = 0;
|
|
||||||
gm_mgAdvanced.mg_boxOnScreen = BoxMediumRow(3);
|
|
||||||
gm_mgAdvanced.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgAdvanced.mg_lnNode);
|
|
||||||
gm_mgAdvanced.mg_pmgUp = &gm_mgButtons;
|
|
||||||
gm_mgAdvanced.mg_pmgDown = &gm_mgSensitivity;
|
|
||||||
gm_mgAdvanced.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgAdvanced.mg_strTip = TRANS("adjust advanced settings for joystick axis");
|
|
||||||
|
|
||||||
gm_mgSensitivity.mg_boxOnScreen = BoxMediumRow(4.5);
|
|
||||||
gm_mgSensitivity.mg_strText = TRANS("SENSITIVITY");
|
|
||||||
gm_mgSensitivity.mg_pmgUp = &gm_mgAdvanced;
|
|
||||||
gm_mgSensitivity.mg_pmgDown = &gm_mgInvertTrigger;
|
|
||||||
gm_mgSensitivity.mg_strTip = TRANS("sensitivity for all axis in this control set");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSensitivity.mg_lnNode);
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgInvertTrigger, 5.5, gm_mgSensitivity, gm_mgSmoothTrigger,
|
|
||||||
TRANS("INVERT LOOK"), astrNoYes);
|
|
||||||
gm_mgInvertTrigger.mg_strTip = TRANS("invert up/down looking");
|
|
||||||
TRIGGER_MG(gm_mgSmoothTrigger, 6.5, gm_mgInvertTrigger, gm_mgAccelTrigger,
|
|
||||||
TRANS("SMOOTH AXIS"), astrNoYes);
|
|
||||||
gm_mgSmoothTrigger.mg_strTip = TRANS("smooth mouse/joystick movements");
|
|
||||||
TRIGGER_MG(gm_mgAccelTrigger, 7.5, gm_mgSmoothTrigger, gm_mgIFeelTrigger,
|
|
||||||
TRANS("MOUSE ACCELERATION"), astrNoYes);
|
|
||||||
gm_mgAccelTrigger.mg_strTip = TRANS("allow mouse acceleration");
|
|
||||||
TRIGGER_MG(gm_mgIFeelTrigger, 8.5, gm_mgAccelTrigger, gm_mgPredefined,
|
|
||||||
TRANS("ENABLE IFEEL"), astrNoYes);
|
|
||||||
gm_mgIFeelTrigger.mg_strTip = TRANS("enable support for iFeel tactile feedback mouse");
|
|
||||||
|
|
||||||
gm_mgPredefined.mg_strText = TRANS("LOAD PREDEFINED SETTINGS");
|
|
||||||
gm_mgPredefined.mg_iCenterI = 0;
|
|
||||||
gm_mgPredefined.mg_boxOnScreen = BoxMediumRow(10);
|
|
||||||
gm_mgPredefined.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPredefined.mg_lnNode);
|
|
||||||
gm_mgPredefined.mg_pmgUp = &gm_mgIFeelTrigger;
|
|
||||||
gm_mgPredefined.mg_pmgDown = &gm_mgButtons;
|
|
||||||
gm_mgPredefined.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgPredefined.mg_strTip = TRANS("load one of several predefined control settings");
|
|
||||||
}
|
|
||||||
|
|
||||||
void CControlsMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_pmgSelectedByDefault = &gm_mgButtons;
|
|
||||||
INDEX iPlayer = _pGame->gm_iSinglePlayer;
|
|
||||||
if (_iLocalPlayer >= 0 && _iLocalPlayer<4) {
|
|
||||||
iPlayer = _pGame->gm_aiMenuLocalPlayers[_iLocalPlayer];
|
|
||||||
}
|
|
||||||
_fnmControlsToCustomize.PrintF("Controls\\Controls%d.ctl", iPlayer);
|
|
||||||
|
|
||||||
ControlsMenuOn();
|
|
||||||
|
|
||||||
gm_mgNameLabel.mg_strText.PrintF(TRANS("CONTROLS FOR: %s"), (const char *) _pGame->gm_apcPlayers[iPlayer].GetNameForPrinting());
|
|
||||||
|
|
||||||
ObtainActionSettings();
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CControlsMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
ApplyActionSettings();
|
|
||||||
|
|
||||||
ControlsMenuOff();
|
|
||||||
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CControlsMenu::ObtainActionSettings(void)
|
|
||||||
{
|
|
||||||
CControls &ctrls = *_pGame->gm_ctrlControlsExtra;
|
|
||||||
|
|
||||||
gm_mgSensitivity.mg_iMinPos = 0;
|
|
||||||
gm_mgSensitivity.mg_iMaxPos = 50;
|
|
||||||
gm_mgSensitivity.mg_iCurPos = ctrls.ctrl_fSensitivity / 2;
|
|
||||||
gm_mgSensitivity.ApplyCurrentPosition();
|
|
||||||
|
|
||||||
gm_mgInvertTrigger.mg_iSelected = ctrls.ctrl_bInvertLook ? 1 : 0;
|
|
||||||
gm_mgSmoothTrigger.mg_iSelected = ctrls.ctrl_bSmoothAxes ? 1 : 0;
|
|
||||||
gm_mgAccelTrigger.mg_iSelected = _pShell->GetINDEX("inp_bAllowMouseAcceleration") ? 1 : 0;
|
|
||||||
gm_mgIFeelTrigger.mg_bEnabled = _pShell->GetINDEX("sys_bIFeelEnabled") ? 1 : 0;
|
|
||||||
gm_mgIFeelTrigger.mg_iSelected = _pShell->GetFLOAT("inp_fIFeelGain")>0 ? 1 : 0;
|
|
||||||
|
|
||||||
gm_mgInvertTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgSmoothTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgAccelTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgIFeelTrigger.ApplyCurrentSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CControlsMenu::ApplyActionSettings(void)
|
|
||||||
{
|
|
||||||
CControls &ctrls = *_pGame->gm_ctrlControlsExtra;
|
|
||||||
|
|
||||||
FLOAT fSensitivity =
|
|
||||||
FLOAT(gm_mgSensitivity.mg_iCurPos - gm_mgSensitivity.mg_iMinPos) /
|
|
||||||
FLOAT(gm_mgSensitivity.mg_iMaxPos - gm_mgSensitivity.mg_iMinPos)*100.0f;
|
|
||||||
|
|
||||||
BOOL bInvert = gm_mgInvertTrigger.mg_iSelected != 0;
|
|
||||||
BOOL bSmooth = gm_mgSmoothTrigger.mg_iSelected != 0;
|
|
||||||
BOOL bAccel = gm_mgAccelTrigger.mg_iSelected != 0;
|
|
||||||
BOOL bIFeel = gm_mgIFeelTrigger.mg_iSelected != 0;
|
|
||||||
|
|
||||||
if (INDEX(ctrls.ctrl_fSensitivity) != INDEX(fSensitivity)) {
|
|
||||||
ctrls.ctrl_fSensitivity = fSensitivity;
|
|
||||||
}
|
|
||||||
ctrls.ctrl_bInvertLook = bInvert;
|
|
||||||
ctrls.ctrl_bSmoothAxes = bSmooth;
|
|
||||||
_pShell->SetINDEX("inp_bAllowMouseAcceleration", bAccel);
|
|
||||||
_pShell->SetFLOAT("inp_fIFeelGain", bIFeel ? 1.0f : 0.0f);
|
|
||||||
ctrls.CalculateInfluencesForAllAxis();
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_CONTROLS_H
|
|
||||||
#define SE_INCL_GAME_MENU_CONTROLS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGSlider.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CControlsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgNameLabel;
|
|
||||||
CMGButton gm_mgButtons;
|
|
||||||
CMGSlider gm_mgSensitivity;
|
|
||||||
CMGTrigger gm_mgInvertTrigger;
|
|
||||||
CMGTrigger gm_mgSmoothTrigger;
|
|
||||||
CMGTrigger gm_mgAccelTrigger;
|
|
||||||
CMGTrigger gm_mgIFeelTrigger;
|
|
||||||
CMGButton gm_mgPredefined;
|
|
||||||
CMGButton gm_mgAdvanced;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
void ObtainActionSettings(void);
|
|
||||||
void ApplyActionSettings(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,30 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_CREDITS_H
|
|
||||||
#define SE_INCL_GAME_MENU_CREDITS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CCreditsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,156 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MCustomizeAxis.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CCustomizeAxisMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize axis menu
|
|
||||||
gm_mgTitle.mg_strText = TRANS("CUSTOMIZE AXIS");
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgActionTrigger, 0, gm_mgSmoothTrigger, gm_mgMountedTrigger, TRANS("ACTION"), astrNoYes);
|
|
||||||
gm_mgActionTrigger.mg_strTip = TRANS("choose action to customize");
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgMountedTrigger, 2, gm_mgActionTrigger, gm_mgSensitivity, TRANS("MOUNTED TO"), astrNoYes);
|
|
||||||
gm_mgMountedTrigger.mg_strTip = TRANS("choose controller axis that will perform the action");
|
|
||||||
|
|
||||||
gm_mgActionTrigger.mg_astrTexts = new CTString[AXIS_ACTIONS_CT];
|
|
||||||
gm_mgActionTrigger.mg_ctTexts = AXIS_ACTIONS_CT;
|
|
||||||
|
|
||||||
gm_mgActionTrigger.mg_pPreTriggerChange = NULL;
|
|
||||||
gm_mgActionTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
// for all available axis type controlers
|
|
||||||
for (INDEX iControler = 0; iControler<AXIS_ACTIONS_CT; iControler++) {
|
|
||||||
gm_mgActionTrigger.mg_astrTexts[iControler] = TranslateConst(CTString(_pGame->gm_astrAxisNames[iControler]), 0);
|
|
||||||
}
|
|
||||||
gm_mgActionTrigger.mg_iSelected = 3;
|
|
||||||
|
|
||||||
INDEX ctAxis = _pInput->GetAvailableAxisCount();
|
|
||||||
gm_mgMountedTrigger.mg_astrTexts = new CTString[ctAxis];
|
|
||||||
gm_mgMountedTrigger.mg_ctTexts = ctAxis;
|
|
||||||
// for all axis actions that can be mounted
|
|
||||||
for (INDEX iAxis = 0; iAxis<ctAxis; iAxis++) {
|
|
||||||
gm_mgMountedTrigger.mg_astrTexts[iAxis] = _pInput->GetAxisTransName(iAxis);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgSensitivity.mg_boxOnScreen = BoxMediumRow(3);
|
|
||||||
gm_mgSensitivity.mg_strText = TRANS("SENSITIVITY");
|
|
||||||
gm_mgSensitivity.mg_pmgUp = &gm_mgMountedTrigger;
|
|
||||||
gm_mgSensitivity.mg_pmgDown = &gm_mgDeadzone;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSensitivity.mg_lnNode);
|
|
||||||
gm_mgSensitivity.mg_strTip = TRANS("set sensitivity for this axis");
|
|
||||||
|
|
||||||
gm_mgDeadzone.mg_boxOnScreen = BoxMediumRow(4);
|
|
||||||
gm_mgDeadzone.mg_strText = TRANS("DEAD ZONE");
|
|
||||||
gm_mgDeadzone.mg_pmgUp = &gm_mgSensitivity;
|
|
||||||
gm_mgDeadzone.mg_pmgDown = &gm_mgInvertTrigger;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgDeadzone.mg_lnNode);
|
|
||||||
gm_mgDeadzone.mg_strTip = TRANS("set dead zone for this axis");
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgInvertTrigger, 5, gm_mgDeadzone, gm_mgRelativeTrigger, TRANS("INVERTED"), astrNoYes);
|
|
||||||
gm_mgInvertTrigger.mg_strTip = TRANS("choose whether to invert this axis or not");
|
|
||||||
TRIGGER_MG(gm_mgRelativeTrigger, 6, gm_mgInvertTrigger, gm_mgSmoothTrigger, TRANS("RELATIVE"), astrNoYes);
|
|
||||||
gm_mgRelativeTrigger.mg_strTip = TRANS("select relative or absolute axis reading");
|
|
||||||
TRIGGER_MG(gm_mgSmoothTrigger, 7, gm_mgRelativeTrigger, gm_mgActionTrigger, TRANS("SMOOTH"), astrNoYes);
|
|
||||||
gm_mgSmoothTrigger.mg_strTip = TRANS("turn this on to filter readings on this axis");
|
|
||||||
}
|
|
||||||
|
|
||||||
CCustomizeAxisMenu::~CCustomizeAxisMenu(void)
|
|
||||||
{
|
|
||||||
delete[] gm_mgActionTrigger.mg_astrTexts;
|
|
||||||
delete[] gm_mgMountedTrigger.mg_astrTexts;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeAxisMenu::ObtainActionSettings(void)
|
|
||||||
{
|
|
||||||
ControlsMenuOn();
|
|
||||||
CControls &ctrls = *_pGame->gm_ctrlControlsExtra;
|
|
||||||
INDEX iSelectedAction = gm_mgActionTrigger.mg_iSelected;
|
|
||||||
INDEX iMountedAxis = ctrls.ctrl_aaAxisActions[iSelectedAction].aa_iAxisAction;
|
|
||||||
|
|
||||||
gm_mgMountedTrigger.mg_iSelected = iMountedAxis;
|
|
||||||
|
|
||||||
gm_mgSensitivity.mg_iMinPos = 0;
|
|
||||||
gm_mgSensitivity.mg_iMaxPos = 50;
|
|
||||||
gm_mgSensitivity.mg_iCurPos = ctrls.ctrl_aaAxisActions[iSelectedAction].aa_fSensitivity / 2;
|
|
||||||
gm_mgSensitivity.ApplyCurrentPosition();
|
|
||||||
|
|
||||||
gm_mgDeadzone.mg_iMinPos = 0;
|
|
||||||
gm_mgDeadzone.mg_iMaxPos = 50;
|
|
||||||
gm_mgDeadzone.mg_iCurPos = ctrls.ctrl_aaAxisActions[iSelectedAction].aa_fDeadZone / 2;
|
|
||||||
gm_mgDeadzone.ApplyCurrentPosition();
|
|
||||||
|
|
||||||
gm_mgInvertTrigger.mg_iSelected = ctrls.ctrl_aaAxisActions[iSelectedAction].aa_bInvert ? 1 : 0;
|
|
||||||
gm_mgRelativeTrigger.mg_iSelected = ctrls.ctrl_aaAxisActions[iSelectedAction].aa_bRelativeControler ? 1 : 0;
|
|
||||||
gm_mgSmoothTrigger.mg_iSelected = ctrls.ctrl_aaAxisActions[iSelectedAction].aa_bSmooth ? 1 : 0;
|
|
||||||
|
|
||||||
gm_mgActionTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgMountedTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgInvertTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgRelativeTrigger.ApplyCurrentSelection();
|
|
||||||
gm_mgSmoothTrigger.ApplyCurrentSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeAxisMenu::ApplyActionSettings(void)
|
|
||||||
{
|
|
||||||
CControls &ctrls = *_pGame->gm_ctrlControlsExtra;
|
|
||||||
INDEX iSelectedAction = gm_mgActionTrigger.mg_iSelected;
|
|
||||||
INDEX iMountedAxis = gm_mgMountedTrigger.mg_iSelected;
|
|
||||||
FLOAT fSensitivity =
|
|
||||||
FLOAT(gm_mgSensitivity.mg_iCurPos - gm_mgSensitivity.mg_iMinPos) /
|
|
||||||
FLOAT(gm_mgSensitivity.mg_iMaxPos - gm_mgSensitivity.mg_iMinPos)*100.0f;
|
|
||||||
FLOAT fDeadZone =
|
|
||||||
FLOAT(gm_mgDeadzone.mg_iCurPos - gm_mgDeadzone.mg_iMinPos) /
|
|
||||||
FLOAT(gm_mgDeadzone.mg_iMaxPos - gm_mgDeadzone.mg_iMinPos)*100.0f;
|
|
||||||
|
|
||||||
BOOL bInvert = gm_mgInvertTrigger.mg_iSelected != 0;
|
|
||||||
BOOL bRelative = gm_mgRelativeTrigger.mg_iSelected != 0;
|
|
||||||
BOOL bSmooth = gm_mgSmoothTrigger.mg_iSelected != 0;
|
|
||||||
|
|
||||||
ctrls.ctrl_aaAxisActions[iSelectedAction].aa_iAxisAction = iMountedAxis;
|
|
||||||
if (INDEX(ctrls.ctrl_aaAxisActions[iSelectedAction].aa_fSensitivity) != INDEX(fSensitivity)) {
|
|
||||||
ctrls.ctrl_aaAxisActions[iSelectedAction].aa_fSensitivity = fSensitivity;
|
|
||||||
}
|
|
||||||
if (INDEX(ctrls.ctrl_aaAxisActions[iSelectedAction].aa_fDeadZone) != INDEX(fDeadZone)) {
|
|
||||||
ctrls.ctrl_aaAxisActions[iSelectedAction].aa_fDeadZone = fDeadZone;
|
|
||||||
}
|
|
||||||
ctrls.ctrl_aaAxisActions[iSelectedAction].aa_bInvert = bInvert;
|
|
||||||
ctrls.ctrl_aaAxisActions[iSelectedAction].aa_bRelativeControler = bRelative;
|
|
||||||
ctrls.ctrl_aaAxisActions[iSelectedAction].aa_bSmooth = bSmooth;
|
|
||||||
ctrls.CalculateInfluencesForAllAxis();
|
|
||||||
|
|
||||||
ControlsMenuOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeAxisMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
ObtainActionSettings();
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeAxisMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
ApplyActionSettings();
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_CUSTOMIZEAXIS_H
|
|
||||||
#define SE_INCL_GAME_MENU_CUSTOMIZEAXIS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGSlider.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CCustomizeAxisMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGTrigger gm_mgActionTrigger;
|
|
||||||
CMGTrigger gm_mgMountedTrigger;
|
|
||||||
CMGSlider gm_mgSensitivity;
|
|
||||||
CMGSlider gm_mgDeadzone;
|
|
||||||
CMGTrigger gm_mgInvertTrigger;
|
|
||||||
CMGTrigger gm_mgRelativeTrigger;
|
|
||||||
CMGTrigger gm_mgSmoothTrigger;
|
|
||||||
|
|
||||||
~CCustomizeAxisMenu(void);
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
void ObtainActionSettings(void);
|
|
||||||
void ApplyActionSettings(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,112 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MCustomizeKeyboard.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CCustomizeKeyboardMenu::FillListItems(void)
|
|
||||||
{
|
|
||||||
// disable all items first
|
|
||||||
for (INDEX i = 0; i<KEYS_ON_SCREEN; i++) {
|
|
||||||
gm_mgKey[i].mg_bEnabled = FALSE;
|
|
||||||
gm_mgKey[i].mg_iInList = -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL bHasFirst = FALSE;
|
|
||||||
BOOL bHasLast = FALSE;
|
|
||||||
// set diks to key buttons
|
|
||||||
INDEX iLabel = 0;
|
|
||||||
INDEX ctLabels = _pGame->gm_ctrlControlsExtra->ctrl_lhButtonActions.Count();
|
|
||||||
FOREACHINLIST(CButtonAction, ba_lnNode, _pGame->gm_ctrlControlsExtra->ctrl_lhButtonActions, itAct)
|
|
||||||
{
|
|
||||||
INDEX iInMenu = iLabel - gm_iListOffset;
|
|
||||||
if ((iLabel >= gm_iListOffset) &&
|
|
||||||
(iLabel<(gm_iListOffset + gm_ctListVisible)))
|
|
||||||
{
|
|
||||||
bHasFirst |= (iLabel == 0);
|
|
||||||
bHasLast |= (iLabel == ctLabels - 1);
|
|
||||||
gm_mgKey[iInMenu].mg_strLabel = TranslateConst(itAct->ba_strName, 0);
|
|
||||||
gm_mgKey[iInMenu].mg_iControlNumber = iLabel;
|
|
||||||
gm_mgKey[iInMenu].SetBindingNames(FALSE);
|
|
||||||
gm_mgKey[iInMenu].mg_strTip = TRANS("Enter - change binding, Backspace - unbind");
|
|
||||||
gm_mgKey[iInMenu].mg_bEnabled = TRUE;
|
|
||||||
gm_mgKey[iInMenu].mg_iInList = iLabel;
|
|
||||||
}
|
|
||||||
iLabel++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// enable/disable up/down arrows
|
|
||||||
gm_mgArrowUp.mg_bEnabled = !bHasFirst && ctLabels>0;
|
|
||||||
gm_mgArrowDn.mg_bEnabled = !bHasLast && ctLabels>0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeKeyboardMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize Audio options menu
|
|
||||||
gm_mgTitle.mg_strText = TRANS("CUSTOMIZE BUTTONS");
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
#define KL_START 3.0f
|
|
||||||
#define KL_STEEP -1.45f
|
|
||||||
for (INDEX iLabel = 0; iLabel<KEYS_ON_SCREEN; iLabel++)
|
|
||||||
{
|
|
||||||
INDEX iPrev = (gm_ctListVisible + iLabel - 1) % KEYS_ON_SCREEN;
|
|
||||||
INDEX iNext = (iLabel + 1) % KEYS_ON_SCREEN;
|
|
||||||
// initialize label entities
|
|
||||||
gm_mgKey[iLabel].mg_boxOnScreen = BoxKeyRow(iLabel);
|
|
||||||
// initialize label gadgets
|
|
||||||
gm_mgKey[iLabel].mg_pmgUp = &gm_mgKey[iPrev];
|
|
||||||
gm_mgKey[iLabel].mg_pmgDown = &gm_mgKey[iNext];
|
|
||||||
gm_mgKey[iLabel].mg_bVisible = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgKey[iLabel].mg_lnNode);
|
|
||||||
}
|
|
||||||
// arrows just exist
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowDn.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowUp.mg_lnNode);
|
|
||||||
gm_mgArrowDn.mg_adDirection = AD_DOWN;
|
|
||||||
gm_mgArrowUp.mg_adDirection = AD_UP;
|
|
||||||
gm_mgArrowDn.mg_boxOnScreen = BoxArrow(AD_DOWN);
|
|
||||||
gm_mgArrowUp.mg_boxOnScreen = BoxArrow(AD_UP);
|
|
||||||
gm_mgArrowDn.mg_pmgRight = gm_mgArrowDn.mg_pmgUp =
|
|
||||||
&gm_mgKey[KEYS_ON_SCREEN - 1];
|
|
||||||
gm_mgArrowUp.mg_pmgRight = gm_mgArrowUp.mg_pmgDown =
|
|
||||||
&gm_mgKey[0];
|
|
||||||
|
|
||||||
gm_ctListVisible = KEYS_ON_SCREEN;
|
|
||||||
gm_pmgArrowUp = &gm_mgArrowUp;
|
|
||||||
gm_pmgArrowDn = &gm_mgArrowDn;
|
|
||||||
gm_pmgListTop = &gm_mgKey[0];
|
|
||||||
gm_pmgListBottom = &gm_mgKey[KEYS_ON_SCREEN - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeKeyboardMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
ControlsMenuOn();
|
|
||||||
gm_iListOffset = 0;
|
|
||||||
gm_ctListTotal = _pGame->gm_ctrlControlsExtra->ctrl_lhButtonActions.Count();
|
|
||||||
gm_iListWantedItem = 0;
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCustomizeKeyboardMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
ControlsMenuOff();
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_CUSTOMIZEKEYBOARD_H
|
|
||||||
#define SE_INCL_GAME_MENU_CUSTOMIZEKEYBOARD_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGArrow.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGKeyDefinition.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CCustomizeKeyboardMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGKeyDefinition gm_mgKey[KEYS_ON_SCREEN];
|
|
||||||
CMGArrow gm_mgArrowUp;
|
|
||||||
CMGArrow gm_mgArrowDn;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
void FillListItems(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,31 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MDisabled.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CDisabledMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgButton.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgButton.mg_boxOnScreen = BoxBigRow(0.0f);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgButton.mg_lnNode);
|
|
||||||
gm_mgButton.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_DISABLED_H
|
|
||||||
#define SE_INCL_GAME_MENU_DISABLED_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CDisabledMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgButton;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,36 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MHighScore.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CHighScoreMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_mgHScore.mg_boxOnScreen = FLOATaabbox2D(FLOAT2D(0, 0), FLOAT2D(1, 0.5));
|
|
||||||
gm_lhGadgets.AddTail(gm_mgHScore.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgTitle.mg_strText = TRANS("HIGH SCORE TABLE");
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CHighScoreMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_HIGHSCORE_H
|
|
||||||
#define SE_INCL_GAME_MENU_HIGHSCORE_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGHighScore.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CHighScoreMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGHighScore gm_mgHScore;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,174 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MInGame.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CInGameMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize main menu
|
|
||||||
gm_mgTitle.mg_strText = TRANS("GAME");
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgLabel1.mg_strText = "";
|
|
||||||
gm_mgLabel1.mg_boxOnScreen = BoxMediumRow(-2.0);
|
|
||||||
gm_mgLabel1.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgLabel1.mg_iCenterI = -1;
|
|
||||||
gm_mgLabel1.mg_bEnabled = FALSE;
|
|
||||||
gm_mgLabel1.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLabel1.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgLabel2.mg_strText = "";
|
|
||||||
gm_mgLabel2.mg_boxOnScreen = BoxMediumRow(-1.0);
|
|
||||||
gm_mgLabel2.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgLabel2.mg_iCenterI = -1;
|
|
||||||
gm_mgLabel2.mg_bEnabled = FALSE;
|
|
||||||
gm_mgLabel2.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLabel2.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgQuickLoad.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gm_mgQuickLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuickLoad.mg_boxOnScreen = BoxBigRow(0.0f);
|
|
||||||
gm_mgQuickLoad.mg_strTip = TRANS("load a quick-saved game (F9)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuickLoad.mg_lnNode);
|
|
||||||
gm_mgQuickLoad.mg_pmgUp = &gm_mgQuit;
|
|
||||||
gm_mgQuickLoad.mg_pmgDown = &gm_mgQuickSave;
|
|
||||||
gm_mgQuickLoad.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgQuickSave.mg_strText = TRANS("QUICK SAVE");
|
|
||||||
gm_mgQuickSave.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuickSave.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgQuickSave.mg_strTip = TRANS("quick-save current game (F6)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuickSave.mg_lnNode);
|
|
||||||
gm_mgQuickSave.mg_pmgUp = &gm_mgQuickLoad;
|
|
||||||
gm_mgQuickSave.mg_pmgDown = &gm_mgLoad;
|
|
||||||
gm_mgQuickSave.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgLoad.mg_strText = TRANS("LOAD");
|
|
||||||
gm_mgLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgLoad.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgLoad.mg_strTip = TRANS("load a saved game");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLoad.mg_lnNode);
|
|
||||||
gm_mgLoad.mg_pmgUp = &gm_mgQuickSave;
|
|
||||||
gm_mgLoad.mg_pmgDown = &gm_mgSave;
|
|
||||||
gm_mgLoad.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgSave.mg_strText = TRANS("SAVE");
|
|
||||||
gm_mgSave.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgSave.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgSave.mg_strTip = TRANS("save current game (each player has own slots!)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSave.mg_lnNode);
|
|
||||||
gm_mgSave.mg_pmgUp = &gm_mgLoad;
|
|
||||||
gm_mgSave.mg_pmgDown = &gm_mgDemoRec;
|
|
||||||
gm_mgSave.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgDemoRec.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgDemoRec.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgDemoRec.mg_pmgUp = &gm_mgSave;
|
|
||||||
gm_mgDemoRec.mg_pmgDown = &gm_mgHighScore;
|
|
||||||
gm_mgDemoRec.mg_strText = "Text not set";
|
|
||||||
gm_lhGadgets.AddTail(gm_mgDemoRec.mg_lnNode);
|
|
||||||
gm_mgDemoRec.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgHighScore.mg_strText = TRANS("HIGH SCORES");
|
|
||||||
gm_mgHighScore.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgHighScore.mg_boxOnScreen = BoxBigRow(5.0f);
|
|
||||||
gm_mgHighScore.mg_strTip = TRANS("view list of top ten best scores");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgHighScore.mg_lnNode);
|
|
||||||
gm_mgHighScore.mg_pmgUp = &gm_mgDemoRec;
|
|
||||||
gm_mgHighScore.mg_pmgDown = &gm_mgOptions;
|
|
||||||
gm_mgHighScore.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgOptions.mg_strText = TRANS("OPTIONS");
|
|
||||||
gm_mgOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgOptions.mg_boxOnScreen = BoxBigRow(6.0f);
|
|
||||||
gm_mgOptions.mg_strTip = TRANS("adjust video, audio and input options");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgOptions.mg_lnNode);
|
|
||||||
gm_mgOptions.mg_pmgUp = &gm_mgHighScore;
|
|
||||||
gm_mgOptions.mg_pmgDown = &gm_mgStop;
|
|
||||||
gm_mgOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgStop.mg_strText = TRANS("STOP GAME");
|
|
||||||
gm_mgStop.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgStop.mg_boxOnScreen = BoxBigRow(7.0f);
|
|
||||||
gm_mgStop.mg_strTip = TRANS("stop currently running game");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgStop.mg_lnNode);
|
|
||||||
gm_mgStop.mg_pmgUp = &gm_mgOptions;
|
|
||||||
gm_mgStop.mg_pmgDown = &gm_mgQuit;
|
|
||||||
gm_mgStop.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgQuit.mg_strText = TRANS("QUIT");
|
|
||||||
gm_mgQuit.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuit.mg_boxOnScreen = BoxBigRow(8.0f);
|
|
||||||
gm_mgQuit.mg_strTip = TRANS("exit game immediately");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuit.mg_lnNode);
|
|
||||||
gm_mgQuit.mg_pmgUp = &gm_mgStop;
|
|
||||||
gm_mgQuit.mg_pmgDown = &gm_mgQuickLoad;
|
|
||||||
gm_mgQuit.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CInGameMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_mgQuickLoad.mg_bEnabled = _pNetwork->IsServer();
|
|
||||||
gm_mgQuickSave.mg_bEnabled = _pNetwork->IsServer();
|
|
||||||
gm_mgLoad.mg_bEnabled = _pNetwork->IsServer();
|
|
||||||
gm_mgSave.mg_bEnabled = _pNetwork->IsServer();
|
|
||||||
gm_mgDemoRec.mg_bEnabled = TRUE;//_pNetwork->IsServer();
|
|
||||||
extern void SetDemoStartStopRecText();
|
|
||||||
SetDemoStartStopRecText();
|
|
||||||
|
|
||||||
|
|
||||||
if (_gmRunningGameMode == GM_SINGLE_PLAYER) {
|
|
||||||
CPlayerCharacter &pc = _pGame->gm_apcPlayers[_pGame->gm_iSinglePlayer];
|
|
||||||
gm_mgLabel1.mg_strText.PrintF(TRANS("Player: %s"), (const char *) pc.GetNameForPrinting());
|
|
||||||
gm_mgLabel2.mg_strText = "";
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (_pNetwork->IsServer()) {
|
|
||||||
|
|
||||||
CTString strHost, strAddress;
|
|
||||||
CTString strHostName;
|
|
||||||
_pNetwork->GetHostName(strHost, strAddress);
|
|
||||||
if (strHost == "") {
|
|
||||||
strHostName = TRANS("<not started yet>");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
strHostName = strHost + " (" + strAddress + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgLabel1.mg_strText = TRANS("Address: ") + strHostName;
|
|
||||||
gm_mgLabel2.mg_strText = "";
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
CTString strConfig;
|
|
||||||
strConfig = TRANS("<not adjusted>");
|
|
||||||
extern CTString sam_strNetworkSettings;
|
|
||||||
if (sam_strNetworkSettings != "") {
|
|
||||||
LoadStringVar(CTFileName(sam_strNetworkSettings).NoExt() + ".des", strConfig);
|
|
||||||
strConfig.OnlyFirstLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgLabel1.mg_strText = TRANS("Connected to: ") + _pGame->gam_strJoinAddress;
|
|
||||||
gm_mgLabel2.mg_strText = TRANS("Connection: ") + strConfig;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_INGAME_H
|
|
||||||
#define SE_INCL_GAME_MENU_INGAME_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CInGameMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgLabel1;
|
|
||||||
CMGButton gm_mgLabel2;
|
|
||||||
CMGButton gm_mgQuickLoad;
|
|
||||||
CMGButton gm_mgQuickSave;
|
|
||||||
CMGButton gm_mgLoad;
|
|
||||||
CMGButton gm_mgSave;
|
|
||||||
CMGButton gm_mgDemoRec;
|
|
||||||
CMGButton gm_mgHighScore;
|
|
||||||
CMGButton gm_mgOptions;
|
|
||||||
CMGButton gm_mgStop;
|
|
||||||
CMGButton gm_mgQuit;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,112 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
#include "MLevels.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CLevelsMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("CHOOSE LEVEL");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
for (INDEX iLabel = 0; iLabel<LEVELS_ON_SCREEN; iLabel++)
|
|
||||||
{
|
|
||||||
INDEX iPrev = (LEVELS_ON_SCREEN + iLabel - 1) % LEVELS_ON_SCREEN;
|
|
||||||
INDEX iNext = (iLabel + 1) % LEVELS_ON_SCREEN;
|
|
||||||
// initialize label gadgets
|
|
||||||
gm_mgManualLevel[iLabel].mg_pmgUp = &gm_mgManualLevel[iPrev];
|
|
||||||
gm_mgManualLevel[iLabel].mg_pmgDown = &gm_mgManualLevel[iNext];
|
|
||||||
gm_mgManualLevel[iLabel].mg_boxOnScreen = BoxMediumRow(iLabel);
|
|
||||||
gm_mgManualLevel[iLabel].mg_pActivatedFunction = NULL; // never called!
|
|
||||||
gm_lhGadgets.AddTail(gm_mgManualLevel[iLabel].mg_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowUp.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowDn.mg_lnNode);
|
|
||||||
gm_mgArrowUp.mg_adDirection = AD_UP;
|
|
||||||
gm_mgArrowDn.mg_adDirection = AD_DOWN;
|
|
||||||
gm_mgArrowUp.mg_boxOnScreen = BoxArrow(AD_UP);
|
|
||||||
gm_mgArrowDn.mg_boxOnScreen = BoxArrow(AD_DOWN);
|
|
||||||
gm_mgArrowUp.mg_pmgRight = gm_mgArrowUp.mg_pmgDown =
|
|
||||||
&gm_mgManualLevel[0];
|
|
||||||
gm_mgArrowDn.mg_pmgRight = gm_mgArrowDn.mg_pmgUp =
|
|
||||||
&gm_mgManualLevel[LEVELS_ON_SCREEN - 1];
|
|
||||||
|
|
||||||
gm_ctListVisible = LEVELS_ON_SCREEN;
|
|
||||||
gm_pmgArrowUp = &gm_mgArrowUp;
|
|
||||||
gm_pmgArrowDn = &gm_mgArrowDn;
|
|
||||||
gm_pmgListTop = &gm_mgManualLevel[0];
|
|
||||||
gm_pmgListBottom = &gm_mgManualLevel[LEVELS_ON_SCREEN - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
void CLevelsMenu::FillListItems(void)
|
|
||||||
{
|
|
||||||
// disable all items first
|
|
||||||
for (INDEX i = 0; i<LEVELS_ON_SCREEN; i++) {
|
|
||||||
gm_mgManualLevel[i].mg_bEnabled = FALSE;
|
|
||||||
gm_mgManualLevel[i].mg_strText = TRANS("<empty>");
|
|
||||||
gm_mgManualLevel[i].mg_iInList = -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL bHasFirst = FALSE;
|
|
||||||
BOOL bHasLast = FALSE;
|
|
||||||
INDEX ctLabels = _lhFilteredLevels.Count();
|
|
||||||
INDEX iLabel = 0;
|
|
||||||
FOREACHINLIST(CLevelInfo, li_lnNode, _lhFilteredLevels, itli) {
|
|
||||||
CLevelInfo &li = *itli;
|
|
||||||
INDEX iInMenu = iLabel - gm_iListOffset;
|
|
||||||
if ((iLabel >= gm_iListOffset) &&
|
|
||||||
(iLabel<(gm_iListOffset + LEVELS_ON_SCREEN)))
|
|
||||||
{
|
|
||||||
bHasFirst |= (iLabel == 0);
|
|
||||||
bHasLast |= (iLabel == ctLabels - 1);
|
|
||||||
gm_mgManualLevel[iInMenu].mg_strText = li.li_strName;
|
|
||||||
gm_mgManualLevel[iInMenu].mg_fnmLevel = li.li_fnLevel;
|
|
||||||
gm_mgManualLevel[iInMenu].mg_bEnabled = TRUE;
|
|
||||||
gm_mgManualLevel[iInMenu].mg_iInList = iLabel;
|
|
||||||
}
|
|
||||||
iLabel++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// enable/disable up/down arrows
|
|
||||||
gm_mgArrowUp.mg_bEnabled = !bHasFirst && ctLabels>0;
|
|
||||||
gm_mgArrowDn.mg_bEnabled = !bHasLast && ctLabels>0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CLevelsMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
// set default parameters for the list
|
|
||||||
gm_iListOffset = 0;
|
|
||||||
gm_ctListTotal = _lhFilteredLevels.Count();
|
|
||||||
gm_iListWantedItem = 0;
|
|
||||||
// for each level
|
|
||||||
INDEX i = 0;
|
|
||||||
FOREACHINLIST(CLevelInfo, li_lnNode, _lhFilteredLevels, itlid) {
|
|
||||||
CLevelInfo &lid = *itlid;
|
|
||||||
// if it is the chosen one
|
|
||||||
if (lid.li_fnLevel == _pGame->gam_strCustomLevel) {
|
|
||||||
// demand focus on it
|
|
||||||
gm_iListWantedItem = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_LEVELS_H
|
|
||||||
#define SE_INCL_GAME_MENU_LEVELS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGArrow.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGLevelButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CLevelsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGLevelButton gm_mgManualLevel[LEVELS_ON_SCREEN];
|
|
||||||
CMGArrow gm_mgArrowUp;
|
|
||||||
CMGArrow gm_mgArrowDn;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void FillListItems(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,236 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MLoadSave.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CLoadSaveMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_pgmNextMenu = NULL;
|
|
||||||
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgNotes.mg_boxOnScreen = BoxMediumRow(10.0);
|
|
||||||
gm_mgNotes.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgNotes.mg_iCenterI = -1;
|
|
||||||
gm_mgNotes.mg_bEnabled = FALSE;
|
|
||||||
gm_mgNotes.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNotes.mg_lnNode);
|
|
||||||
|
|
||||||
for (INDEX iLabel = 0; iLabel<SAVELOAD_BUTTONS_CT; iLabel++)
|
|
||||||
{
|
|
||||||
INDEX iPrev = (SAVELOAD_BUTTONS_CT + iLabel - 1) % SAVELOAD_BUTTONS_CT;
|
|
||||||
INDEX iNext = (iLabel + 1) % SAVELOAD_BUTTONS_CT;
|
|
||||||
// initialize label gadgets
|
|
||||||
gm_amgButton[iLabel].mg_pmgUp = &gm_amgButton[iPrev];
|
|
||||||
gm_amgButton[iLabel].mg_pmgDown = &gm_amgButton[iNext];
|
|
||||||
gm_amgButton[iLabel].mg_boxOnScreen = BoxSaveLoad(iLabel);
|
|
||||||
gm_amgButton[iLabel].mg_pActivatedFunction = NULL; // never called!
|
|
||||||
gm_amgButton[iLabel].mg_iCenterI = -1;
|
|
||||||
gm_lhGadgets.AddTail(gm_amgButton[iLabel].mg_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowUp.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowDn.mg_lnNode);
|
|
||||||
gm_mgArrowUp.mg_adDirection = AD_UP;
|
|
||||||
gm_mgArrowDn.mg_adDirection = AD_DOWN;
|
|
||||||
gm_mgArrowUp.mg_boxOnScreen = BoxArrow(AD_UP);
|
|
||||||
gm_mgArrowDn.mg_boxOnScreen = BoxArrow(AD_DOWN);
|
|
||||||
gm_mgArrowUp.mg_pmgRight = gm_mgArrowUp.mg_pmgDown = &gm_amgButton[0];
|
|
||||||
gm_mgArrowDn.mg_pmgRight = gm_mgArrowDn.mg_pmgUp = &gm_amgButton[SAVELOAD_BUTTONS_CT - 1];
|
|
||||||
|
|
||||||
gm_ctListVisible = SAVELOAD_BUTTONS_CT;
|
|
||||||
gm_pmgArrowUp = &gm_mgArrowUp;
|
|
||||||
gm_pmgArrowDn = &gm_mgArrowDn;
|
|
||||||
gm_pmgListTop = &gm_amgButton[0];
|
|
||||||
gm_pmgListBottom = &gm_amgButton[SAVELOAD_BUTTONS_CT - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
void CLoadSaveMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_bNoEscape = FALSE;
|
|
||||||
|
|
||||||
// delete all file infos
|
|
||||||
FORDELETELIST(CFileInfo, fi_lnNode, gm_lhFileInfos, itfi) {
|
|
||||||
delete &itfi.Current();
|
|
||||||
}
|
|
||||||
|
|
||||||
// list the directory
|
|
||||||
CDynamicStackArray<CTFileName> afnmDir;
|
|
||||||
MakeDirList(afnmDir, gm_fnmDirectory, CTString(""), 0);
|
|
||||||
gm_iLastFile = -1;
|
|
||||||
|
|
||||||
// for each file in the directory
|
|
||||||
for (INDEX i = 0; i<afnmDir.Count(); i++) {
|
|
||||||
CTFileName fnm = afnmDir[i];
|
|
||||||
|
|
||||||
// if it can be parsed
|
|
||||||
CTString strName;
|
|
||||||
if (ParseFile(fnm, strName)) {
|
|
||||||
// create new info for that file
|
|
||||||
CFileInfo *pfi = new CFileInfo;
|
|
||||||
pfi->fi_fnFile = fnm;
|
|
||||||
pfi->fi_strName = strName;
|
|
||||||
// add it to list
|
|
||||||
gm_lhFileInfos.AddTail(pfi->fi_lnNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// sort if needed
|
|
||||||
switch (gm_iSortType) {
|
|
||||||
default: ASSERT(FALSE);
|
|
||||||
case LSSORT_NONE: break;
|
|
||||||
case LSSORT_NAMEUP:
|
|
||||||
gm_lhFileInfos.Sort(qsort_CompareFileInfos_NameUp, offsetof(CFileInfo, fi_lnNode));
|
|
||||||
break;
|
|
||||||
case LSSORT_NAMEDN:
|
|
||||||
gm_lhFileInfos.Sort(qsort_CompareFileInfos_NameDn, offsetof(CFileInfo, fi_lnNode));
|
|
||||||
break;
|
|
||||||
case LSSORT_FILEUP:
|
|
||||||
gm_lhFileInfos.Sort(qsort_CompareFileInfos_FileUp, offsetof(CFileInfo, fi_lnNode));
|
|
||||||
break;
|
|
||||||
case LSSORT_FILEDN:
|
|
||||||
gm_lhFileInfos.Sort(qsort_CompareFileInfos_FileDn, offsetof(CFileInfo, fi_lnNode));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if saving
|
|
||||||
if (gm_bSave) {
|
|
||||||
// add one info as empty slot
|
|
||||||
CFileInfo *pfi = new CFileInfo;
|
|
||||||
CTString strNumber;
|
|
||||||
strNumber.PrintF("%04d", gm_iLastFile + 1);
|
|
||||||
pfi->fi_fnFile = gm_fnmDirectory + gm_fnmBaseName + strNumber + gm_fnmExt;
|
|
||||||
pfi->fi_strName = EMPTYSLOTSTRING;
|
|
||||||
// add it to beginning
|
|
||||||
gm_lhFileInfos.AddHead(pfi->fi_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// set default parameters for the list
|
|
||||||
gm_iListOffset = 0;
|
|
||||||
gm_ctListTotal = gm_lhFileInfos.Count();
|
|
||||||
|
|
||||||
// find which one should be selected
|
|
||||||
gm_iListWantedItem = 0;
|
|
||||||
if (gm_fnmSelected != "") {
|
|
||||||
INDEX i = 0;
|
|
||||||
FOREACHINLIST(CFileInfo, fi_lnNode, gm_lhFileInfos, itfi) {
|
|
||||||
CFileInfo &fi = *itfi;
|
|
||||||
if (fi.fi_fnFile == gm_fnmSelected) {
|
|
||||||
gm_iListWantedItem = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CLoadSaveMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
// delete all file infos
|
|
||||||
FORDELETELIST(CFileInfo, fi_lnNode, gm_lhFileInfos, itfi) {
|
|
||||||
delete &itfi.Current();
|
|
||||||
}
|
|
||||||
gm_pgmNextMenu = NULL;
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CLoadSaveMenu::FillListItems(void)
|
|
||||||
{
|
|
||||||
// disable all items first
|
|
||||||
for (INDEX i = 0; i<SAVELOAD_BUTTONS_CT; i++) {
|
|
||||||
gm_amgButton[i].mg_bEnabled = FALSE;
|
|
||||||
gm_amgButton[i].mg_strText = TRANS("<empty>");
|
|
||||||
gm_amgButton[i].mg_strTip = "";
|
|
||||||
gm_amgButton[i].mg_iInList = -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL bHasFirst = FALSE;
|
|
||||||
BOOL bHasLast = FALSE;
|
|
||||||
INDEX ctLabels = gm_lhFileInfos.Count();
|
|
||||||
INDEX iLabel = 0;
|
|
||||||
FOREACHINLIST(CFileInfo, fi_lnNode, gm_lhFileInfos, itfi) {
|
|
||||||
CFileInfo &fi = *itfi;
|
|
||||||
INDEX iInMenu = iLabel - gm_iListOffset;
|
|
||||||
if ((iLabel >= gm_iListOffset) &&
|
|
||||||
(iLabel<(gm_iListOffset + SAVELOAD_BUTTONS_CT)))
|
|
||||||
{
|
|
||||||
bHasFirst |= (iLabel == 0);
|
|
||||||
bHasLast |= (iLabel == ctLabels - 1);
|
|
||||||
gm_amgButton[iInMenu].mg_iInList = iLabel;
|
|
||||||
gm_amgButton[iInMenu].mg_strDes = fi.fi_strName;
|
|
||||||
gm_amgButton[iInMenu].mg_fnm = fi.fi_fnFile;
|
|
||||||
gm_amgButton[iInMenu].mg_bEnabled = TRUE;
|
|
||||||
gm_amgButton[iInMenu].RefreshText();
|
|
||||||
if (gm_bSave) {
|
|
||||||
if (!FileExistsForWriting(gm_amgButton[iInMenu].mg_fnm)) {
|
|
||||||
gm_amgButton[iInMenu].mg_strTip = TRANS("Enter - save in new slot");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gm_amgButton[iInMenu].mg_strTip = TRANS("Enter - save here, F2 - rename, Del - delete");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (gm_bManage) {
|
|
||||||
gm_amgButton[iInMenu].mg_strTip = TRANS("Enter - load this, F2 - rename, Del - delete");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gm_amgButton[iInMenu].mg_strTip = TRANS("Enter - load this");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
iLabel++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// enable/disable up/down arrows
|
|
||||||
gm_mgArrowUp.mg_bEnabled = !bHasFirst && ctLabels>0;
|
|
||||||
gm_mgArrowDn.mg_bEnabled = !bHasLast && ctLabels>0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// called to get info of a file from directory, or to skip it
|
|
||||||
BOOL CLoadSaveMenu::ParseFile(const CTFileName &fnm, CTString &strName)
|
|
||||||
{
|
|
||||||
if (fnm.FileExt() != gm_fnmExt) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
CTFileName fnSaveGameDescription = fnm.NoExt() + ".des";
|
|
||||||
try {
|
|
||||||
strName.Load_t(fnSaveGameDescription);
|
|
||||||
} catch (char *strError) {
|
|
||||||
(void)strError;
|
|
||||||
strName = fnm.FileName();
|
|
||||||
|
|
||||||
if (fnm.FileExt() == ".ctl") {
|
|
||||||
INDEX iCtl = -1;
|
|
||||||
strName.ScanF("Controls%d", &iCtl);
|
|
||||||
if (iCtl >= 0 && iCtl <= 7) {
|
|
||||||
strName.PrintF(TRANS("From player: %s"), (const char *) _pGame->gm_apcPlayers[iCtl].GetNameForPrinting());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
INDEX iFile = -1;
|
|
||||||
fnm.FileName().ScanF((const char*)(gm_fnmBaseName + "%d"), &iFile);
|
|
||||||
|
|
||||||
gm_iLastFile = Max(gm_iLastFile, iFile);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_LOADSAVE_H
|
|
||||||
#define SE_INCL_GAME_MENU_LOADSAVE_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGArrow.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGFileButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
#define SAVELOAD_BUTTONS_CT 14
|
|
||||||
|
|
||||||
enum ELSSortType
|
|
||||||
{
|
|
||||||
LSSORT_NONE,
|
|
||||||
LSSORT_NAMEUP,
|
|
||||||
LSSORT_NAMEDN,
|
|
||||||
LSSORT_FILEUP,
|
|
||||||
LSSORT_FILEDN,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class CLoadSaveMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
// settings adjusted before starting the menu
|
|
||||||
CGameMenu *gm_pgmNextMenu; // menu to go to after selecting a file (if null, use parent menu)
|
|
||||||
CTFileName gm_fnmSelected; // file that is selected initially
|
|
||||||
CTFileName gm_fnmDirectory; // directory that should be read
|
|
||||||
CTFileName gm_fnmBaseName; // base file name for saving (numbers are auto-added)
|
|
||||||
CTFileName gm_fnmExt; // accepted file extension
|
|
||||||
BOOL gm_bSave; // set when chosing file for saving
|
|
||||||
BOOL gm_bManage; // set if managing (rename/delet is enabled)
|
|
||||||
CTString gm_strSaveDes; // default description (if saving)
|
|
||||||
BOOL gm_bAllowThumbnails; // set when chosing file for saving
|
|
||||||
BOOL gm_bNoEscape; // forbid exiting with escape/rmb
|
|
||||||
|
|
||||||
INDEX gm_iSortType; // sort type
|
|
||||||
|
|
||||||
// function to activate when file is chosen
|
|
||||||
// return true if saving succeeded - description is saved automatically
|
|
||||||
// always return true for loading
|
|
||||||
BOOL(*gm_pAfterFileChosen)(const CTFileName &fnm);
|
|
||||||
|
|
||||||
// internal properties
|
|
||||||
CListHead gm_lhFileInfos; // all file infos to list
|
|
||||||
INDEX gm_iLastFile; // index of last saved file in numbered format
|
|
||||||
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgNotes;
|
|
||||||
CMGFileButton gm_amgButton[SAVELOAD_BUTTONS_CT];
|
|
||||||
CMGArrow gm_mgArrowUp;
|
|
||||||
CMGArrow gm_mgArrowDn;
|
|
||||||
|
|
||||||
// called to get info of a file from directory, or to skip it
|
|
||||||
BOOL ParseFile(const CTFileName &fnm, CTString &strName);
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
void FillListItems(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,130 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MMain.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CMainMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize main menu
|
|
||||||
/*
|
|
||||||
gm_mgTitle.mg_strText = "SERIOUS SAM - BETA"; // nothing to see here, kazuya
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail( gm_mgTitle.mg_lnNode);
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern CTString sam_strVersion;
|
|
||||||
gm_mgVersionLabel.mg_strText = sam_strVersion;
|
|
||||||
gm_mgVersionLabel.mg_boxOnScreen = BoxVersion();
|
|
||||||
gm_mgVersionLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgVersionLabel.mg_iCenterI = +1;
|
|
||||||
gm_mgVersionLabel.mg_bEnabled = FALSE;
|
|
||||||
gm_mgVersionLabel.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgVersionLabel.mg_lnNode);
|
|
||||||
|
|
||||||
extern CTString sam_strModName;
|
|
||||||
gm_mgModLabel.mg_strText = sam_strModName;
|
|
||||||
gm_mgModLabel.mg_boxOnScreen = BoxMediumRow(-2.0f);
|
|
||||||
gm_mgModLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgModLabel.mg_iCenterI = 0;
|
|
||||||
gm_mgModLabel.mg_bEnabled = FALSE;
|
|
||||||
gm_mgModLabel.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgModLabel.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgSingle.mg_strText = TRANS("SINGLE PLAYER");
|
|
||||||
gm_mgSingle.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgSingle.mg_boxOnScreen = BoxBigRow(0.0f);
|
|
||||||
gm_mgSingle.mg_strTip = TRANS("single player game menus");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSingle.mg_lnNode);
|
|
||||||
gm_mgSingle.mg_pmgUp = &gm_mgQuit;
|
|
||||||
gm_mgSingle.mg_pmgDown = &gm_mgNetwork;
|
|
||||||
gm_mgSingle.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgNetwork.mg_strText = TRANS("NETWORK");
|
|
||||||
gm_mgNetwork.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgNetwork.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgNetwork.mg_strTip = TRANS("LAN/iNet multiplayer menus");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNetwork.mg_lnNode);
|
|
||||||
gm_mgNetwork.mg_pmgUp = &gm_mgSingle;
|
|
||||||
gm_mgNetwork.mg_pmgDown = &gm_mgSplitScreen;
|
|
||||||
gm_mgNetwork.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgSplitScreen.mg_strText = TRANS("SPLIT SCREEN");
|
|
||||||
gm_mgSplitScreen.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgSplitScreen.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgSplitScreen.mg_strTip = TRANS("play with multiple players on one computer");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSplitScreen.mg_lnNode);
|
|
||||||
gm_mgSplitScreen.mg_pmgUp = &gm_mgNetwork;
|
|
||||||
gm_mgSplitScreen.mg_pmgDown = &gm_mgDemo;
|
|
||||||
gm_mgSplitScreen.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgDemo.mg_strText = TRANS("DEMO");
|
|
||||||
gm_mgDemo.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgDemo.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgDemo.mg_strTip = TRANS("play a game demo");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgDemo.mg_lnNode);
|
|
||||||
gm_mgDemo.mg_pmgUp = &gm_mgSplitScreen;
|
|
||||||
gm_mgDemo.mg_pmgDown = &gm_mgMods;
|
|
||||||
gm_mgDemo.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgMods.mg_strText = TRANS("MODS");
|
|
||||||
gm_mgMods.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgMods.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgMods.mg_strTip = TRANS("run one of installed game modifications");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgMods.mg_lnNode);
|
|
||||||
gm_mgMods.mg_pmgUp = &gm_mgDemo;
|
|
||||||
gm_mgMods.mg_pmgDown = &gm_mgHighScore;
|
|
||||||
gm_mgMods.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgHighScore.mg_strText = TRANS("HIGH SCORES");
|
|
||||||
gm_mgHighScore.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgHighScore.mg_boxOnScreen = BoxBigRow(5.0f);
|
|
||||||
gm_mgHighScore.mg_strTip = TRANS("view list of top ten best scores");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgHighScore.mg_lnNode);
|
|
||||||
gm_mgHighScore.mg_pmgUp = &gm_mgMods;
|
|
||||||
gm_mgHighScore.mg_pmgDown = &gm_mgOptions;
|
|
||||||
gm_mgHighScore.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgOptions.mg_strText = TRANS("OPTIONS");
|
|
||||||
gm_mgOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgOptions.mg_boxOnScreen = BoxBigRow(6.0f);
|
|
||||||
gm_mgOptions.mg_strTip = TRANS("adjust video, audio and input options");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgOptions.mg_lnNode);
|
|
||||||
gm_mgOptions.mg_pmgUp = &gm_mgHighScore;
|
|
||||||
gm_mgOptions.mg_pmgDown = &gm_mgQuit;
|
|
||||||
gm_mgOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgQuit.mg_strText = TRANS("QUIT");
|
|
||||||
gm_mgQuit.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuit.mg_boxOnScreen = BoxBigRow(7.0f);
|
|
||||||
gm_mgQuit.mg_strTip = TRANS("exit game immediately");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuit.mg_lnNode);
|
|
||||||
gm_mgQuit.mg_pmgUp = &gm_mgOptions;
|
|
||||||
gm_mgQuit.mg_pmgDown = &gm_mgSingle;
|
|
||||||
gm_mgQuit.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMainMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_mgSingle.mg_bEnabled = IsMenuEnabled("Single Player");
|
|
||||||
gm_mgNetwork.mg_bEnabled = IsMenuEnabled("Network");
|
|
||||||
gm_mgSplitScreen.mg_bEnabled = IsMenuEnabled("Split Screen");
|
|
||||||
gm_mgHighScore.mg_bEnabled = IsMenuEnabled("High Score");
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_MAIN_H
|
|
||||||
#define SE_INCL_GAME_MENU_MAIN_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMainMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGButton gm_mgVersionLabel;
|
|
||||||
CMGButton gm_mgModLabel;
|
|
||||||
CMGButton gm_mgSingle;
|
|
||||||
CMGButton gm_mgNetwork;
|
|
||||||
CMGButton gm_mgSplitScreen;
|
|
||||||
CMGButton gm_mgDemo;
|
|
||||||
CMGButton gm_mgMods;
|
|
||||||
CMGButton gm_mgHighScore;
|
|
||||||
CMGButton gm_mgOptions;
|
|
||||||
CMGButton gm_mgQuit;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,69 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MNetwork.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CNetworkMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize network menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("NETWORK");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgJoin.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgJoin.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgJoin.mg_pmgUp = &gm_mgLoad;
|
|
||||||
gm_mgJoin.mg_pmgDown = &gm_mgStart;
|
|
||||||
gm_mgJoin.mg_strText = TRANS("JOIN GAME");
|
|
||||||
gm_mgJoin.mg_strTip = TRANS("join a network game");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgJoin.mg_lnNode);
|
|
||||||
gm_mgJoin.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgStart.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgStart.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgStart.mg_pmgUp = &gm_mgJoin;
|
|
||||||
gm_mgStart.mg_pmgDown = &gm_mgQuickLoad;
|
|
||||||
gm_mgStart.mg_strText = TRANS("START SERVER");
|
|
||||||
gm_mgStart.mg_strTip = TRANS("start a network game server");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode);
|
|
||||||
gm_mgStart.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgQuickLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuickLoad.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgQuickLoad.mg_pmgUp = &gm_mgStart;
|
|
||||||
gm_mgQuickLoad.mg_pmgDown = &gm_mgLoad;
|
|
||||||
gm_mgQuickLoad.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gm_mgQuickLoad.mg_strTip = TRANS("load a quick-saved game (F9)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuickLoad.mg_lnNode);
|
|
||||||
gm_mgQuickLoad.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgLoad.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgLoad.mg_pmgUp = &gm_mgQuickLoad;
|
|
||||||
gm_mgLoad.mg_pmgDown = &gm_mgJoin;
|
|
||||||
gm_mgLoad.mg_strText = TRANS("LOAD");
|
|
||||||
gm_mgLoad.mg_strTip = TRANS("start server and load a network game (server only)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLoad.mg_lnNode);
|
|
||||||
gm_mgLoad.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CNetworkMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_NETWORK_H
|
|
||||||
#define SE_INCL_GAME_MENU_NETWORK_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CNetworkMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgJoin;
|
|
||||||
CMGButton gm_mgStart;
|
|
||||||
CMGButton gm_mgQuickLoad;
|
|
||||||
CMGButton gm_mgLoad;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,56 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MNetworkJoin.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CNetworkJoinMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// title
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("JOIN GAME");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgLAN.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgLAN.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgLAN.mg_pmgUp = &gm_mgOpen;
|
|
||||||
gm_mgLAN.mg_pmgDown = &gm_mgNET;
|
|
||||||
gm_mgLAN.mg_strText = TRANS("SEARCH LAN");
|
|
||||||
gm_mgLAN.mg_strTip = TRANS("search local network for servers");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLAN.mg_lnNode);
|
|
||||||
gm_mgLAN.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgNET.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgNET.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgNET.mg_pmgUp = &gm_mgLAN;
|
|
||||||
gm_mgNET.mg_pmgDown = &gm_mgOpen;
|
|
||||||
gm_mgNET.mg_strText = TRANS("SEARCH INTERNET");
|
|
||||||
gm_mgNET.mg_strTip = TRANS("search internet for servers");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNET.mg_lnNode);
|
|
||||||
gm_mgNET.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgOpen.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgOpen.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgOpen.mg_pmgUp = &gm_mgNET;
|
|
||||||
gm_mgOpen.mg_pmgDown = &gm_mgLAN;
|
|
||||||
gm_mgOpen.mg_strText = TRANS("SPECIFY SERVER");
|
|
||||||
gm_mgOpen.mg_strTip = TRANS("type in server address to connect to");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgOpen.mg_lnNode);
|
|
||||||
gm_mgOpen.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_NETWORKJOIN_H
|
|
||||||
#define SE_INCL_GAME_MENU_NETWORKJOIN_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CNetworkJoinMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgLAN;
|
|
||||||
CMGButton gm_mgNET;
|
|
||||||
CMGButton gm_mgOpen;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,79 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MNetworkOpen.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CNetworkOpenMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize network join menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("JOIN");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgAddressLabel.mg_strText = TRANS("Address:");
|
|
||||||
gm_mgAddressLabel.mg_boxOnScreen = BoxMediumLeft(1);
|
|
||||||
gm_mgAddressLabel.mg_iCenterI = -1;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgAddressLabel.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgAddress.mg_strText = _pGame->gam_strJoinAddress;
|
|
||||||
gm_mgAddress.mg_ctMaxStringLen = 20;
|
|
||||||
gm_mgAddress.mg_pstrToChange = &_pGame->gam_strJoinAddress;
|
|
||||||
gm_mgAddress.mg_boxOnScreen = BoxMediumMiddle(1);
|
|
||||||
gm_mgAddress.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgAddress.mg_iCenterI = -1;
|
|
||||||
gm_mgAddress.mg_pmgUp = &gm_mgJoin;
|
|
||||||
gm_mgAddress.mg_pmgDown = &gm_mgPort;
|
|
||||||
gm_mgAddress.mg_strTip = TRANS("specify server address");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgAddress.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgPortLabel.mg_strText = TRANS("Port:");
|
|
||||||
gm_mgPortLabel.mg_boxOnScreen = BoxMediumLeft(2);
|
|
||||||
gm_mgPortLabel.mg_iCenterI = -1;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPortLabel.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgPort.mg_strText = "";
|
|
||||||
gm_mgPort.mg_ctMaxStringLen = 10;
|
|
||||||
gm_mgPort.mg_pstrToChange = &gm_strPort;
|
|
||||||
gm_mgPort.mg_boxOnScreen = BoxMediumMiddle(2);
|
|
||||||
gm_mgPort.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgPort.mg_iCenterI = -1;
|
|
||||||
gm_mgPort.mg_pmgUp = &gm_mgAddress;
|
|
||||||
gm_mgPort.mg_pmgDown = &gm_mgJoin;
|
|
||||||
gm_mgPort.mg_strTip = TRANS("specify server address");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPort.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgJoin.mg_boxOnScreen = BoxMediumMiddle(3);
|
|
||||||
gm_mgJoin.mg_pmgUp = &gm_mgPort;
|
|
||||||
gm_mgJoin.mg_pmgDown = &gm_mgAddress;
|
|
||||||
gm_mgJoin.mg_strText = TRANS("Join");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgJoin.mg_lnNode);
|
|
||||||
gm_mgJoin.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CNetworkOpenMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_strPort = _pShell->GetValue("net_iPort");
|
|
||||||
gm_mgPort.mg_strText = gm_strPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CNetworkOpenMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
_pShell->SetValue("net_iPort", gm_strPort);
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_NETWORKOPEN_H
|
|
||||||
#define SE_INCL_GAME_MENU_NETWORKOPEN_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CNetworkOpenMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CTString gm_strPort;
|
|
||||||
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgAddressLabel;
|
|
||||||
CMGEdit gm_mgAddress;
|
|
||||||
CMGButton gm_mgPortLabel;
|
|
||||||
CMGEdit gm_mgPort;
|
|
||||||
CMGButton gm_mgJoin;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,147 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MNetworkStart.h"
|
|
||||||
|
|
||||||
extern void UpdateNetworkLevel(INDEX iDummy);
|
|
||||||
|
|
||||||
|
|
||||||
void CNetworkStartMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// title
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("START SERVER");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
// session name edit box
|
|
||||||
gm_mgSessionName.mg_strText = _pGame->gam_strSessionName;
|
|
||||||
gm_mgSessionName.mg_strLabel = TRANS("Session name:");
|
|
||||||
gm_mgSessionName.mg_ctMaxStringLen = 25;
|
|
||||||
gm_mgSessionName.mg_pstrToChange = &_pGame->gam_strSessionName;
|
|
||||||
gm_mgSessionName.mg_boxOnScreen = BoxMediumRow(1);
|
|
||||||
gm_mgSessionName.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgSessionName.mg_iCenterI = -1;
|
|
||||||
gm_mgSessionName.mg_pmgUp = &gm_mgStart;
|
|
||||||
gm_mgSessionName.mg_pmgDown = &gm_mgGameType;
|
|
||||||
gm_mgSessionName.mg_strTip = TRANS("name the session to start");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSessionName.mg_lnNode);
|
|
||||||
|
|
||||||
// game type trigger
|
|
||||||
TRIGGER_MG(gm_mgGameType, 2,
|
|
||||||
gm_mgSessionName, gm_mgDifficulty, TRANS("Game type:"), astrGameTypeRadioTexts);
|
|
||||||
gm_mgGameType.mg_ctTexts = ctGameTypeRadioTexts;
|
|
||||||
gm_mgGameType.mg_strTip = TRANS("choose type of multiplayer game");
|
|
||||||
gm_mgGameType.mg_pOnTriggerChange = &UpdateNetworkLevel;
|
|
||||||
|
|
||||||
// difficulty trigger
|
|
||||||
TRIGGER_MG(gm_mgDifficulty, 3,
|
|
||||||
gm_mgGameType, gm_mgLevel, TRANS("Difficulty:"), astrDifficultyRadioTexts);
|
|
||||||
gm_mgDifficulty.mg_strTip = TRANS("choose difficulty level");
|
|
||||||
|
|
||||||
// level name
|
|
||||||
gm_mgLevel.mg_strText = "";
|
|
||||||
gm_mgLevel.mg_strLabel = TRANS("Level:");
|
|
||||||
gm_mgLevel.mg_boxOnScreen = BoxMediumRow(4);
|
|
||||||
gm_mgLevel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgLevel.mg_iCenterI = -1;
|
|
||||||
gm_mgLevel.mg_pmgUp = &gm_mgDifficulty;
|
|
||||||
gm_mgLevel.mg_pmgDown = &gm_mgMaxPlayers;
|
|
||||||
gm_mgLevel.mg_strTip = TRANS("choose the level to start");
|
|
||||||
gm_mgLevel.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLevel.mg_lnNode);
|
|
||||||
|
|
||||||
// max players trigger
|
|
||||||
TRIGGER_MG(gm_mgMaxPlayers, 5,
|
|
||||||
gm_mgLevel, gm_mgWaitAllPlayers, TRANS("Max players:"), astrMaxPlayersRadioTexts);
|
|
||||||
gm_mgMaxPlayers.mg_strTip = TRANS("choose maximum allowed number of players");
|
|
||||||
|
|
||||||
// wait all players trigger
|
|
||||||
TRIGGER_MG(gm_mgWaitAllPlayers, 6,
|
|
||||||
gm_mgMaxPlayers, gm_mgVisible, TRANS("Wait for all players:"), astrNoYes);
|
|
||||||
gm_mgWaitAllPlayers.mg_strTip = TRANS("if on, game won't start until all players have joined");
|
|
||||||
|
|
||||||
// server visible trigger
|
|
||||||
TRIGGER_MG(gm_mgVisible, 7,
|
|
||||||
gm_mgMaxPlayers, gm_mgGameOptions, TRANS("Server visible:"), astrNoYes);
|
|
||||||
gm_mgVisible.mg_strTip = TRANS("invisible servers are not listed, cleints have to join manually");
|
|
||||||
|
|
||||||
// options button
|
|
||||||
gm_mgGameOptions.mg_strText = TRANS("Game options");
|
|
||||||
gm_mgGameOptions.mg_boxOnScreen = BoxMediumRow(8);
|
|
||||||
gm_mgGameOptions.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgGameOptions.mg_iCenterI = 0;
|
|
||||||
gm_mgGameOptions.mg_pmgUp = &gm_mgVisible;
|
|
||||||
gm_mgGameOptions.mg_pmgDown = &gm_mgStart;
|
|
||||||
gm_mgGameOptions.mg_strTip = TRANS("adjust game rules");
|
|
||||||
gm_mgGameOptions.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgGameOptions.mg_lnNode);
|
|
||||||
|
|
||||||
// start button
|
|
||||||
gm_mgStart.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgStart.mg_boxOnScreen = BoxBigRow(7);
|
|
||||||
gm_mgStart.mg_pmgUp = &gm_mgGameOptions;
|
|
||||||
gm_mgStart.mg_pmgDown = &gm_mgSessionName;
|
|
||||||
gm_mgStart.mg_strText = TRANS("START");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode);
|
|
||||||
gm_mgStart.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CNetworkStartMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
extern INDEX sam_bMentalActivated;
|
|
||||||
gm_mgDifficulty.mg_ctTexts = sam_bMentalActivated ? 6 : 5;
|
|
||||||
|
|
||||||
gm_mgGameType.mg_iSelected = Clamp(_pShell->GetINDEX("gam_iStartMode"), 0L, ctGameTypeRadioTexts - 1L);
|
|
||||||
gm_mgGameType.ApplyCurrentSelection();
|
|
||||||
gm_mgDifficulty.mg_iSelected = _pShell->GetINDEX("gam_iStartDifficulty") + 1;
|
|
||||||
gm_mgDifficulty.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
_pShell->SetINDEX("gam_iStartMode", CSessionProperties::GM_COOPERATIVE);
|
|
||||||
|
|
||||||
INDEX ctMaxPlayers = _pShell->GetINDEX("gam_ctMaxPlayers");
|
|
||||||
if (ctMaxPlayers<2 || ctMaxPlayers>16) {
|
|
||||||
ctMaxPlayers = 2;
|
|
||||||
_pShell->SetINDEX("gam_ctMaxPlayers", ctMaxPlayers);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgMaxPlayers.mg_iSelected = ctMaxPlayers - 2;
|
|
||||||
gm_mgMaxPlayers.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgWaitAllPlayers.mg_iSelected = Clamp(_pShell->GetINDEX("gam_bWaitAllPlayers"), 0L, 1L);
|
|
||||||
gm_mgWaitAllPlayers.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgVisible.mg_iSelected = _pShell->GetINDEX("ser_bEnumeration");
|
|
||||||
gm_mgVisible.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
UpdateNetworkLevel(0);
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CNetworkStartMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
_pShell->SetINDEX("gam_iStartDifficulty", gm_mgDifficulty.mg_iSelected - 1);
|
|
||||||
_pShell->SetINDEX("gam_iStartMode", gm_mgGameType.mg_iSelected);
|
|
||||||
_pShell->SetINDEX("gam_bWaitAllPlayers", gm_mgWaitAllPlayers.mg_iSelected);
|
|
||||||
_pShell->SetINDEX("gam_ctMaxPlayers", gm_mgMaxPlayers.mg_iSelected + 2);
|
|
||||||
_pShell->SetINDEX("ser_bEnumeration", gm_mgVisible.mg_iSelected);
|
|
||||||
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_NETWORKSTART_H
|
|
||||||
#define SE_INCL_GAME_MENU_NETWORKSTART_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CNetworkStartMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGEdit gm_mgSessionName;
|
|
||||||
CMGTrigger gm_mgGameType;
|
|
||||||
CMGTrigger gm_mgDifficulty;
|
|
||||||
CMGButton gm_mgLevel;
|
|
||||||
CMGTrigger gm_mgMaxPlayers;
|
|
||||||
CMGTrigger gm_mgWaitAllPlayers;
|
|
||||||
CMGTrigger gm_mgVisible;
|
|
||||||
CMGButton gm_mgGameOptions;
|
|
||||||
CMGButton gm_mgStart;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,82 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MOptions.h"
|
|
||||||
|
|
||||||
|
|
||||||
void COptionsMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize options menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("OPTIONS");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgVideoOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgVideoOptions.mg_boxOnScreen = BoxBigRow(0.0f);
|
|
||||||
gm_mgVideoOptions.mg_pmgUp = &gm_mgAddonOptions;
|
|
||||||
gm_mgVideoOptions.mg_pmgDown = &gm_mgAudioOptions;
|
|
||||||
gm_mgVideoOptions.mg_strText = TRANS("VIDEO OPTIONS");
|
|
||||||
gm_mgVideoOptions.mg_strTip = TRANS("set video mode and driver");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgVideoOptions.mg_lnNode);
|
|
||||||
gm_mgVideoOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgAudioOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgAudioOptions.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgAudioOptions.mg_pmgUp = &gm_mgVideoOptions;
|
|
||||||
gm_mgAudioOptions.mg_pmgDown = &gm_mgPlayerProfileOptions;
|
|
||||||
gm_mgAudioOptions.mg_strText = TRANS("AUDIO OPTIONS");
|
|
||||||
gm_mgAudioOptions.mg_strTip = TRANS("set audio quality and volume");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgAudioOptions.mg_lnNode);
|
|
||||||
gm_mgAudioOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgPlayerProfileOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgPlayerProfileOptions.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgPlayerProfileOptions.mg_pmgUp = &gm_mgAudioOptions;
|
|
||||||
gm_mgPlayerProfileOptions.mg_pmgDown = &gm_mgNetworkOptions;
|
|
||||||
gm_mgPlayerProfileOptions.mg_strText = TRANS("PLAYERS AND CONTROLS");
|
|
||||||
gm_mgPlayerProfileOptions.mg_strTip = TRANS("change currently active player or adjust controls");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayerProfileOptions.mg_lnNode);
|
|
||||||
gm_mgPlayerProfileOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgNetworkOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgNetworkOptions.mg_boxOnScreen = BoxBigRow(3);
|
|
||||||
gm_mgNetworkOptions.mg_pmgUp = &gm_mgPlayerProfileOptions;
|
|
||||||
gm_mgNetworkOptions.mg_pmgDown = &gm_mgCustomOptions;
|
|
||||||
gm_mgNetworkOptions.mg_strText = TRANS("NETWORK CONNECTION");
|
|
||||||
gm_mgNetworkOptions.mg_strTip = TRANS("choose your connection parameters");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNetworkOptions.mg_lnNode);
|
|
||||||
gm_mgNetworkOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgCustomOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgCustomOptions.mg_boxOnScreen = BoxBigRow(4);
|
|
||||||
gm_mgCustomOptions.mg_pmgUp = &gm_mgNetworkOptions;
|
|
||||||
gm_mgCustomOptions.mg_pmgDown = &gm_mgAddonOptions;
|
|
||||||
gm_mgCustomOptions.mg_strText = TRANS("ADVANCED OPTIONS");
|
|
||||||
gm_mgCustomOptions.mg_strTip = TRANS("for advanced users only");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgCustomOptions.mg_lnNode);
|
|
||||||
gm_mgCustomOptions.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgAddonOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgAddonOptions.mg_boxOnScreen = BoxBigRow(5);
|
|
||||||
gm_mgAddonOptions.mg_pmgUp = &gm_mgCustomOptions;
|
|
||||||
gm_mgAddonOptions.mg_pmgDown = &gm_mgVideoOptions;
|
|
||||||
gm_mgAddonOptions.mg_strText = TRANS("EXECUTE ADDON");
|
|
||||||
gm_mgAddonOptions.mg_strTip = TRANS("choose from list of addons to execute");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgAddonOptions.mg_lnNode);
|
|
||||||
gm_mgAddonOptions.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_OPTIONS_H
|
|
||||||
#define SE_INCL_GAME_MENU_OPTIONS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class COptionsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgVideoOptions;
|
|
||||||
CMGButton gm_mgAudioOptions;
|
|
||||||
CMGButton gm_mgPlayerProfileOptions;
|
|
||||||
CMGButton gm_mgNetworkOptions;
|
|
||||||
CMGButton gm_mgCustomOptions;
|
|
||||||
CMGButton gm_mgAddonOptions;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,307 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MPlayerProfile.h"
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuManager.h"
|
|
||||||
|
|
||||||
#define ADD_SELECT_PLAYER_MG( index, mg, mgprev, mgnext, me)\
|
|
||||||
mg.mg_iIndex = index; \
|
|
||||||
mg.mg_bfsFontSize = BFS_MEDIUM; \
|
|
||||||
mg.mg_boxOnScreen = BoxNoUp(index); \
|
|
||||||
mg.mg_bRectangle = TRUE; \
|
|
||||||
mg.mg_pmgLeft = &mgprev; \
|
|
||||||
mg.mg_pmgRight = &mgnext; \
|
|
||||||
mg.mg_pmgUp = &gm_mgCustomizeControls; \
|
|
||||||
mg.mg_pmgDown = &gm_mgNameField; \
|
|
||||||
mg.mg_pActivatedFunction = &PPOnPlayerSelect; \
|
|
||||||
mg.mg_strText = #index; \
|
|
||||||
mg.mg_strTip = TRANS("select new currently active player"); \
|
|
||||||
gm_lhGadgets.AddTail(mg.mg_lnNode);
|
|
||||||
|
|
||||||
extern BOOL _bPlayerMenuFromSinglePlayer;
|
|
||||||
extern CTString _strLastPlayerAppearance;
|
|
||||||
extern void PPOnPlayerSelect(void);
|
|
||||||
|
|
||||||
|
|
||||||
void CPlayerProfileMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize player and controls menu
|
|
||||||
_bPlayerMenuFromSinglePlayer = FALSE;
|
|
||||||
gm_mgProfileTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgProfileTitle.mg_strText = TRANS("PLAYER PROFILE");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgProfileTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgNoLabel.mg_strText = TRANS("PROFILE:");
|
|
||||||
gm_mgNoLabel.mg_boxOnScreen = BoxMediumLeft(0.0f);
|
|
||||||
gm_mgNoLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgNoLabel.mg_iCenterI = -1;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNoLabel.mg_lnNode);
|
|
||||||
|
|
||||||
ADD_SELECT_PLAYER_MG(0, gm_mgNumber[0], gm_mgNumber[7], gm_mgNumber[1], gm_mgNumber[0]);
|
|
||||||
ADD_SELECT_PLAYER_MG(1, gm_mgNumber[1], gm_mgNumber[0], gm_mgNumber[2], gm_mgNumber[1]);
|
|
||||||
ADD_SELECT_PLAYER_MG(2, gm_mgNumber[2], gm_mgNumber[1], gm_mgNumber[3], gm_mgNumber[2]);
|
|
||||||
ADD_SELECT_PLAYER_MG(3, gm_mgNumber[3], gm_mgNumber[2], gm_mgNumber[4], gm_mgNumber[3]);
|
|
||||||
ADD_SELECT_PLAYER_MG(4, gm_mgNumber[4], gm_mgNumber[3], gm_mgNumber[5], gm_mgNumber[4]);
|
|
||||||
ADD_SELECT_PLAYER_MG(5, gm_mgNumber[5], gm_mgNumber[4], gm_mgNumber[6], gm_mgNumber[5]);
|
|
||||||
ADD_SELECT_PLAYER_MG(6, gm_mgNumber[6], gm_mgNumber[5], gm_mgNumber[7], gm_mgNumber[6]);
|
|
||||||
ADD_SELECT_PLAYER_MG(7, gm_mgNumber[7], gm_mgNumber[6], gm_mgNumber[0], gm_mgNumber[7]);
|
|
||||||
gm_mgNumber[7].mg_pmgRight = &gm_mgModel;
|
|
||||||
|
|
||||||
gm_mgNameLabel.mg_strText = TRANS("NAME:");
|
|
||||||
gm_mgNameLabel.mg_boxOnScreen = BoxMediumLeft(1.25f);
|
|
||||||
gm_mgNameLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgNameLabel.mg_iCenterI = -1;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNameLabel.mg_lnNode);
|
|
||||||
|
|
||||||
// setup of player name button is done on start menu
|
|
||||||
gm_mgNameField.mg_strText = "<\?\?\?>";
|
|
||||||
gm_mgNameField.mg_ctMaxStringLen = 25;
|
|
||||||
gm_mgNameField.mg_boxOnScreen = BoxPlayerEdit(1.25);
|
|
||||||
gm_mgNameField.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgNameField.mg_iCenterI = -1;
|
|
||||||
gm_mgNameField.mg_pmgUp = &gm_mgNumber[0];
|
|
||||||
gm_mgNameField.mg_pmgDown = &gm_mgTeam;
|
|
||||||
gm_mgNameField.mg_pmgRight = &gm_mgModel;
|
|
||||||
gm_mgNameField.mg_strTip = TRANS("rename currently active player");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNameField.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgTeamLabel.mg_strText = TRANS("TEAM:");
|
|
||||||
gm_mgTeamLabel.mg_boxOnScreen = BoxMediumLeft(2.25f);
|
|
||||||
gm_mgTeamLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgTeamLabel.mg_iCenterI = -1;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTeamLabel.mg_lnNode);
|
|
||||||
|
|
||||||
// setup of player name button is done on start menu
|
|
||||||
gm_mgTeam.mg_strText = "<\?\?\?>";
|
|
||||||
gm_mgTeam.mg_ctMaxStringLen = 25;
|
|
||||||
gm_mgTeam.mg_boxOnScreen = BoxPlayerEdit(2.25f);
|
|
||||||
gm_mgTeam.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgTeam.mg_iCenterI = -1;
|
|
||||||
gm_mgTeam.mg_pmgUp = gm_mgNameField.mg_pmgUp = &gm_mgNumber[0];
|
|
||||||
|
|
||||||
gm_mgTeam.mg_pmgDown = &gm_mgCrosshair;
|
|
||||||
gm_mgTeam.mg_pmgRight = &gm_mgModel;
|
|
||||||
//gm_mgTeam.mg_strTip = TRANS("teamplay is disabled in this version");
|
|
||||||
gm_mgTeam.mg_strTip = TRANS("enter team name, if playing in team");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTeam.mg_lnNode);
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgCrosshair, 4.0, gm_mgTeam, gm_mgWeaponSelect, TRANS("CROSSHAIR"), astrCrosshair);
|
|
||||||
gm_mgCrosshair.mg_bVisual = TRUE;
|
|
||||||
gm_mgCrosshair.mg_boxOnScreen = BoxPlayerSwitch(5.0f);
|
|
||||||
gm_mgCrosshair.mg_iCenterI = -1;
|
|
||||||
gm_mgCrosshair.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgWeaponSelect, 4.0, gm_mgCrosshair, gm_mgWeaponHide, TRANS("AUTO SELECT WEAPON"), astrWeapon);
|
|
||||||
gm_mgWeaponSelect.mg_boxOnScreen = BoxPlayerSwitch(6.0f);
|
|
||||||
gm_mgWeaponSelect.mg_iCenterI = -1;
|
|
||||||
gm_mgWeaponSelect.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgWeaponHide, 4.0, gm_mgWeaponSelect, gm_mg3rdPerson, TRANS("HIDE WEAPON MODEL"), astrNoYes);
|
|
||||||
gm_mgWeaponHide.mg_boxOnScreen = BoxPlayerSwitch(7.0f);
|
|
||||||
gm_mgWeaponHide.mg_iCenterI = -1;
|
|
||||||
gm_mgWeaponHide.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mg3rdPerson, 4.0, gm_mgWeaponHide, gm_mgQuotes, TRANS("PREFER 3RD PERSON VIEW"), astrNoYes);
|
|
||||||
gm_mg3rdPerson.mg_boxOnScreen = BoxPlayerSwitch(8.0f);
|
|
||||||
gm_mg3rdPerson.mg_iCenterI = -1;
|
|
||||||
gm_mg3rdPerson.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgQuotes, 4.0, gm_mg3rdPerson, gm_mgAutoSave, TRANS("VOICE QUOTES"), astrNoYes);
|
|
||||||
gm_mgQuotes.mg_boxOnScreen = BoxPlayerSwitch(9.0f);
|
|
||||||
gm_mgQuotes.mg_iCenterI = -1;
|
|
||||||
gm_mgQuotes.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgAutoSave, 4.0, gm_mgQuotes, gm_mgCompDoubleClick, TRANS("AUTO SAVE"), astrNoYes);
|
|
||||||
gm_mgAutoSave.mg_boxOnScreen = BoxPlayerSwitch(10.0f);
|
|
||||||
gm_mgAutoSave.mg_iCenterI = -1;
|
|
||||||
gm_mgAutoSave.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgCompDoubleClick, 4.0, gm_mgAutoSave, gm_mgSharpTurning, TRANS("INVOKE COMPUTER"), astrComputerInvoke);
|
|
||||||
gm_mgCompDoubleClick.mg_boxOnScreen = BoxPlayerSwitch(11.0f);
|
|
||||||
gm_mgCompDoubleClick.mg_iCenterI = -1;
|
|
||||||
gm_mgCompDoubleClick.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgSharpTurning, 4.0, gm_mgCompDoubleClick, gm_mgViewBobbing, TRANS("SHARP TURNING"), astrNoYes);
|
|
||||||
gm_mgSharpTurning.mg_boxOnScreen = BoxPlayerSwitch(12.0f);
|
|
||||||
gm_mgSharpTurning.mg_iCenterI = -1;
|
|
||||||
gm_mgSharpTurning.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgViewBobbing, 4.0, gm_mgSharpTurning, gm_mgCustomizeControls, TRANS("VIEW BOBBING"), astrNoYes);
|
|
||||||
gm_mgViewBobbing.mg_boxOnScreen = BoxPlayerSwitch(13.0f);
|
|
||||||
gm_mgViewBobbing.mg_iCenterI = -1;
|
|
||||||
gm_mgViewBobbing.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
gm_mgCustomizeControls.mg_strText = TRANS("CUSTOMIZE CONTROLS");
|
|
||||||
gm_mgCustomizeControls.mg_boxOnScreen = BoxMediumLeft(14.5f);
|
|
||||||
gm_mgCustomizeControls.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgCustomizeControls.mg_iCenterI = -1;
|
|
||||||
gm_mgCustomizeControls.mg_pmgUp = &gm_mgViewBobbing;
|
|
||||||
gm_mgCustomizeControls.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgCustomizeControls.mg_pmgDown = &gm_mgNumber[0];
|
|
||||||
gm_mgCustomizeControls.mg_pmgRight = &gm_mgModel;
|
|
||||||
gm_mgCustomizeControls.mg_strTip = TRANS("customize controls for this player");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgCustomizeControls.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgModel.mg_boxOnScreen = BoxPlayerModel();
|
|
||||||
gm_mgModel.mg_pmgLeft = &gm_mgNameField;
|
|
||||||
gm_mgModel.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgModel.mg_pmgDown = &gm_mgNameField;
|
|
||||||
gm_mgModel.mg_pmgLeft = &gm_mgNameField;
|
|
||||||
gm_mgModel.mg_strTip = TRANS("change model for this player");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgModel.mg_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
INDEX CPlayerProfileMenu::ComboFromPlayer(INDEX iPlayer)
|
|
||||||
{
|
|
||||||
return iPlayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
INDEX CPlayerProfileMenu::PlayerFromCombo(INDEX iCombo)
|
|
||||||
{
|
|
||||||
return iCombo;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayerProfileMenu::SelectPlayer(INDEX iPlayer)
|
|
||||||
{
|
|
||||||
CPlayerCharacter &pc = _pGame->gm_apcPlayers[iPlayer];
|
|
||||||
|
|
||||||
for (INDEX iPl = 0; iPl<8; iPl++)
|
|
||||||
{
|
|
||||||
gm_mgNumber[iPl].mg_bHighlighted = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgNumber[iPlayer].mg_bHighlighted = TRUE;
|
|
||||||
|
|
||||||
iPlayer = Clamp(iPlayer, INDEX(0), INDEX(7));
|
|
||||||
|
|
||||||
if (_iLocalPlayer >= 0 && _iLocalPlayer<4) {
|
|
||||||
_pGame->gm_aiMenuLocalPlayers[_iLocalPlayer] = iPlayer;
|
|
||||||
} else {
|
|
||||||
_pGame->gm_iSinglePlayer = iPlayer;
|
|
||||||
}
|
|
||||||
gm_mgNameField.mg_pstrToChange = &pc.pc_strName;
|
|
||||||
gm_mgNameField.SetText(*gm_mgNameField.mg_pstrToChange);
|
|
||||||
gm_mgTeam.mg_pstrToChange = &pc.pc_strTeam;
|
|
||||||
gm_mgTeam.SetText(*gm_mgTeam.mg_pstrToChange);
|
|
||||||
|
|
||||||
CPlayerSettings *pps = (CPlayerSettings *)pc.pc_aubAppearance;
|
|
||||||
|
|
||||||
gm_mgCrosshair.mg_iSelected = pps->ps_iCrossHairType + 1;
|
|
||||||
gm_mgCrosshair.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgWeaponSelect.mg_iSelected = pps->ps_iWeaponAutoSelect;
|
|
||||||
gm_mgWeaponSelect.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgWeaponHide.mg_iSelected = (pps->ps_ulFlags&PSF_HIDEWEAPON) ? 1 : 0;
|
|
||||||
gm_mgWeaponHide.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mg3rdPerson.mg_iSelected = (pps->ps_ulFlags&PSF_PREFER3RDPERSON) ? 1 : 0;
|
|
||||||
gm_mg3rdPerson.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgQuotes.mg_iSelected = (pps->ps_ulFlags&PSF_NOQUOTES) ? 0 : 1;
|
|
||||||
gm_mgQuotes.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgAutoSave.mg_iSelected = (pps->ps_ulFlags&PSF_AUTOSAVE) ? 1 : 0;
|
|
||||||
gm_mgAutoSave.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgCompDoubleClick.mg_iSelected = (pps->ps_ulFlags&PSF_COMPSINGLECLICK) ? 0 : 1;
|
|
||||||
gm_mgCompDoubleClick.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgViewBobbing.mg_iSelected = (pps->ps_ulFlags&PSF_NOBOBBING) ? 0 : 1;
|
|
||||||
gm_mgViewBobbing.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
gm_mgSharpTurning.mg_iSelected = (pps->ps_ulFlags&PSF_SHARPTURNING) ? 1 : 0;
|
|
||||||
gm_mgSharpTurning.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
// get function that will set player appearance
|
|
||||||
CShellSymbol *pss = _pShell->GetSymbol("SetPlayerAppearance", /*bDeclaredOnly=*/ TRUE);
|
|
||||||
// if none
|
|
||||||
if (pss == NULL) {
|
|
||||||
// no model
|
|
||||||
gm_mgModel.mg_moModel.SetData(NULL);
|
|
||||||
// if there is some
|
|
||||||
} else {
|
|
||||||
// set the model
|
|
||||||
BOOL(*pFunc)(CModelObject *, CPlayerCharacter *, CTString &, BOOL) =
|
|
||||||
(BOOL(*)(CModelObject *, CPlayerCharacter *, CTString &, BOOL))pss->ss_pvValue;
|
|
||||||
CTString strName;
|
|
||||||
BOOL bSet;
|
|
||||||
if (_gmRunningGameMode != GM_SINGLE_PLAYER && !_bPlayerMenuFromSinglePlayer) {
|
|
||||||
bSet = pFunc(&gm_mgModel.mg_moModel, &pc, strName, TRUE);
|
|
||||||
gm_mgModel.mg_strTip = TRANS("change model for this player");
|
|
||||||
gm_mgModel.mg_bEnabled = TRUE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// cannot change player appearance in single player mode
|
|
||||||
bSet = pFunc(&gm_mgModel.mg_moModel, NULL, strName, TRUE);
|
|
||||||
gm_mgModel.mg_strTip = TRANS("cannot change model for single-player game");
|
|
||||||
gm_mgModel.mg_bEnabled = FALSE;
|
|
||||||
}
|
|
||||||
// ignore gender flags, if any
|
|
||||||
strName.RemovePrefix("#female#");
|
|
||||||
strName.RemovePrefix("#male#");
|
|
||||||
gm_mgModel.mg_plModel = CPlacement3D(FLOAT3D(0.1f, -1.0f, -3.5f), ANGLE3D(150, 0, 0));
|
|
||||||
gm_mgModel.mg_strText = strName;
|
|
||||||
CPlayerSettings *pps = (CPlayerSettings *)pc.pc_aubAppearance;
|
|
||||||
_strLastPlayerAppearance = pps->GetModelFilename();
|
|
||||||
try {
|
|
||||||
gm_mgModel.mg_moFloor.SetData_t(CTFILENAME("Models\\Computer\\Floor.mdl"));
|
|
||||||
gm_mgModel.mg_moFloor.mo_toTexture.SetData_t(CTFILENAME("Models\\Computer\\Floor.tex"));
|
|
||||||
}
|
|
||||||
catch (char *strError) {
|
|
||||||
(void)strError;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayerProfileMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmPlayerProfile.gm_pmgSelectedByDefault = &gm_mgNameField;
|
|
||||||
|
|
||||||
if (_gmRunningGameMode == GM_NONE || _gmRunningGameMode == GM_DEMO) {
|
|
||||||
for (INDEX i = 0; i<8; i++) {
|
|
||||||
gm_mgNumber[i].mg_bEnabled = TRUE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (INDEX i = 0; i<8; i++) {
|
|
||||||
gm_mgNumber[i].mg_bEnabled = FALSE;
|
|
||||||
}
|
|
||||||
INDEX iFirstEnabled = 0;
|
|
||||||
{for (INDEX ilp = 0; ilp<4; ilp++) {
|
|
||||||
CLocalPlayer &lp = _pGame->gm_lpLocalPlayers[ilp];
|
|
||||||
if (lp.lp_bActive) {
|
|
||||||
gm_mgNumber[lp.lp_iPlayer].mg_bEnabled = TRUE;
|
|
||||||
if (iFirstEnabled == 0) {
|
|
||||||
iFirstEnabled = lp.lp_iPlayer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
// backup to first player in case current player is disabled
|
|
||||||
if (!gm_mgNumber[*gm_piCurrentPlayer].mg_bEnabled) *gm_piCurrentPlayer = iFirstEnabled;
|
|
||||||
}
|
|
||||||
// done
|
|
||||||
SelectPlayer(*gm_piCurrentPlayer);
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPlayerProfileMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
_pGame->SavePlayersAndControls();
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_PLAYERPROFILE_H
|
|
||||||
#define SE_INCL_GAME_MENU_PLAYERPROFILE_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGModel.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CPlayerProfileMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
INDEX *gm_piCurrentPlayer;
|
|
||||||
|
|
||||||
CMGTitle gm_mgProfileTitle;
|
|
||||||
CMGButton gm_mgNoLabel;
|
|
||||||
CMGButton gm_mgNumber[8];
|
|
||||||
CMGButton gm_mgNameLabel;
|
|
||||||
CMGEdit gm_mgNameField;
|
|
||||||
CMGButton gm_mgTeamLabel;
|
|
||||||
CMGEdit gm_mgTeam;
|
|
||||||
CMGButton gm_mgCustomizeControls;
|
|
||||||
CMGTrigger gm_mgCrosshair;
|
|
||||||
CMGTrigger gm_mgWeaponSelect;
|
|
||||||
CMGTrigger gm_mgWeaponHide;
|
|
||||||
CMGTrigger gm_mg3rdPerson;
|
|
||||||
CMGTrigger gm_mgQuotes;
|
|
||||||
CMGTrigger gm_mgAutoSave;
|
|
||||||
CMGTrigger gm_mgCompDoubleClick;
|
|
||||||
CMGTrigger gm_mgViewBobbing;
|
|
||||||
CMGTrigger gm_mgSharpTurning;
|
|
||||||
CMGModel gm_mgModel;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
INDEX ComboFromPlayer(INDEX iPlayer);
|
|
||||||
INDEX PlayerFromCombo(INDEX iCombo);
|
|
||||||
void SelectPlayer(INDEX iPlayer);
|
|
||||||
void ApplyComboPlayer(INDEX iPlayer);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,31 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_RENDERINGOPTIONS_H
|
|
||||||
#define SE_INCL_GAME_MENU_RENDERINGOPTIONS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CRenderingOptionsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,118 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MSelectPlayers.h"
|
|
||||||
|
|
||||||
#define ADD_GADGET( gd, box, up, dn, lf, rt, txt) \
|
|
||||||
gd.mg_boxOnScreen = box; \
|
|
||||||
gd.mg_pmgUp = up; \
|
|
||||||
gd.mg_pmgDown = dn; \
|
|
||||||
gd.mg_pmgLeft = lf; \
|
|
||||||
gd.mg_pmgRight = rt; \
|
|
||||||
gd.mg_strText = txt; \
|
|
||||||
gm_lhGadgets.AddTail(gd.mg_lnNode);
|
|
||||||
|
|
||||||
extern CTString astrNoYes[2];
|
|
||||||
extern CTString astrSplitScreenRadioTexts[4];
|
|
||||||
extern void SelectPlayersFillMenu(void);
|
|
||||||
extern void SelectPlayersApplyMenu(void);
|
|
||||||
|
|
||||||
void CSelectPlayersMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize split screen menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("SELECT PLAYERS");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgDedicated, 0, gm_mgStart, gm_mgObserver, TRANS("Dedicated:"), astrNoYes);
|
|
||||||
gm_mgDedicated.mg_strTip = TRANS("select to start dedicated server");
|
|
||||||
gm_mgDedicated.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgObserver, 1, gm_mgDedicated, gm_mgSplitScreenCfg, TRANS("Observer:"), astrNoYes);
|
|
||||||
gm_mgObserver.mg_strTip = TRANS("select to join in for observing, not for playing");
|
|
||||||
gm_mgObserver.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
// split screen config trigger
|
|
||||||
TRIGGER_MG(gm_mgSplitScreenCfg, 2, gm_mgObserver, gm_mgPlayer0Change, TRANS("Number of players:"), astrSplitScreenRadioTexts);
|
|
||||||
gm_mgSplitScreenCfg.mg_strTip = TRANS("choose more than one player to play in split screen");
|
|
||||||
gm_mgSplitScreenCfg.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
gm_mgPlayer0Change.mg_iCenterI = -1;
|
|
||||||
gm_mgPlayer1Change.mg_iCenterI = -1;
|
|
||||||
gm_mgPlayer2Change.mg_iCenterI = -1;
|
|
||||||
gm_mgPlayer3Change.mg_iCenterI = -1;
|
|
||||||
gm_mgPlayer0Change.mg_boxOnScreen = BoxMediumMiddle(4);
|
|
||||||
gm_mgPlayer1Change.mg_boxOnScreen = BoxMediumMiddle(5);
|
|
||||||
gm_mgPlayer2Change.mg_boxOnScreen = BoxMediumMiddle(6);
|
|
||||||
gm_mgPlayer3Change.mg_boxOnScreen = BoxMediumMiddle(7);
|
|
||||||
gm_mgPlayer0Change.mg_strTip =
|
|
||||||
gm_mgPlayer1Change.mg_strTip =
|
|
||||||
gm_mgPlayer2Change.mg_strTip =
|
|
||||||
gm_mgPlayer3Change.mg_strTip = TRANS("select profile for this player");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayer0Change.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayer1Change.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayer2Change.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayer3Change.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgNotes.mg_boxOnScreen = BoxMediumRow(9.0);
|
|
||||||
gm_mgNotes.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgNotes.mg_iCenterI = -1;
|
|
||||||
gm_mgNotes.mg_bEnabled = FALSE;
|
|
||||||
gm_mgNotes.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNotes.mg_lnNode);
|
|
||||||
gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
/* // options button
|
|
||||||
mgSplitOptions.mg_strText = TRANS("Game options");
|
|
||||||
mgSplitOptions.mg_boxOnScreen = BoxMediumRow(3);
|
|
||||||
mgSplitOptions.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
mgSplitOptions.mg_iCenterI = 0;
|
|
||||||
mgSplitOptions.mg_pmgUp = &mgSplitLevel;
|
|
||||||
mgSplitOptions.mg_pmgDown = &mgSplitStartStart;
|
|
||||||
mgSplitOptions.mg_strTip = TRANS("adjust game rules");
|
|
||||||
mgSplitOptions.mg_pActivatedFunction = &StartGameOptionsFromSplitScreen;
|
|
||||||
gm_lhGadgets.AddTail( mgSplitOptions.mg_lnNode);*/
|
|
||||||
|
|
||||||
/* // start button
|
|
||||||
mgSplitStartStart.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
mgSplitStartStart.mg_boxOnScreen = BoxBigRow(4);
|
|
||||||
mgSplitStartStart.mg_pmgUp = &mgSplitOptions;
|
|
||||||
mgSplitStartStart.mg_pmgDown = &mgSplitGameType;
|
|
||||||
mgSplitStartStart.mg_strText = TRANS("START");
|
|
||||||
gm_lhGadgets.AddTail( mgSplitStartStart.mg_lnNode);
|
|
||||||
mgSplitStartStart.mg_pActivatedFunction = &StartSelectPlayersMenuFromSplit;
|
|
||||||
*/
|
|
||||||
|
|
||||||
ADD_GADGET(gm_mgStart, BoxMediumRow(11), &gm_mgSplitScreenCfg, &gm_mgPlayer0Change, NULL, NULL, TRANS("START"));
|
|
||||||
gm_mgStart.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgStart.mg_iCenterI = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSelectPlayersMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
SelectPlayersFillMenu();
|
|
||||||
SelectPlayersApplyMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSelectPlayersMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
SelectPlayersApplyMenu();
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_SELECTPLAYERS_H
|
|
||||||
#define SE_INCL_GAME_MENU_SELECTPLAYERS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGChangePlayer.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CSelectPlayersMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
BOOL gm_bAllowDedicated;
|
|
||||||
BOOL gm_bAllowObserving;
|
|
||||||
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
|
|
||||||
CMGTrigger gm_mgDedicated;
|
|
||||||
CMGTrigger gm_mgObserver;
|
|
||||||
CMGTrigger gm_mgSplitScreenCfg;
|
|
||||||
|
|
||||||
CMGChangePlayer gm_mgPlayer0Change;
|
|
||||||
CMGChangePlayer gm_mgPlayer1Change;
|
|
||||||
CMGChangePlayer gm_mgPlayer2Change;
|
|
||||||
CMGChangePlayer gm_mgPlayer3Change;
|
|
||||||
|
|
||||||
CMGButton gm_mgNotes;
|
|
||||||
|
|
||||||
CMGButton gm_mgStart;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,110 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MServers.h"
|
|
||||||
|
|
||||||
CTString _strServerFilter[7];
|
|
||||||
CMGButton mgServerColumn[7];
|
|
||||||
CMGEdit mgServerFilter[7];
|
|
||||||
|
|
||||||
void CServersMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("CHOOSE SERVER");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgList.mg_boxOnScreen = FLOATaabbox2D(FLOAT2D(0, 0), FLOAT2D(1, 1));
|
|
||||||
gm_mgList.mg_pmgLeft = &gm_mgList; // make sure it can get focus
|
|
||||||
gm_mgList.mg_bEnabled = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgList.mg_lnNode);
|
|
||||||
|
|
||||||
ASSERT(ARRAYCOUNT(mgServerColumn) == ARRAYCOUNT(mgServerFilter));
|
|
||||||
for (INDEX i = 0; i<ARRAYCOUNT(mgServerFilter); i++) {
|
|
||||||
mgServerColumn[i].mg_strText = "";
|
|
||||||
mgServerColumn[i].mg_boxOnScreen = BoxPlayerEdit(5.0);
|
|
||||||
mgServerColumn[i].mg_bfsFontSize = BFS_SMALL;
|
|
||||||
mgServerColumn[i].mg_iCenterI = -1;
|
|
||||||
mgServerColumn[i].mg_pmgUp = &gm_mgList;
|
|
||||||
mgServerColumn[i].mg_pmgDown = &mgServerFilter[i];
|
|
||||||
gm_lhGadgets.AddTail(mgServerColumn[i].mg_lnNode);
|
|
||||||
|
|
||||||
mgServerFilter[i].mg_ctMaxStringLen = 25;
|
|
||||||
mgServerFilter[i].mg_boxOnScreen = BoxPlayerEdit(5.0);
|
|
||||||
mgServerFilter[i].mg_bfsFontSize = BFS_SMALL;
|
|
||||||
mgServerFilter[i].mg_iCenterI = -1;
|
|
||||||
mgServerFilter[i].mg_pmgUp = &mgServerColumn[i];
|
|
||||||
mgServerFilter[i].mg_pmgDown = &gm_mgList;
|
|
||||||
gm_lhGadgets.AddTail(mgServerFilter[i].mg_lnNode);
|
|
||||||
mgServerFilter[i].mg_pstrToChange = &_strServerFilter[i];
|
|
||||||
mgServerFilter[i].SetText(*mgServerFilter[i].mg_pstrToChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgRefresh.mg_strText = TRANS("REFRESH");
|
|
||||||
gm_mgRefresh.mg_boxOnScreen = BoxLeftColumn(15.0);
|
|
||||||
gm_mgRefresh.mg_bfsFontSize = BFS_SMALL;
|
|
||||||
gm_mgRefresh.mg_iCenterI = -1;
|
|
||||||
gm_mgRefresh.mg_pmgDown = &gm_mgList;
|
|
||||||
gm_mgRefresh.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgRefresh.mg_lnNode);
|
|
||||||
|
|
||||||
CTString astrColumns[7];
|
|
||||||
mgServerColumn[0].mg_strText = TRANS("Server");
|
|
||||||
mgServerColumn[1].mg_strText = TRANS("Map");
|
|
||||||
mgServerColumn[2].mg_strText = TRANS("Ping");
|
|
||||||
mgServerColumn[3].mg_strText = TRANS("Players");
|
|
||||||
mgServerColumn[4].mg_strText = TRANS("Game");
|
|
||||||
mgServerColumn[5].mg_strText = TRANS("Mod");
|
|
||||||
mgServerColumn[6].mg_strText = TRANS("Ver");
|
|
||||||
mgServerColumn[0].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[1].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[2].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[3].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[4].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[5].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[6].mg_pActivatedFunction = NULL;
|
|
||||||
mgServerColumn[0].mg_strTip = TRANS("sort by server");
|
|
||||||
mgServerColumn[1].mg_strTip = TRANS("sort by map");
|
|
||||||
mgServerColumn[2].mg_strTip = TRANS("sort by ping");
|
|
||||||
mgServerColumn[3].mg_strTip = TRANS("sort by players");
|
|
||||||
mgServerColumn[4].mg_strTip = TRANS("sort by game");
|
|
||||||
mgServerColumn[5].mg_strTip = TRANS("sort by mod");
|
|
||||||
mgServerColumn[6].mg_strTip = TRANS("sort by version");
|
|
||||||
mgServerFilter[0].mg_strTip = TRANS("filter by server");
|
|
||||||
mgServerFilter[1].mg_strTip = TRANS("filter by map");
|
|
||||||
mgServerFilter[2].mg_strTip = TRANS("filter by ping (ie. <200)");
|
|
||||||
mgServerFilter[3].mg_strTip = TRANS("filter by players (ie. >=2)");
|
|
||||||
mgServerFilter[4].mg_strTip = TRANS("filter by game (ie. coop)");
|
|
||||||
mgServerFilter[5].mg_strTip = TRANS("filter by mod");
|
|
||||||
mgServerFilter[6].mg_strTip = TRANS("filter by version");
|
|
||||||
}
|
|
||||||
|
|
||||||
void CServersMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
extern void RefreshServerList(void);
|
|
||||||
RefreshServerList();
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CServersMenu::Think(void)
|
|
||||||
{
|
|
||||||
if (!_pNetwork->ga_bEnumerationChange) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_pNetwork->ga_bEnumerationChange = FALSE;
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_SERVERS_H
|
|
||||||
#define SE_INCL_GAME_MENU_SERVERS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGEdit.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGServerList.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CServersMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
BOOL m_bInternet;
|
|
||||||
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGServerList gm_mgList;
|
|
||||||
CMGButton gm_mgRefresh;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void Think(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,156 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MSinglePlayer.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CSinglePlayerMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize single player menu
|
|
||||||
gm_mgTitle.mg_strText = TRANS("SINGLE PLAYER");
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgPlayerLabel.mg_boxOnScreen = BoxBigRow(-1.0f);
|
|
||||||
gm_mgPlayerLabel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgPlayerLabel.mg_iCenterI = -1;
|
|
||||||
gm_mgPlayerLabel.mg_bEnabled = FALSE;
|
|
||||||
gm_mgPlayerLabel.mg_bLabel = TRUE;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayerLabel.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgNewGame.mg_strText = TRANS("NEW GAME");
|
|
||||||
gm_mgNewGame.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgNewGame.mg_boxOnScreen = BoxBigRow(0.0f);
|
|
||||||
gm_mgNewGame.mg_strTip = TRANS("start new game with current player");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgNewGame.mg_lnNode);
|
|
||||||
gm_mgNewGame.mg_pmgUp = &gm_mgOptions;
|
|
||||||
gm_mgNewGame.mg_pmgDown = &gm_mgCustom;
|
|
||||||
gm_mgNewGame.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgCustom.mg_strText = TRANS("CUSTOM LEVEL");
|
|
||||||
gm_mgCustom.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgCustom.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgCustom.mg_strTip = TRANS("start new game on a custom level");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgCustom.mg_lnNode);
|
|
||||||
gm_mgCustom.mg_pmgUp = &gm_mgNewGame;
|
|
||||||
gm_mgCustom.mg_pmgDown = &gm_mgQuickLoad;
|
|
||||||
gm_mgCustom.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgQuickLoad.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gm_mgQuickLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuickLoad.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgQuickLoad.mg_strTip = TRANS("load a quick-saved game (F9)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuickLoad.mg_lnNode);
|
|
||||||
gm_mgQuickLoad.mg_pmgUp = &gm_mgCustom;
|
|
||||||
gm_mgQuickLoad.mg_pmgDown = &gm_mgLoad;
|
|
||||||
gm_mgQuickLoad.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgLoad.mg_strText = TRANS("LOAD");
|
|
||||||
gm_mgLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgLoad.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgLoad.mg_strTip = TRANS("load a saved game of current player");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLoad.mg_lnNode);
|
|
||||||
gm_mgLoad.mg_pmgUp = &gm_mgQuickLoad;
|
|
||||||
gm_mgLoad.mg_pmgDown = &gm_mgTraining;
|
|
||||||
gm_mgLoad.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgTraining.mg_strText = TRANS("TRAINING");
|
|
||||||
gm_mgTraining.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgTraining.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgTraining.mg_strTip = TRANS("start training level - KarnakDemo");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTraining.mg_lnNode);
|
|
||||||
gm_mgTraining.mg_pmgUp = &gm_mgLoad;
|
|
||||||
gm_mgTraining.mg_pmgDown = &gm_mgTechTest;
|
|
||||||
gm_mgTraining.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgTechTest.mg_strText = TRANS("TECHNOLOGY TEST");
|
|
||||||
gm_mgTechTest.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgTechTest.mg_boxOnScreen = BoxBigRow(5.0f);
|
|
||||||
gm_mgTechTest.mg_strTip = TRANS("start technology testing level");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTechTest.mg_lnNode);
|
|
||||||
gm_mgTechTest.mg_pmgUp = &gm_mgTraining;
|
|
||||||
gm_mgTechTest.mg_pmgDown = &gm_mgPlayersAndControls;
|
|
||||||
gm_mgTechTest.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgPlayersAndControls.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgPlayersAndControls.mg_boxOnScreen = BoxBigRow(6.0f);
|
|
||||||
gm_mgPlayersAndControls.mg_pmgUp = &gm_mgTechTest;
|
|
||||||
gm_mgPlayersAndControls.mg_pmgDown = &gm_mgOptions;
|
|
||||||
gm_mgPlayersAndControls.mg_strText = TRANS("PLAYERS AND CONTROLS");
|
|
||||||
gm_mgPlayersAndControls.mg_strTip = TRANS("change currently active player or adjust controls");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgPlayersAndControls.mg_lnNode);
|
|
||||||
gm_mgPlayersAndControls.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgOptions.mg_strText = TRANS("GAME OPTIONS");
|
|
||||||
gm_mgOptions.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgOptions.mg_boxOnScreen = BoxBigRow(7.0f);
|
|
||||||
gm_mgOptions.mg_strTip = TRANS("adjust miscellaneous game options");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgOptions.mg_lnNode);
|
|
||||||
gm_mgOptions.mg_pmgUp = &gm_mgPlayersAndControls;
|
|
||||||
gm_mgOptions.mg_pmgDown = &gm_mgNewGame;
|
|
||||||
gm_mgOptions.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSinglePlayerMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
gm_mgTraining.mg_bEnabled = IsMenuEnabled("Training");
|
|
||||||
gm_mgTechTest.mg_bEnabled = IsMenuEnabled("Technology Test");
|
|
||||||
|
|
||||||
if (gm_mgTraining.mg_bEnabled) {
|
|
||||||
if (!gm_mgTraining.mg_lnNode.IsLinked()) {
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTraining.mg_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgLoad.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgLoad.mg_pmgUp = &gm_mgQuickLoad;
|
|
||||||
gm_mgLoad.mg_pmgDown = &gm_mgTraining;
|
|
||||||
|
|
||||||
gm_mgTraining.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgTraining.mg_pmgUp = &gm_mgLoad;
|
|
||||||
gm_mgTraining.mg_pmgDown = &gm_mgTechTest;
|
|
||||||
|
|
||||||
gm_mgTechTest.mg_boxOnScreen = BoxBigRow(5.0f);
|
|
||||||
gm_mgTechTest.mg_pmgUp = &gm_mgTraining;
|
|
||||||
gm_mgTechTest.mg_pmgDown = &gm_mgPlayersAndControls;
|
|
||||||
|
|
||||||
gm_mgPlayersAndControls.mg_boxOnScreen = BoxBigRow(6.0f);
|
|
||||||
gm_mgOptions.mg_boxOnScreen = BoxBigRow(7.0f);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (gm_mgTraining.mg_lnNode.IsLinked()) {
|
|
||||||
gm_mgTraining.mg_lnNode.Remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgLoad.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgLoad.mg_pmgUp = &gm_mgQuickLoad;
|
|
||||||
gm_mgLoad.mg_pmgDown = &gm_mgTechTest;
|
|
||||||
|
|
||||||
gm_mgTechTest.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgTechTest.mg_pmgUp = &gm_mgLoad;
|
|
||||||
gm_mgTechTest.mg_pmgDown = &gm_mgPlayersAndControls;
|
|
||||||
|
|
||||||
gm_mgPlayersAndControls.mg_boxOnScreen = BoxBigRow(5.0f);
|
|
||||||
gm_mgOptions.mg_boxOnScreen = BoxBigRow(6.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
|
|
||||||
CPlayerCharacter &pc = _pGame->gm_apcPlayers[_pGame->gm_iSinglePlayer];
|
|
||||||
gm_mgPlayerLabel.mg_strText.PrintF(TRANS("Player: %s\n"), (const char *) pc.GetNameForPrinting());
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_SINGLEPLAYER_H
|
|
||||||
#define SE_INCL_GAME_MENU_SINGLEPLAYER_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CSinglePlayerMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgPlayerLabel;
|
|
||||||
CMGButton gm_mgNewGame;
|
|
||||||
CMGButton gm_mgCustom;
|
|
||||||
CMGButton gm_mgQuickLoad;
|
|
||||||
CMGButton gm_mgLoad;
|
|
||||||
CMGButton gm_mgTraining;
|
|
||||||
CMGButton gm_mgTechTest;
|
|
||||||
CMGButton gm_mgPlayersAndControls;
|
|
||||||
CMGButton gm_mgOptions;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,100 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MSinglePlayerNew.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CSinglePlayerNewMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize single player new menu
|
|
||||||
gm_mgTitle.mg_strText = TRANS("NEW GAME");
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgTourist.mg_strText = TRANS("TOURIST");
|
|
||||||
gm_mgTourist.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgTourist.mg_boxOnScreen = BoxBigRow(0.0f);
|
|
||||||
gm_mgTourist.mg_strTip = TRANS("for non-FPS players");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTourist.mg_lnNode);
|
|
||||||
gm_mgTourist.mg_pmgUp = &gm_mgSerious;
|
|
||||||
gm_mgTourist.mg_pmgDown = &gm_mgEasy;
|
|
||||||
gm_mgTourist.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgEasy.mg_strText = TRANS("EASY");
|
|
||||||
gm_mgEasy.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgEasy.mg_boxOnScreen = BoxBigRow(1.0f);
|
|
||||||
gm_mgEasy.mg_strTip = TRANS("for unexperienced FPS players");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgEasy.mg_lnNode);
|
|
||||||
gm_mgEasy.mg_pmgUp = &gm_mgTourist;
|
|
||||||
gm_mgEasy.mg_pmgDown = &gm_mgMedium;
|
|
||||||
gm_mgEasy.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgMedium.mg_strText = TRANS("NORMAL");
|
|
||||||
gm_mgMedium.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgMedium.mg_boxOnScreen = BoxBigRow(2.0f);
|
|
||||||
gm_mgMedium.mg_strTip = TRANS("for experienced FPS players");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgMedium.mg_lnNode);
|
|
||||||
gm_mgMedium.mg_pmgUp = &gm_mgEasy;
|
|
||||||
gm_mgMedium.mg_pmgDown = &gm_mgHard;
|
|
||||||
gm_mgMedium.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgHard.mg_strText = TRANS("HARD");
|
|
||||||
gm_mgHard.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgHard.mg_boxOnScreen = BoxBigRow(3.0f);
|
|
||||||
gm_mgHard.mg_strTip = TRANS("for experienced Serious Sam players");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgHard.mg_lnNode);
|
|
||||||
gm_mgHard.mg_pmgUp = &gm_mgMedium;
|
|
||||||
gm_mgHard.mg_pmgDown = &gm_mgSerious;
|
|
||||||
gm_mgHard.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgSerious.mg_strText = TRANS("SERIOUS");
|
|
||||||
gm_mgSerious.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgSerious.mg_boxOnScreen = BoxBigRow(4.0f);
|
|
||||||
gm_mgSerious.mg_strTip = TRANS("are you serious?");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgSerious.mg_lnNode);
|
|
||||||
gm_mgSerious.mg_pmgUp = &gm_mgHard;
|
|
||||||
gm_mgSerious.mg_pmgDown = &gm_mgTourist;
|
|
||||||
gm_mgSerious.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgMental.mg_strText = TRANS("MENTAL");
|
|
||||||
gm_mgMental.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgMental.mg_boxOnScreen = BoxBigRow(5.0f);
|
|
||||||
gm_mgMental.mg_strTip = TRANS("you are not serious!");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgMental.mg_lnNode);
|
|
||||||
gm_mgMental.mg_pmgUp = &gm_mgSerious;
|
|
||||||
gm_mgMental.mg_pmgDown = &gm_mgTourist;
|
|
||||||
gm_mgMental.mg_pActivatedFunction = NULL;
|
|
||||||
gm_mgMental.mg_bMental = TRUE;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
void CSinglePlayerNewMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
extern INDEX sam_bMentalActivated;
|
|
||||||
if (sam_bMentalActivated) {
|
|
||||||
gm_mgMental.Appear();
|
|
||||||
gm_mgSerious.mg_pmgDown = &gm_mgMental;
|
|
||||||
gm_mgTourist.mg_pmgUp = &gm_mgMental;
|
|
||||||
} else {
|
|
||||||
gm_mgMental.Disappear();
|
|
||||||
gm_mgSerious.mg_pmgDown = &gm_mgTourist;
|
|
||||||
gm_mgTourist.mg_pmgUp = &gm_mgSerious;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_SINGLEPLAYERNEW_H
|
|
||||||
#define SE_INCL_GAME_MENU_SINGLEPLAYERNEW_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CSinglePlayerNewMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgTourist;
|
|
||||||
CMGButton gm_mgEasy;
|
|
||||||
CMGButton gm_mgMedium;
|
|
||||||
CMGButton gm_mgHard;
|
|
||||||
CMGButton gm_mgSerious;
|
|
||||||
CMGButton gm_mgMental;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,60 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MSplitScreen.h"
|
|
||||||
|
|
||||||
|
|
||||||
void CSplitScreenMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize split screen menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("SPLIT SCREEN");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
gm_mgStart.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgStart.mg_boxOnScreen = BoxBigRow(0);
|
|
||||||
gm_mgStart.mg_pmgUp = &gm_mgLoad;
|
|
||||||
gm_mgStart.mg_pmgDown = &gm_mgQuickLoad;
|
|
||||||
gm_mgStart.mg_strText = TRANS("NEW GAME");
|
|
||||||
gm_mgStart.mg_strTip = TRANS("start new split-screen game");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode);
|
|
||||||
gm_mgStart.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgQuickLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgQuickLoad.mg_boxOnScreen = BoxBigRow(1);
|
|
||||||
gm_mgQuickLoad.mg_pmgUp = &gm_mgStart;
|
|
||||||
gm_mgQuickLoad.mg_pmgDown = &gm_mgLoad;
|
|
||||||
gm_mgQuickLoad.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gm_mgQuickLoad.mg_strTip = TRANS("load a quick-saved game (F9)");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgQuickLoad.mg_lnNode);
|
|
||||||
gm_mgQuickLoad.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgLoad.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgLoad.mg_boxOnScreen = BoxBigRow(2);
|
|
||||||
gm_mgLoad.mg_pmgUp = &gm_mgQuickLoad;
|
|
||||||
gm_mgLoad.mg_pmgDown = &gm_mgStart;
|
|
||||||
gm_mgLoad.mg_strText = TRANS("LOAD");
|
|
||||||
gm_mgLoad.mg_strTip = TRANS("load a saved split-screen game");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLoad.mg_lnNode);
|
|
||||||
gm_mgLoad.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSplitScreenMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_SPLITSCREEN_H
|
|
||||||
#define SE_INCL_GAME_MENU_SPLITSCREEN_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CSplitScreenMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGButton gm_mgStart;
|
|
||||||
CMGButton gm_mgQuickLoad;
|
|
||||||
CMGButton gm_mgLoad;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,101 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MSplitStart.h"
|
|
||||||
|
|
||||||
extern void UpdateSplitLevel(INDEX iDummy);
|
|
||||||
|
|
||||||
|
|
||||||
void CSplitStartMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize split screen menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("START SPLIT SCREEN");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
// game type trigger
|
|
||||||
TRIGGER_MG(gm_mgGameType, 0,
|
|
||||||
gm_mgStart, gm_mgDifficulty, TRANS("Game type:"), astrGameTypeRadioTexts);
|
|
||||||
gm_mgGameType.mg_ctTexts = ctGameTypeRadioTexts;
|
|
||||||
gm_mgGameType.mg_strTip = TRANS("choose type of multiplayer game");
|
|
||||||
gm_mgGameType.mg_pOnTriggerChange = &UpdateSplitLevel;
|
|
||||||
|
|
||||||
// difficulty trigger
|
|
||||||
TRIGGER_MG(gm_mgDifficulty, 1,
|
|
||||||
gm_mgGameType, gm_mgLevel, TRANS("Difficulty:"), astrDifficultyRadioTexts);
|
|
||||||
gm_mgDifficulty.mg_strTip = TRANS("choose difficulty level");
|
|
||||||
|
|
||||||
// level name
|
|
||||||
gm_mgLevel.mg_strText = "";
|
|
||||||
gm_mgLevel.mg_strLabel = TRANS("Level:");
|
|
||||||
gm_mgLevel.mg_boxOnScreen = BoxMediumRow(2);
|
|
||||||
gm_mgLevel.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgLevel.mg_iCenterI = -1;
|
|
||||||
gm_mgLevel.mg_pmgUp = &gm_mgDifficulty;
|
|
||||||
gm_mgLevel.mg_pmgDown = &gm_mgOptions;
|
|
||||||
gm_mgLevel.mg_strTip = TRANS("choose the level to start");
|
|
||||||
gm_mgLevel.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgLevel.mg_lnNode);
|
|
||||||
|
|
||||||
// options button
|
|
||||||
gm_mgOptions.mg_strText = TRANS("Game options");
|
|
||||||
gm_mgOptions.mg_boxOnScreen = BoxMediumRow(3);
|
|
||||||
gm_mgOptions.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgOptions.mg_iCenterI = 0;
|
|
||||||
gm_mgOptions.mg_pmgUp = &gm_mgLevel;
|
|
||||||
gm_mgOptions.mg_pmgDown = &gm_mgStart;
|
|
||||||
gm_mgOptions.mg_strTip = TRANS("adjust game rules");
|
|
||||||
gm_mgOptions.mg_pActivatedFunction = NULL;
|
|
||||||
gm_lhGadgets.AddTail(gm_mgOptions.mg_lnNode);
|
|
||||||
|
|
||||||
// start button
|
|
||||||
gm_mgStart.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgStart.mg_boxOnScreen = BoxBigRow(4);
|
|
||||||
gm_mgStart.mg_pmgUp = &gm_mgOptions;
|
|
||||||
gm_mgStart.mg_pmgDown = &gm_mgGameType;
|
|
||||||
gm_mgStart.mg_strText = TRANS("START");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgStart.mg_lnNode);
|
|
||||||
gm_mgStart.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSplitStartMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
extern INDEX sam_bMentalActivated;
|
|
||||||
gm_mgDifficulty.mg_ctTexts = sam_bMentalActivated ? 6 : 5;
|
|
||||||
|
|
||||||
gm_mgGameType.mg_iSelected = Clamp(_pShell->GetINDEX("gam_iStartMode"), 0L, ctGameTypeRadioTexts - 1L);
|
|
||||||
gm_mgGameType.ApplyCurrentSelection();
|
|
||||||
gm_mgDifficulty.mg_iSelected = _pShell->GetINDEX("gam_iStartDifficulty") + 1;
|
|
||||||
gm_mgDifficulty.ApplyCurrentSelection();
|
|
||||||
|
|
||||||
// clamp maximum number of players to at least 4
|
|
||||||
_pShell->SetINDEX("gam_ctMaxPlayers", ClampDn(_pShell->GetINDEX("gam_ctMaxPlayers"), 4L));
|
|
||||||
|
|
||||||
UpdateSplitLevel(0);
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CSplitStartMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
_pShell->SetINDEX("gam_iStartDifficulty", gm_mgDifficulty.mg_iSelected - 1);
|
|
||||||
_pShell->SetINDEX("gam_iStartMode", gm_mgGameType.mg_iSelected);
|
|
||||||
|
|
||||||
CGameMenu::EndMenu();
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_SPLITSTART_H
|
|
||||||
#define SE_INCL_GAME_MENU_SPLITSTART_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTrigger.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CSplitStartMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGTrigger gm_mgGameType;
|
|
||||||
CMGTrigger gm_mgDifficulty;
|
|
||||||
CMGButton gm_mgLevel;
|
|
||||||
CMGButton gm_mgOptions;
|
|
||||||
CMGButton gm_mgStart;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,134 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "SeriousSam/VarList.h"
|
|
||||||
#include "SeriousSam/GUI/Menus/MVar.h"
|
|
||||||
|
|
||||||
extern BOOL _bVarChanged;
|
|
||||||
|
|
||||||
|
|
||||||
void CVarMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = "";
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
for (INDEX iLabel = 0; iLabel<VARS_ON_SCREEN; iLabel++)
|
|
||||||
{
|
|
||||||
INDEX iPrev = (VARS_ON_SCREEN + iLabel - 1) % VARS_ON_SCREEN;
|
|
||||||
INDEX iNext = (iLabel + 1) % VARS_ON_SCREEN;
|
|
||||||
// initialize label gadgets
|
|
||||||
gm_mgVar[iLabel].mg_pmgUp = &gm_mgVar[iPrev];
|
|
||||||
gm_mgVar[iLabel].mg_pmgDown = &gm_mgVar[iNext];
|
|
||||||
gm_mgVar[iLabel].mg_pmgLeft = &gm_mgApply;
|
|
||||||
gm_mgVar[iLabel].mg_boxOnScreen = BoxMediumRow(iLabel);
|
|
||||||
gm_mgVar[iLabel].mg_pActivatedFunction = NULL; // never called!
|
|
||||||
gm_lhGadgets.AddTail(gm_mgVar[iLabel].mg_lnNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
gm_mgApply.mg_boxOnScreen = BoxMediumRow(16.5f);
|
|
||||||
gm_mgApply.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgApply.mg_iCenterI = 1;
|
|
||||||
gm_mgApply.mg_pmgLeft =
|
|
||||||
gm_mgApply.mg_pmgRight =
|
|
||||||
gm_mgApply.mg_pmgUp =
|
|
||||||
gm_mgApply.mg_pmgDown = &gm_mgVar[0];
|
|
||||||
gm_mgApply.mg_strText = TRANS("APPLY");
|
|
||||||
gm_mgApply.mg_strTip = TRANS("apply changes");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgApply.mg_lnNode);
|
|
||||||
gm_mgApply.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowUp.mg_lnNode);
|
|
||||||
gm_lhGadgets.AddTail(gm_mgArrowDn.mg_lnNode);
|
|
||||||
gm_mgArrowUp.mg_adDirection = AD_UP;
|
|
||||||
gm_mgArrowDn.mg_adDirection = AD_DOWN;
|
|
||||||
gm_mgArrowUp.mg_boxOnScreen = BoxArrow(AD_UP);
|
|
||||||
gm_mgArrowDn.mg_boxOnScreen = BoxArrow(AD_DOWN);
|
|
||||||
gm_mgArrowUp.mg_pmgRight = gm_mgArrowUp.mg_pmgDown =
|
|
||||||
&gm_mgVar[0];
|
|
||||||
gm_mgArrowDn.mg_pmgRight = gm_mgArrowDn.mg_pmgUp =
|
|
||||||
&gm_mgVar[VARS_ON_SCREEN - 1];
|
|
||||||
|
|
||||||
gm_ctListVisible = VARS_ON_SCREEN;
|
|
||||||
gm_pmgArrowUp = &gm_mgArrowUp;
|
|
||||||
gm_pmgArrowDn = &gm_mgArrowDn;
|
|
||||||
gm_pmgListTop = &gm_mgVar[0];
|
|
||||||
gm_pmgListBottom = &gm_mgVar[VARS_ON_SCREEN - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVarMenu::FillListItems(void)
|
|
||||||
{
|
|
||||||
// disable all items first
|
|
||||||
for (INDEX i = 0; i<VARS_ON_SCREEN; i++) {
|
|
||||||
gm_mgVar[i].mg_bEnabled = FALSE;
|
|
||||||
gm_mgVar[i].mg_pvsVar = NULL;
|
|
||||||
gm_mgVar[i].mg_iInList = -2;
|
|
||||||
}
|
|
||||||
BOOL bHasFirst = FALSE;
|
|
||||||
BOOL bHasLast = FALSE;
|
|
||||||
INDEX ctLabels = _lhVarSettings.Count();
|
|
||||||
INDEX iLabel = 0;
|
|
||||||
|
|
||||||
FOREACHINLIST(CVarSetting, vs_lnNode, _lhVarSettings, itvs) {
|
|
||||||
CVarSetting &vs = *itvs;
|
|
||||||
INDEX iInMenu = iLabel - gm_iListOffset;
|
|
||||||
if ((iLabel >= gm_iListOffset) &&
|
|
||||||
(iLabel<(gm_iListOffset + VARS_ON_SCREEN)))
|
|
||||||
{
|
|
||||||
bHasFirst |= (iLabel == 0);
|
|
||||||
bHasLast |= (iLabel == ctLabels - 1);
|
|
||||||
gm_mgVar[iInMenu].mg_pvsVar = &vs;
|
|
||||||
gm_mgVar[iInMenu].mg_strTip = vs.vs_strTip;
|
|
||||||
gm_mgVar[iInMenu].mg_bEnabled = gm_mgVar[iInMenu].IsEnabled();
|
|
||||||
gm_mgVar[iInMenu].mg_iInList = iLabel;
|
|
||||||
}
|
|
||||||
iLabel++;
|
|
||||||
}
|
|
||||||
// enable/disable up/down arrows
|
|
||||||
gm_mgArrowUp.mg_bEnabled = !bHasFirst && ctLabels>0;
|
|
||||||
gm_mgArrowDn.mg_bEnabled = !bHasLast && ctLabels>0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVarMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
LoadVarSettings(gm_fnmMenuCFG);
|
|
||||||
// set default parameters for the list
|
|
||||||
gm_iListOffset = 0;
|
|
||||||
gm_ctListTotal = _lhVarSettings.Count();
|
|
||||||
gm_iListWantedItem = 0;
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVarMenu::EndMenu(void)
|
|
||||||
{
|
|
||||||
// disable all items first
|
|
||||||
for (INDEX i = 0; i<VARS_ON_SCREEN; i++) {
|
|
||||||
gm_mgVar[i].mg_bEnabled = FALSE;
|
|
||||||
gm_mgVar[i].mg_pvsVar = NULL;
|
|
||||||
gm_mgVar[i].mg_iInList = -2;
|
|
||||||
}
|
|
||||||
FlushVarSettings(FALSE);
|
|
||||||
_bVarChanged = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVarMenu::Think(void)
|
|
||||||
{
|
|
||||||
gm_mgApply.mg_bEnabled = _bVarChanged;
|
|
||||||
extern void FixupBackButton(CGameMenu *pgm);
|
|
||||||
FixupBackButton(this);
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_VAR_H
|
|
||||||
#define SE_INCL_GAME_MENU_VAR_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGArrow.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGButton.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGTitle.h"
|
|
||||||
#include "SeriousSam/GUI/Components/MGVarButton.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CVarMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CTFileName gm_fnmMenuCFG;
|
|
||||||
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGVarButton gm_mgVar[LEVELS_ON_SCREEN];
|
|
||||||
CMGButton gm_mgApply;
|
|
||||||
CMGArrow gm_mgArrowUp;
|
|
||||||
CMGArrow gm_mgArrowDn;
|
|
||||||
|
|
||||||
void Initialize_t(void);
|
|
||||||
void FillListItems(void);
|
|
||||||
void StartMenu(void);
|
|
||||||
void EndMenu(void);
|
|
||||||
void Think(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,85 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MVideoOptions.h"
|
|
||||||
|
|
||||||
extern void InitVideoOptionsButtons();
|
|
||||||
extern void UpdateVideoOptionsButtons(INDEX iSelected);
|
|
||||||
|
|
||||||
|
|
||||||
void CVideoOptionsMenu::Initialize_t(void)
|
|
||||||
{
|
|
||||||
// intialize video options menu
|
|
||||||
gm_mgTitle.mg_boxOnScreen = BoxTitle();
|
|
||||||
gm_mgTitle.mg_strText = TRANS("VIDEO");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgTitle.mg_lnNode);
|
|
||||||
|
|
||||||
TRIGGER_MG(gm_mgDisplayAPITrigger, 0,
|
|
||||||
gm_mgApply, gm_mgDisplayAdaptersTrigger, TRANS("GRAPHICS API"), astrDisplayAPIRadioTexts);
|
|
||||||
gm_mgDisplayAPITrigger.mg_strTip = TRANS("choose graphics API to be used");
|
|
||||||
TRIGGER_MG(gm_mgDisplayAdaptersTrigger, 1,
|
|
||||||
gm_mgDisplayAPITrigger, gm_mgDisplayPrefsTrigger, TRANS("DISPLAY ADAPTER"), astrNoYes);
|
|
||||||
gm_mgDisplayAdaptersTrigger.mg_strTip = TRANS("choose display adapter to be used");
|
|
||||||
TRIGGER_MG(gm_mgDisplayPrefsTrigger, 2,
|
|
||||||
gm_mgDisplayAdaptersTrigger, gm_mgResolutionsTrigger, TRANS("PREFERENCES"), astrDisplayPrefsRadioTexts);
|
|
||||||
gm_mgDisplayPrefsTrigger.mg_strTip = TRANS("balance between speed and rendering quality, depending on your system");
|
|
||||||
TRIGGER_MG(gm_mgResolutionsTrigger, 3,
|
|
||||||
gm_mgDisplayPrefsTrigger, gm_mgFullScreenTrigger, TRANS("RESOLUTION"), astrNoYes);
|
|
||||||
gm_mgResolutionsTrigger.mg_strTip = TRANS("select video mode resolution");
|
|
||||||
TRIGGER_MG(gm_mgFullScreenTrigger, 4,
|
|
||||||
gm_mgResolutionsTrigger, gm_mgBitsPerPixelTrigger, TRANS("FULL SCREEN"), astrNoYes);
|
|
||||||
gm_mgFullScreenTrigger.mg_strTip = TRANS("make game run in a window or in full screen");
|
|
||||||
TRIGGER_MG(gm_mgBitsPerPixelTrigger, 5,
|
|
||||||
gm_mgFullScreenTrigger, gm_mgVideoRendering, TRANS("BITS PER PIXEL"), astrBitsPerPixelRadioTexts);
|
|
||||||
gm_mgBitsPerPixelTrigger.mg_strTip = TRANS("select number of colors used for display");
|
|
||||||
|
|
||||||
gm_mgDisplayPrefsTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
gm_mgDisplayAPITrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
gm_mgDisplayAdaptersTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
gm_mgFullScreenTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
gm_mgResolutionsTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
gm_mgBitsPerPixelTrigger.mg_pOnTriggerChange = NULL;
|
|
||||||
|
|
||||||
gm_mgVideoRendering.mg_bfsFontSize = BFS_MEDIUM;
|
|
||||||
gm_mgVideoRendering.mg_boxOnScreen = BoxMediumRow(7.0f);
|
|
||||||
gm_mgVideoRendering.mg_pmgUp = &gm_mgBitsPerPixelTrigger;
|
|
||||||
gm_mgVideoRendering.mg_pmgDown = &gm_mgApply;
|
|
||||||
gm_mgVideoRendering.mg_strText = TRANS("RENDERING OPTIONS");
|
|
||||||
gm_mgVideoRendering.mg_strTip = TRANS("manually adjust rendering settings");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgVideoRendering.mg_lnNode);
|
|
||||||
gm_mgVideoRendering.mg_pActivatedFunction = NULL;
|
|
||||||
|
|
||||||
gm_mgApply.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
gm_mgApply.mg_boxOnScreen = BoxBigRow(5.5f);
|
|
||||||
gm_mgApply.mg_pmgUp = &gm_mgVideoRendering;
|
|
||||||
gm_mgApply.mg_pmgDown = &gm_mgDisplayAPITrigger;
|
|
||||||
gm_mgApply.mg_strText = TRANS("APPLY");
|
|
||||||
gm_mgApply.mg_strTip = TRANS("apply selected options");
|
|
||||||
gm_lhGadgets.AddTail(gm_mgApply.mg_lnNode);
|
|
||||||
gm_mgApply.mg_pActivatedFunction = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVideoOptionsMenu::StartMenu(void)
|
|
||||||
{
|
|
||||||
InitVideoOptionsButtons();
|
|
||||||
|
|
||||||
CGameMenu::StartMenu();
|
|
||||||
|
|
||||||
UpdateVideoOptionsButtons(-1);
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_GAME_MENU_VIDEOOPTIONS_H
|
|
||||||
#define SE_INCL_GAME_MENU_VIDEOOPTIONS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CVideoOptionsMenu : public CGameMenu {
|
|
||||||
public:
|
|
||||||
CMGTitle gm_mgTitle;
|
|
||||||
CMGTrigger gm_mgDisplayAPITrigger;
|
|
||||||
CMGTrigger gm_mgDisplayAdaptersTrigger;
|
|
||||||
CMGTrigger gm_mgFullScreenTrigger;
|
|
||||||
CMGTrigger gm_mgResolutionsTrigger;
|
|
||||||
CMGTrigger gm_mgDisplayPrefsTrigger;
|
|
||||||
CMGButton gm_mgVideoRendering;
|
|
||||||
CMGTrigger gm_mgBitsPerPixelTrigger;
|
|
||||||
CMGButton gm_mgApply;
|
|
||||||
|
|
||||||
void StartMenu(void);
|
|
||||||
void Initialize_t(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,978 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Build.h>
|
|
||||||
#include <sys/timeb.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#ifdef PLATFORM_WIN32
|
|
||||||
#include <io.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/MainWindow.h"
|
|
||||||
#include <Engine/CurrentVersion.h>
|
|
||||||
#include <Engine/Templates/Stock_CSoundData.h>
|
|
||||||
#include <GameMP/LCDDrawing.h>
|
|
||||||
#include "SeriousSam/GUI/Menus/MenuPrinting.h"
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
#include "SeriousSam/VarList.h"
|
|
||||||
#include "SeriousSam/FileInfo.h"
|
|
||||||
#include "MenuManager.h"
|
|
||||||
|
|
||||||
#include "MenuActions.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "MenuStarters.h"
|
|
||||||
|
|
||||||
// macros for translating radio button text arrays
|
|
||||||
#define TRANSLATERADIOARRAY(array) TranslateRadioTexts(array, ARRAYCOUNT(array))
|
|
||||||
|
|
||||||
extern BOOL bMenuActive;
|
|
||||||
extern BOOL bMenuRendering;
|
|
||||||
extern CTextureObject *_ptoLogoCT;
|
|
||||||
extern CTextureObject *_ptoLogoODI;
|
|
||||||
extern CTextureObject *_ptoLogoEAX;
|
|
||||||
|
|
||||||
INDEX _iLocalPlayer = -1;
|
|
||||||
BOOL _bPlayerMenuFromSinglePlayer = FALSE;
|
|
||||||
|
|
||||||
GameMode _gmMenuGameMode = GM_NONE;
|
|
||||||
GameMode _gmRunningGameMode = GM_NONE;
|
|
||||||
CListHead _lhServers;
|
|
||||||
|
|
||||||
void OnPlayerSelect(void);
|
|
||||||
|
|
||||||
// last tick done
|
|
||||||
TIME _tmMenuLastTickDone = -1;
|
|
||||||
// all possible menu entities
|
|
||||||
CListHead lhMenuEntities;
|
|
||||||
|
|
||||||
CTString _strLastPlayerAppearance = "";
|
|
||||||
extern CTString sam_strNetworkSettings;
|
|
||||||
|
|
||||||
// function to activate when level is chosen
|
|
||||||
void (*_pAfterLevelChosen)(void);
|
|
||||||
|
|
||||||
// functions for init actions
|
|
||||||
|
|
||||||
void FixupBackButton(CGameMenu *pgm);
|
|
||||||
|
|
||||||
// mouse cursor position
|
|
||||||
PIX _pixCursorPosI = 0;
|
|
||||||
PIX _pixCursorPosJ = 0;
|
|
||||||
PIX _pixCursorExternPosI = 0;
|
|
||||||
PIX _pixCursorExternPosJ = 0;
|
|
||||||
BOOL _bMouseUsedLast = FALSE;
|
|
||||||
CMenuGadget *_pmgUnderCursor = NULL;
|
|
||||||
|
|
||||||
extern BOOL _bDefiningKey;
|
|
||||||
extern BOOL _bEditingString;
|
|
||||||
|
|
||||||
// thumbnail for showing in menu
|
|
||||||
CTextureObject _toThumbnail;
|
|
||||||
BOOL _bThumbnailOn = FALSE;
|
|
||||||
|
|
||||||
CFontData _fdBig;
|
|
||||||
CFontData _fdMedium;
|
|
||||||
CFontData _fdSmall;
|
|
||||||
CFontData _fdTitle;
|
|
||||||
|
|
||||||
CSoundData *_psdSelect = NULL;
|
|
||||||
CSoundData *_psdPress = NULL;
|
|
||||||
CSoundObject *_psoMenuSound = NULL;
|
|
||||||
|
|
||||||
static CTextureObject _toPointer;
|
|
||||||
static CTextureObject _toLogoMenuA;
|
|
||||||
static CTextureObject _toLogoMenuB;
|
|
||||||
|
|
||||||
// -------------- All possible menu entities
|
|
||||||
#define BIG_BUTTONS_CT 6
|
|
||||||
|
|
||||||
#define CHANGETRIGGERARRAY(ltbmg, astr) \
|
|
||||||
ltbmg.mg_astrTexts = astr;\
|
|
||||||
ltbmg.mg_ctTexts = sizeof( astr)/sizeof( astr[0]);\
|
|
||||||
ltbmg.mg_iSelected = 0;\
|
|
||||||
ltbmg.mg_strText = astr[ltbmg.mg_iSelected];
|
|
||||||
|
|
||||||
#define PLACEMENT(x,y,z) CPlacement3D( FLOAT3D( x, y, z), \
|
|
||||||
ANGLE3D( AngleDeg(0.0f), AngleDeg(0.0f), AngleDeg(0.0f)))
|
|
||||||
|
|
||||||
// ptr to current menu
|
|
||||||
CGameMenu *pgmCurrentMenu = NULL;
|
|
||||||
|
|
||||||
// global back button
|
|
||||||
CMGButton mgBack;
|
|
||||||
|
|
||||||
// -------- console variable adjustment menu
|
|
||||||
BOOL _bVarChanged = FALSE;
|
|
||||||
|
|
||||||
extern void PlayMenuSound(CSoundData *psd)
|
|
||||||
{
|
|
||||||
if (_psoMenuSound!=NULL && !_psoMenuSound->IsPlaying()) {
|
|
||||||
_psoMenuSound->Play(psd, SOF_NONGAME);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// translate all texts in array for one radio button
|
|
||||||
void TranslateRadioTexts(CTString astr[], INDEX ct)
|
|
||||||
{
|
|
||||||
for (INDEX i=0; i<ct; i++) {
|
|
||||||
astr[i] = TranslateConst(astr[i], 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// set new thumbnail
|
|
||||||
void SetThumbnail(CTFileName fn)
|
|
||||||
{
|
|
||||||
_bThumbnailOn = TRUE;
|
|
||||||
try {
|
|
||||||
_toThumbnail.SetData_t(fn.NoExt()+"Tbn.tex");
|
|
||||||
} catch(char *strError) {
|
|
||||||
(void)strError;
|
|
||||||
try {
|
|
||||||
_toThumbnail.SetData_t(fn.NoExt()+".tbn");
|
|
||||||
} catch(char *strError) {
|
|
||||||
(void)strError;
|
|
||||||
_toThumbnail.SetData(NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove thumbnail
|
|
||||||
void ClearThumbnail(void)
|
|
||||||
{
|
|
||||||
_bThumbnailOn = FALSE;
|
|
||||||
_toThumbnail.SetData(NULL);
|
|
||||||
_pShell->Execute( "FreeUnusedStock();");
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartMenus(const char *str)
|
|
||||||
{
|
|
||||||
_tmMenuLastTickDone=_pTimer->GetRealTimeTick();
|
|
||||||
// disable printing of last lines
|
|
||||||
CON_DiscardLastLineTimes();
|
|
||||||
|
|
||||||
// stop all IFeel effects
|
|
||||||
IFeel_StopEffect(NULL);
|
|
||||||
if (pgmCurrentMenu == &_pGUIM->gmMainMenu || pgmCurrentMenu == &_pGUIM->gmInGameMenu) {
|
|
||||||
if (_gmRunningGameMode==GM_NONE) {
|
|
||||||
pgmCurrentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
} else {
|
|
||||||
pgmCurrentMenu = &_pGUIM->gmInGameMenu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// start main menu, or last active one
|
|
||||||
if (pgmCurrentMenu!=NULL) {
|
|
||||||
ChangeToMenu(pgmCurrentMenu);
|
|
||||||
} else {
|
|
||||||
if (_gmRunningGameMode==GM_NONE) {
|
|
||||||
ChangeToMenu(&_pGUIM->gmMainMenu);
|
|
||||||
} else {
|
|
||||||
ChangeToMenu(&_pGUIM->gmInGameMenu);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (CTString(str)=="load") {
|
|
||||||
StartCurrentLoadMenu();
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmParentMenu = NULL;
|
|
||||||
}
|
|
||||||
if (CTString(str)=="save") {
|
|
||||||
StartCurrentSaveMenu();
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmParentMenu = NULL;
|
|
||||||
FixupBackButton(&_pGUIM->gmLoadSaveMenu);
|
|
||||||
}
|
|
||||||
if (CTString(str)=="controls") {
|
|
||||||
void StartControlsMenuFromOptions(void);
|
|
||||||
StartControlsMenuFromOptions();
|
|
||||||
_pGUIM->gmControls.gm_pgmParentMenu = NULL;
|
|
||||||
FixupBackButton(&_pGUIM->gmControls);
|
|
||||||
}
|
|
||||||
if (CTString(str)=="join") {
|
|
||||||
void StartSelectPlayersMenuFromOpen(void);
|
|
||||||
StartSelectPlayersMenuFromOpen();
|
|
||||||
_pGUIM->gmSelectPlayersMenu.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
FixupBackButton(&_pGUIM->gmSelectPlayersMenu);
|
|
||||||
}
|
|
||||||
if (CTString(str)=="hiscore") {
|
|
||||||
ChangeToMenu(&_pGUIM->gmHighScoreMenu);
|
|
||||||
_pGUIM->gmHighScoreMenu.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
FixupBackButton(&_pGUIM->gmHighScoreMenu);
|
|
||||||
}
|
|
||||||
bMenuActive = TRUE;
|
|
||||||
bMenuRendering = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void StopMenus( BOOL bGoToRoot /*=TRUE*/)
|
|
||||||
{
|
|
||||||
ClearThumbnail();
|
|
||||||
if (pgmCurrentMenu!=NULL && bMenuActive) {
|
|
||||||
pgmCurrentMenu->EndMenu();
|
|
||||||
}
|
|
||||||
bMenuActive = FALSE;
|
|
||||||
if (bGoToRoot) {
|
|
||||||
if (_gmRunningGameMode==GM_NONE) {
|
|
||||||
pgmCurrentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
} else {
|
|
||||||
pgmCurrentMenu = &_pGUIM->gmInGameMenu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL IsMenusInRoot(void)
|
|
||||||
{
|
|
||||||
return pgmCurrentMenu == NULL || pgmCurrentMenu == &_pGUIM->gmMainMenu || pgmCurrentMenu == &_pGUIM->gmInGameMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------ Global menu function implementation
|
|
||||||
void InitializeMenus(void)
|
|
||||||
{
|
|
||||||
_pGUIM = new CMenuManager();
|
|
||||||
|
|
||||||
try {
|
|
||||||
// initialize and load corresponding fonts
|
|
||||||
_fdSmall.Load_t( CTFILENAME( "Fonts\\Display3-narrow.fnt"));
|
|
||||||
_fdMedium.Load_t( CTFILENAME( "Fonts\\Display3-normal.fnt"));
|
|
||||||
_fdBig.Load_t( CTFILENAME( "Fonts\\Display3-caps.fnt"));
|
|
||||||
_fdTitle.Load_t( CTFILENAME( "Fonts\\Title2.fnt"));
|
|
||||||
_fdSmall.SetCharSpacing(-1);
|
|
||||||
_fdSmall.SetLineSpacing( 0);
|
|
||||||
_fdSmall.SetSpaceWidth(0.4f);
|
|
||||||
_fdMedium.SetCharSpacing(+1);
|
|
||||||
_fdMedium.SetLineSpacing( 0);
|
|
||||||
_fdMedium.SetSpaceWidth(0.4f);
|
|
||||||
_fdBig.SetCharSpacing(+1);
|
|
||||||
_fdBig.SetLineSpacing( 0);
|
|
||||||
_fdTitle.SetCharSpacing(+1);
|
|
||||||
_fdTitle.SetLineSpacing( 0);
|
|
||||||
|
|
||||||
// load menu sounds
|
|
||||||
_psdSelect = _pSoundStock->Obtain_t( CTFILENAME("Sounds\\Menu\\Select.wav"));
|
|
||||||
_psdPress = _pSoundStock->Obtain_t( CTFILENAME("Sounds\\Menu\\Press.wav"));
|
|
||||||
_psoMenuSound = new CSoundObject;
|
|
||||||
|
|
||||||
// initialize and load menu textures
|
|
||||||
_toPointer.SetData_t( CTFILENAME( "Textures\\General\\Pointer.tex"));
|
|
||||||
_toLogoMenuA.SetData_t( CTFILENAME( "Textures\\Logo\\sam_menulogo256a.tex"));
|
|
||||||
_toLogoMenuB.SetData_t( CTFILENAME( "Textures\\Logo\\sam_menulogo256b.tex"));
|
|
||||||
}
|
|
||||||
catch( char *strError) {
|
|
||||||
FatalError( strError);
|
|
||||||
}
|
|
||||||
// force logo textures to be of maximal size
|
|
||||||
((CTextureData*)_toLogoMenuA.GetData())->Force(TEX_CONSTANT);
|
|
||||||
((CTextureData*)_toLogoMenuB.GetData())->Force(TEX_CONSTANT);
|
|
||||||
|
|
||||||
// menu's relative placement
|
|
||||||
CPlacement3D plRelative = CPlacement3D( FLOAT3D( 0.0f, 0.0f, -9.0f),
|
|
||||||
ANGLE3D( AngleDeg(0.0f), AngleDeg(0.0f), AngleDeg(0.0f)));
|
|
||||||
try
|
|
||||||
{
|
|
||||||
TRANSLATERADIOARRAY(astrNoYes);
|
|
||||||
TRANSLATERADIOARRAY(astrComputerInvoke);
|
|
||||||
TRANSLATERADIOARRAY(astrDisplayAPIRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrDisplayPrefsRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrBitsPerPixelRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrFrequencyRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrSoundAPIRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrDifficultyRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrMaxPlayersRadioTexts);
|
|
||||||
TRANSLATERADIOARRAY(astrWeapon);
|
|
||||||
TRANSLATERADIOARRAY(astrSplitScreenRadioTexts);
|
|
||||||
|
|
||||||
// initialize game type strings table
|
|
||||||
InitGameTypes();
|
|
||||||
|
|
||||||
// ------------------- Initialize menus
|
|
||||||
_pGUIM->gmConfirmMenu.Initialize_t();
|
|
||||||
_pGUIM->gmConfirmMenu.gm_strName = "Confirm";
|
|
||||||
_pGUIM->gmConfirmMenu.gm_pmgSelectedByDefault = &_pGUIM->gmConfirmMenu.gm_mgConfirmYes;
|
|
||||||
_pGUIM->gmConfirmMenu.gm_pgmParentMenu = NULL;
|
|
||||||
InitActionsForConfirmMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmMainMenu.Initialize_t();
|
|
||||||
_pGUIM->gmMainMenu.gm_strName = "Main";
|
|
||||||
_pGUIM->gmMainMenu.gm_pmgSelectedByDefault = &_pGUIM->gmMainMenu.gm_mgSingle;
|
|
||||||
_pGUIM->gmMainMenu.gm_pgmParentMenu = NULL;
|
|
||||||
InitActionsForMainMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmInGameMenu.Initialize_t();
|
|
||||||
_pGUIM->gmInGameMenu.gm_strName = "InGame";
|
|
||||||
_pGUIM->gmInGameMenu.gm_pmgSelectedByDefault = &_pGUIM->gmInGameMenu.gm_mgQuickLoad;
|
|
||||||
_pGUIM->gmInGameMenu.gm_pgmParentMenu = NULL;
|
|
||||||
InitActionsForInGameMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmSinglePlayerMenu.Initialize_t();
|
|
||||||
_pGUIM->gmSinglePlayerMenu.gm_strName = "SinglePlayer";
|
|
||||||
_pGUIM->gmSinglePlayerMenu.gm_pmgSelectedByDefault = &_pGUIM->gmSinglePlayerMenu.gm_mgNewGame;
|
|
||||||
_pGUIM->gmSinglePlayerMenu.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
InitActionsForSinglePlayerMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmSinglePlayerNewMenu.Initialize_t();
|
|
||||||
_pGUIM->gmSinglePlayerNewMenu.gm_strName = "SinglePlayerNew";
|
|
||||||
_pGUIM->gmSinglePlayerNewMenu.gm_pmgSelectedByDefault = &_pGUIM->gmSinglePlayerNewMenu.gm_mgMedium;
|
|
||||||
_pGUIM->gmSinglePlayerNewMenu.gm_pgmParentMenu = &_pGUIM->gmSinglePlayerMenu;
|
|
||||||
InitActionsForSinglePlayerNewMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmDisabledFunction.Initialize_t();
|
|
||||||
_pGUIM->gmDisabledFunction.gm_strName = "DisabledFunction";
|
|
||||||
_pGUIM->gmDisabledFunction.gm_pmgSelectedByDefault = &_pGUIM->gmDisabledFunction.gm_mgButton;
|
|
||||||
_pGUIM->gmDisabledFunction.gm_pgmParentMenu = NULL;
|
|
||||||
|
|
||||||
_pGUIM->gmPlayerProfile.Initialize_t();
|
|
||||||
_pGUIM->gmPlayerProfile.gm_strName = "PlayerProfile";
|
|
||||||
_pGUIM->gmPlayerProfile.gm_pmgSelectedByDefault = &_pGUIM->gmPlayerProfile.gm_mgNameField;
|
|
||||||
InitActionsForPlayerProfileMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmControls.Initialize_t();
|
|
||||||
_pGUIM->gmControls.gm_strName = "Controls";
|
|
||||||
_pGUIM->gmControls.gm_pmgSelectedByDefault = &_pGUIM->gmControls.gm_mgButtons;
|
|
||||||
InitActionsForControlsMenu();
|
|
||||||
|
|
||||||
// warning! parent menu has to be set inside button activate function from where
|
|
||||||
// Load/Save menu is called
|
|
||||||
_pGUIM->gmLoadSaveMenu.Initialize_t();
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_strName = "LoadSave";
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pmgSelectedByDefault = &_pGUIM->gmLoadSaveMenu.gm_amgButton[0];
|
|
||||||
|
|
||||||
_pGUIM->gmHighScoreMenu.Initialize_t();
|
|
||||||
_pGUIM->gmHighScoreMenu.gm_strName = "HighScore";
|
|
||||||
_pGUIM->gmHighScoreMenu.gm_pmgSelectedByDefault = &mgBack;
|
|
||||||
|
|
||||||
_pGUIM->gmCustomizeKeyboardMenu.Initialize_t();
|
|
||||||
_pGUIM->gmCustomizeKeyboardMenu.gm_strName = "CustomizeKeyboard";
|
|
||||||
_pGUIM->gmCustomizeKeyboardMenu.gm_pmgSelectedByDefault = &_pGUIM->gmCustomizeKeyboardMenu.gm_mgKey[0];
|
|
||||||
_pGUIM->gmCustomizeKeyboardMenu.gm_pgmParentMenu = &_pGUIM->gmControls;
|
|
||||||
|
|
||||||
_pGUIM->gmCustomizeAxisMenu.Initialize_t();
|
|
||||||
_pGUIM->gmCustomizeAxisMenu.gm_strName = "CustomizeAxis";
|
|
||||||
_pGUIM->gmCustomizeAxisMenu.gm_pmgSelectedByDefault = &_pGUIM->gmCustomizeAxisMenu.gm_mgActionTrigger;
|
|
||||||
_pGUIM->gmCustomizeAxisMenu.gm_pgmParentMenu = &_pGUIM->gmControls;
|
|
||||||
InitActionsForCustomizeAxisMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmOptionsMenu.Initialize_t();
|
|
||||||
_pGUIM->gmOptionsMenu.gm_strName = "Options";
|
|
||||||
_pGUIM->gmOptionsMenu.gm_pmgSelectedByDefault = &_pGUIM->gmOptionsMenu.gm_mgVideoOptions;
|
|
||||||
_pGUIM->gmOptionsMenu.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
InitActionsForOptionsMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmVideoOptionsMenu.Initialize_t();
|
|
||||||
_pGUIM->gmVideoOptionsMenu.gm_strName = "VideoOptions";
|
|
||||||
_pGUIM->gmVideoOptionsMenu.gm_pmgSelectedByDefault = &_pGUIM->gmVideoOptionsMenu.gm_mgDisplayAPITrigger;
|
|
||||||
_pGUIM->gmVideoOptionsMenu.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
InitActionsForVideoOptionsMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmAudioOptionsMenu.Initialize_t();
|
|
||||||
_pGUIM->gmAudioOptionsMenu.gm_strName = "AudioOptions";
|
|
||||||
_pGUIM->gmAudioOptionsMenu.gm_pmgSelectedByDefault = &_pGUIM->gmAudioOptionsMenu.gm_mgFrequencyTrigger;
|
|
||||||
_pGUIM->gmAudioOptionsMenu.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
InitActionsForAudioOptionsMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmLevelsMenu.Initialize_t();
|
|
||||||
_pGUIM->gmLevelsMenu.gm_strName = "Levels";
|
|
||||||
_pGUIM->gmLevelsMenu.gm_pmgSelectedByDefault = &_pGUIM->gmLevelsMenu.gm_mgManualLevel[0];
|
|
||||||
_pGUIM->gmLevelsMenu.gm_pgmParentMenu = &_pGUIM->gmSinglePlayerMenu;
|
|
||||||
|
|
||||||
_pGUIM->gmVarMenu.Initialize_t();
|
|
||||||
_pGUIM->gmVarMenu.gm_strName = "Var";
|
|
||||||
_pGUIM->gmVarMenu.gm_pmgSelectedByDefault = &_pGUIM->gmVarMenu.gm_mgVar[0];
|
|
||||||
_pGUIM->gmVarMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkStartMenu;
|
|
||||||
InitActionsForVarMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmServersMenu.Initialize_t();
|
|
||||||
_pGUIM->gmServersMenu.gm_strName = "Servers";
|
|
||||||
_pGUIM->gmServersMenu.gm_pmgSelectedByDefault = &_pGUIM->gmServersMenu.gm_mgList;
|
|
||||||
_pGUIM->gmServersMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkOpenMenu;
|
|
||||||
InitActionsForServersMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmNetworkMenu.Initialize_t();
|
|
||||||
_pGUIM->gmNetworkMenu.gm_strName = "Network";
|
|
||||||
_pGUIM->gmNetworkMenu.gm_pmgSelectedByDefault = &_pGUIM->gmNetworkMenu.gm_mgJoin;
|
|
||||||
_pGUIM->gmNetworkMenu.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
InitActionsForNetworkMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmNetworkStartMenu.Initialize_t();
|
|
||||||
_pGUIM->gmNetworkStartMenu.gm_strName = "NetworkStart";
|
|
||||||
_pGUIM->gmNetworkStartMenu.gm_pmgSelectedByDefault = &_pGUIM->gmNetworkStartMenu.gm_mgStart;
|
|
||||||
_pGUIM->gmNetworkStartMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkMenu;
|
|
||||||
InitActionsForNetworkStartMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmNetworkJoinMenu.Initialize_t();
|
|
||||||
_pGUIM->gmNetworkJoinMenu.gm_strName = "NetworkJoin";
|
|
||||||
_pGUIM->gmNetworkJoinMenu.gm_pmgSelectedByDefault = &_pGUIM->gmNetworkJoinMenu.gm_mgLAN;
|
|
||||||
_pGUIM->gmNetworkJoinMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkMenu;
|
|
||||||
InitActionsForNetworkJoinMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmSelectPlayersMenu.gm_bAllowDedicated = FALSE;
|
|
||||||
_pGUIM->gmSelectPlayersMenu.gm_bAllowObserving = FALSE;
|
|
||||||
_pGUIM->gmSelectPlayersMenu.Initialize_t();
|
|
||||||
_pGUIM->gmSelectPlayersMenu.gm_strName = "SelectPlayers";
|
|
||||||
_pGUIM->gmSelectPlayersMenu.gm_pmgSelectedByDefault = &_pGUIM->gmSelectPlayersMenu.gm_mgStart;
|
|
||||||
InitActionsForSelectPlayersMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmNetworkOpenMenu.Initialize_t();
|
|
||||||
_pGUIM->gmNetworkOpenMenu.gm_strName = "NetworkOpen";
|
|
||||||
_pGUIM->gmNetworkOpenMenu.gm_pmgSelectedByDefault = &_pGUIM->gmNetworkOpenMenu.gm_mgJoin;
|
|
||||||
_pGUIM->gmNetworkOpenMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkJoinMenu;
|
|
||||||
InitActionsForNetworkOpenMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmSplitScreenMenu.Initialize_t();
|
|
||||||
_pGUIM->gmSplitScreenMenu.gm_strName = "SplitScreen";
|
|
||||||
_pGUIM->gmSplitScreenMenu.gm_pmgSelectedByDefault = &_pGUIM->gmSplitScreenMenu.gm_mgStart;
|
|
||||||
_pGUIM->gmSplitScreenMenu.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
InitActionsForSplitScreenMenu();
|
|
||||||
|
|
||||||
_pGUIM->gmSplitStartMenu.Initialize_t();
|
|
||||||
_pGUIM->gmSplitStartMenu.gm_strName = "SplitStart";
|
|
||||||
_pGUIM->gmSplitStartMenu.gm_pmgSelectedByDefault = &_pGUIM->gmSplitStartMenu.gm_mgStart;
|
|
||||||
_pGUIM->gmSplitStartMenu.gm_pgmParentMenu = &_pGUIM->gmSplitScreenMenu;
|
|
||||||
InitActionsForSplitStartMenu();
|
|
||||||
}
|
|
||||||
catch( char *strError)
|
|
||||||
{
|
|
||||||
FatalError( strError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DestroyMenus( void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmMainMenu.Destroy();
|
|
||||||
pgmCurrentMenu = NULL;
|
|
||||||
_pSoundStock->Release(_psdSelect);
|
|
||||||
_pSoundStock->Release(_psdPress);
|
|
||||||
delete _psoMenuSound;
|
|
||||||
_psdSelect = NULL;
|
|
||||||
_psdPress = NULL;
|
|
||||||
_psoMenuSound = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// go to parent menu if possible
|
|
||||||
void MenuGoToParent(void)
|
|
||||||
{
|
|
||||||
// if there is no parent menu
|
|
||||||
if( pgmCurrentMenu->gm_pgmParentMenu == NULL) {
|
|
||||||
// if in game
|
|
||||||
if (_gmRunningGameMode!=GM_NONE) {
|
|
||||||
// exit menus
|
|
||||||
StopMenus();
|
|
||||||
// if no game is running
|
|
||||||
} else {
|
|
||||||
// go to main menu
|
|
||||||
ChangeToMenu(&_pGUIM->gmMainMenu);
|
|
||||||
}
|
|
||||||
// if there is some parent menu
|
|
||||||
} else {
|
|
||||||
// go to parent menu
|
|
||||||
ChangeToMenu( pgmCurrentMenu->gm_pgmParentMenu);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MenuOnKeyDown( int iVKey)
|
|
||||||
{
|
|
||||||
|
|
||||||
// check if mouse buttons used
|
|
||||||
_bMouseUsedLast = (iVKey==VK_LBUTTON || iVKey==VK_RBUTTON || iVKey==VK_MBUTTON
|
|
||||||
|| iVKey==10 || iVKey==11);
|
|
||||||
|
|
||||||
// ignore mouse when editing
|
|
||||||
if (_bEditingString && _bMouseUsedLast) {
|
|
||||||
_bMouseUsedLast = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// initially the message is not handled
|
|
||||||
BOOL bHandled = FALSE;
|
|
||||||
|
|
||||||
// if not a mouse button, or mouse is over some gadget
|
|
||||||
if (!_bMouseUsedLast || _pmgUnderCursor!=NULL) {
|
|
||||||
// ask current menu to handle the key
|
|
||||||
bHandled = pgmCurrentMenu->OnKeyDown( iVKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if not handled
|
|
||||||
if(!bHandled) {
|
|
||||||
// if escape or right mouse pressed
|
|
||||||
if(iVKey==VK_ESCAPE || iVKey==VK_RBUTTON) {
|
|
||||||
if (pgmCurrentMenu==&_pGUIM->gmLoadSaveMenu && _pGUIM->gmLoadSaveMenu.gm_bNoEscape) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// go to parent menu if possible
|
|
||||||
MenuGoToParent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MenuOnChar(MSG msg)
|
|
||||||
{
|
|
||||||
// check if mouse buttons used
|
|
||||||
_bMouseUsedLast = FALSE;
|
|
||||||
|
|
||||||
// ask current menu to handle the key
|
|
||||||
pgmCurrentMenu->OnChar(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MenuOnMouseMove(PIX pixI, PIX pixJ)
|
|
||||||
{
|
|
||||||
static PIX pixLastI = 0;
|
|
||||||
static PIX pixLastJ = 0;
|
|
||||||
if (pixLastI==pixI && pixLastJ==pixJ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pixLastI = pixI;
|
|
||||||
pixLastJ = pixJ;
|
|
||||||
_bMouseUsedLast = !_bEditingString && !_bDefiningKey && !_pInput->IsInputEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MenuUpdateMouseFocus(void)
|
|
||||||
{
|
|
||||||
// get real cursor position
|
|
||||||
POINT pt;
|
|
||||||
GetCursorPos(&pt);
|
|
||||||
ScreenToClient(_hwndMain, &pt);
|
|
||||||
extern INDEX sam_bWideScreen;
|
|
||||||
extern CDrawPort *pdp;
|
|
||||||
if( sam_bWideScreen) {
|
|
||||||
const PIX pixHeight = pdp->GetHeight();
|
|
||||||
pt.y -= (pixHeight/0.75f-pixHeight)/2;
|
|
||||||
}
|
|
||||||
_pixCursorPosI += pt.x-_pixCursorExternPosI;
|
|
||||||
_pixCursorPosJ = _pixCursorExternPosJ;
|
|
||||||
_pixCursorExternPosI = pt.x;
|
|
||||||
_pixCursorExternPosJ = pt.y;
|
|
||||||
|
|
||||||
// if mouse not used last
|
|
||||||
if (!_bMouseUsedLast||_bDefiningKey||_bEditingString) {
|
|
||||||
// do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
CMenuGadget *pmgActive = NULL;
|
|
||||||
// for all gadgets in menu
|
|
||||||
FOREACHINLIST( CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
CMenuGadget &mg = *itmg;
|
|
||||||
// if focused
|
|
||||||
if( itmg->mg_bFocused) {
|
|
||||||
// remember it
|
|
||||||
pmgActive = &itmg.Current();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if there is some under cursor
|
|
||||||
if (_pmgUnderCursor!=NULL) {
|
|
||||||
_pmgUnderCursor->OnMouseOver(_pixCursorPosI, _pixCursorPosJ);
|
|
||||||
// if the one under cursor has no neighbours
|
|
||||||
if (_pmgUnderCursor->mg_pmgLeft ==NULL
|
|
||||||
&&_pmgUnderCursor->mg_pmgRight==NULL
|
|
||||||
&&_pmgUnderCursor->mg_pmgUp ==NULL
|
|
||||||
&&_pmgUnderCursor->mg_pmgDown ==NULL) {
|
|
||||||
// it cannot be focused
|
|
||||||
_pmgUnderCursor = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the one under cursor is not active and not disappearing
|
|
||||||
if (pmgActive!=_pmgUnderCursor && _pmgUnderCursor->mg_bVisible) {
|
|
||||||
// change focus
|
|
||||||
if (pmgActive!=NULL) {
|
|
||||||
pmgActive->OnKillFocus();
|
|
||||||
}
|
|
||||||
_pmgUnderCursor->OnSetFocus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static CTimerValue _tvInitialization;
|
|
||||||
static TIME _tmInitializationTick = -1;
|
|
||||||
extern TIME _tmMenuLastTickDone;
|
|
||||||
|
|
||||||
void SetMenuLerping(void)
|
|
||||||
{
|
|
||||||
CTimerValue tvNow = _pTimer->GetHighPrecisionTimer();
|
|
||||||
|
|
||||||
// if lerping was never set before
|
|
||||||
if (_tmInitializationTick<0) {
|
|
||||||
// initialize it
|
|
||||||
_tvInitialization = tvNow;
|
|
||||||
_tmInitializationTick = _tmMenuLastTickDone;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get passed time from session state starting in precise time and in ticks
|
|
||||||
FLOAT tmRealDelta = FLOAT((tvNow-_tvInitialization).GetSeconds());
|
|
||||||
FLOAT tmTickDelta = _tmMenuLastTickDone-_tmInitializationTick;
|
|
||||||
// calculate factor
|
|
||||||
FLOAT fFactor = 1.0f-(tmTickDelta-tmRealDelta)/_pTimer->TickQuantum;
|
|
||||||
|
|
||||||
// if the factor starts getting below zero
|
|
||||||
if (fFactor<0) {
|
|
||||||
// clamp it
|
|
||||||
fFactor = 0.0f;
|
|
||||||
// readjust timers so that it gets better
|
|
||||||
_tvInitialization = tvNow;
|
|
||||||
_tmInitializationTick = _tmMenuLastTickDone-_pTimer->TickQuantum;
|
|
||||||
}
|
|
||||||
if (fFactor>1) {
|
|
||||||
// clamp it
|
|
||||||
fFactor = 1.0f;
|
|
||||||
// readjust timers so that it gets better
|
|
||||||
_tvInitialization = tvNow;
|
|
||||||
_tmInitializationTick = _tmMenuLastTickDone;
|
|
||||||
}
|
|
||||||
// set lerping factor and timer
|
|
||||||
_pTimer->SetCurrentTick(_tmMenuLastTickDone);
|
|
||||||
_pTimer->SetLerp(fFactor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// render mouse cursor if needed
|
|
||||||
void RenderMouseCursor(CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
// if mouse not used last
|
|
||||||
if (!_bMouseUsedLast|| _bDefiningKey || _bEditingString) {
|
|
||||||
// don't render cursor
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_pGame->LCDSetDrawport(pdp);
|
|
||||||
_pGame->LCDDrawPointer(_pixCursorPosI, _pixCursorPosJ);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BOOL DoMenu( CDrawPort *pdp)
|
|
||||||
{
|
|
||||||
pdp->Unlock();
|
|
||||||
CDrawPort dpMenu(pdp, TRUE);
|
|
||||||
dpMenu.Lock();
|
|
||||||
|
|
||||||
MenuUpdateMouseFocus();
|
|
||||||
|
|
||||||
// if in fullscreen
|
|
||||||
CDisplayMode dmCurrent;
|
|
||||||
_pGfx->GetCurrentDisplayMode(dmCurrent);
|
|
||||||
if (dmCurrent.IsFullScreen()) {
|
|
||||||
// clamp mouse pointer
|
|
||||||
_pixCursorPosI = Clamp(_pixCursorPosI, 0L, dpMenu.GetWidth());
|
|
||||||
_pixCursorPosJ = Clamp(_pixCursorPosJ, 0L, dpMenu.GetHeight());
|
|
||||||
// if in window
|
|
||||||
} else {
|
|
||||||
// use same mouse pointer as windows
|
|
||||||
_pixCursorPosI = _pixCursorExternPosI;
|
|
||||||
_pixCursorPosJ = _pixCursorExternPosJ;
|
|
||||||
}
|
|
||||||
|
|
||||||
pgmCurrentMenu->Think();
|
|
||||||
|
|
||||||
TIME tmTickNow = _pTimer->GetRealTimeTick();
|
|
||||||
|
|
||||||
while( _tmMenuLastTickDone<tmTickNow)
|
|
||||||
{
|
|
||||||
_pTimer->SetCurrentTick(_tmMenuLastTickDone);
|
|
||||||
// call think for all gadgets in menu
|
|
||||||
FOREACHINLIST( CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
itmg->Think();
|
|
||||||
}
|
|
||||||
_tmMenuLastTickDone+=_pTimer->TickQuantum;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetMenuLerping();
|
|
||||||
|
|
||||||
PIX pixW = dpMenu.GetWidth();
|
|
||||||
PIX pixH = dpMenu.GetHeight();
|
|
||||||
|
|
||||||
// blend background if menu is on
|
|
||||||
if( bMenuActive)
|
|
||||||
{
|
|
||||||
// get current time
|
|
||||||
TIME tmNow = _pTimer->GetLerpedCurrentTick();
|
|
||||||
UBYTE ubH1 = (INDEX)(tmNow*08.7f) & 255;
|
|
||||||
UBYTE ubH2 = (INDEX)(tmNow*27.6f) & 255;
|
|
||||||
UBYTE ubH3 = (INDEX)(tmNow*16.5f) & 255;
|
|
||||||
UBYTE ubH4 = (INDEX)(tmNow*35.4f) & 255;
|
|
||||||
|
|
||||||
// clear screen with background texture
|
|
||||||
_pGame->LCDPrepare(1.0f);
|
|
||||||
_pGame->LCDSetDrawport(&dpMenu);
|
|
||||||
// do not allow game to show through
|
|
||||||
dpMenu.Fill(C_BLACK|255);
|
|
||||||
_pGame->LCDRenderClouds1();
|
|
||||||
_pGame->LCDRenderGrid();
|
|
||||||
_pGame->LCDRenderClouds2();
|
|
||||||
|
|
||||||
FLOAT fScaleW = (FLOAT)pixW / 640.0f;
|
|
||||||
FLOAT fScaleH = (FLOAT)pixH / 480.0f;
|
|
||||||
PIX pixI0, pixJ0, pixI1, pixJ1;
|
|
||||||
// put logo(s) to main menu (if logos exist)
|
|
||||||
if (pgmCurrentMenu == &_pGUIM->gmMainMenu)
|
|
||||||
{
|
|
||||||
if( _ptoLogoODI!=NULL) {
|
|
||||||
CTextureData &td = (CTextureData&)*_ptoLogoODI->GetData();
|
|
||||||
#define LOGOSIZE 50
|
|
||||||
const PIX pixLogoWidth = LOGOSIZE * dpMenu.dp_fWideAdjustment;
|
|
||||||
const PIX pixLogoHeight = LOGOSIZE* td.GetHeight() / td.GetWidth();
|
|
||||||
pixI0 = (640-pixLogoWidth -16)*fScaleW;
|
|
||||||
pixJ0 = (480-pixLogoHeight-16)*fScaleH;
|
|
||||||
pixI1 = pixI0+ pixLogoWidth *fScaleW;
|
|
||||||
pixJ1 = pixJ0+ pixLogoHeight*fScaleH;
|
|
||||||
dpMenu.PutTexture( _ptoLogoODI, PIXaabbox2D( PIX2D( pixI0, pixJ0),PIX2D( pixI1, pixJ1)));
|
|
||||||
#undef LOGOSIZE
|
|
||||||
}
|
|
||||||
if( _ptoLogoCT!=NULL) {
|
|
||||||
CTextureData &td = (CTextureData&)*_ptoLogoCT->GetData();
|
|
||||||
#define LOGOSIZE 50
|
|
||||||
const PIX pixLogoWidth = LOGOSIZE * dpMenu.dp_fWideAdjustment;
|
|
||||||
const PIX pixLogoHeight = LOGOSIZE* td.GetHeight() / td.GetWidth();
|
|
||||||
pixI0 = 12*fScaleW;
|
|
||||||
pixJ0 = (480-pixLogoHeight-16)*fScaleH;
|
|
||||||
pixI1 = pixI0+ pixLogoWidth *fScaleW;
|
|
||||||
pixJ1 = pixJ0+ pixLogoHeight*fScaleH;
|
|
||||||
dpMenu.PutTexture( _ptoLogoCT, PIXaabbox2D( PIX2D( pixI0, pixJ0),PIX2D( pixI1, pixJ1)));
|
|
||||||
#undef LOGOSIZE
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
FLOAT fResize = Min(dpMenu.GetWidth()/640.0f, dpMenu.GetHeight()/480.0f);
|
|
||||||
PIX pixSizeI = 256*fResize;
|
|
||||||
PIX pixSizeJ = 64*fResize;
|
|
||||||
PIX pixCenterI = dpMenu.GetWidth()/2;
|
|
||||||
PIX pixHeightJ = 10*fResize;
|
|
||||||
dpMenu.PutTexture(&_toLogoMenuA, PIXaabbox2D(
|
|
||||||
PIX2D( pixCenterI-pixSizeI, pixHeightJ),PIX2D( pixCenterI, pixHeightJ+pixSizeJ)));
|
|
||||||
dpMenu.PutTexture(&_toLogoMenuB, PIXaabbox2D(
|
|
||||||
PIX2D( pixCenterI, pixHeightJ),PIX2D( pixCenterI+pixSizeI, pixHeightJ+pixSizeJ)));
|
|
||||||
}
|
|
||||||
} else if (pgmCurrentMenu == &_pGUIM->gmAudioOptionsMenu) {
|
|
||||||
if( _ptoLogoEAX!=NULL) {
|
|
||||||
CTextureData &td = (CTextureData&)*_ptoLogoEAX->GetData();
|
|
||||||
const INDEX iSize = 95;
|
|
||||||
const PIX pixLogoWidth = iSize * dpMenu.dp_fWideAdjustment;
|
|
||||||
const PIX pixLogoHeight = iSize * td.GetHeight() / td.GetWidth();
|
|
||||||
pixI0 = (640-pixLogoWidth - 35)*fScaleW;
|
|
||||||
pixJ0 = (480-pixLogoHeight - 7)*fScaleH;
|
|
||||||
pixI1 = pixI0+ pixLogoWidth *fScaleW;
|
|
||||||
pixJ1 = pixJ0+ pixLogoHeight*fScaleH;
|
|
||||||
dpMenu.PutTexture( _ptoLogoEAX, PIXaabbox2D( PIX2D( pixI0, pixJ0),PIX2D( pixI1, pixJ1)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define THUMBW 96
|
|
||||||
#define THUMBH 96
|
|
||||||
// if there is a thumbnail
|
|
||||||
if( _bThumbnailOn) {
|
|
||||||
const FLOAT fThumbScaleW = fScaleW * dpMenu.dp_fWideAdjustment;
|
|
||||||
PIX pixOfs = 8*fScaleW;
|
|
||||||
pixI0 = 8*fScaleW;
|
|
||||||
pixJ0 = (240-THUMBW/2)*fScaleH;
|
|
||||||
pixI1 = pixI0+ THUMBW*fThumbScaleW;
|
|
||||||
pixJ1 = pixJ0+ THUMBH*fScaleH;
|
|
||||||
if( _toThumbnail.GetData()!=NULL)
|
|
||||||
{ // show thumbnail with shadow and border
|
|
||||||
dpMenu.Fill( pixI0+pixOfs, pixJ0+pixOfs, THUMBW*fThumbScaleW, THUMBH*fScaleH, C_BLACK|128);
|
|
||||||
dpMenu.PutTexture( &_toThumbnail, PIXaabbox2D( PIX2D( pixI0, pixJ0), PIX2D( pixI1, pixJ1)), C_WHITE|255);
|
|
||||||
dpMenu.DrawBorder( pixI0,pixJ0, THUMBW*fThumbScaleW,THUMBH*fScaleH, _pGame->LCDGetColor(C_mdGREEN|255, "thumbnail border"));
|
|
||||||
} else {
|
|
||||||
dpMenu.SetFont( _pfdDisplayFont);
|
|
||||||
dpMenu.SetTextScaling( fScaleW);
|
|
||||||
dpMenu.SetTextAspect( 1.0f);
|
|
||||||
dpMenu.PutTextCXY( TRANS("no thumbnail"), (pixI0+pixI1)/2, (pixJ0+pixJ1)/2, _pGame->LCDGetColor(C_GREEN|255, "no thumbnail"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// assure we can listen to non-3d sounds
|
|
||||||
_pSound->UpdateSounds();
|
|
||||||
}
|
|
||||||
|
|
||||||
// if this is popup menu
|
|
||||||
if (pgmCurrentMenu->gm_bPopup) {
|
|
||||||
|
|
||||||
// render parent menu first
|
|
||||||
if (pgmCurrentMenu->gm_pgmParentMenu!=NULL) {
|
|
||||||
_pGame->MenuPreRenderMenu(pgmCurrentMenu->gm_pgmParentMenu->gm_strName);
|
|
||||||
FOREACHINLIST( CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_pgmParentMenu->gm_lhGadgets, itmg) {
|
|
||||||
if( itmg->mg_bVisible) {
|
|
||||||
itmg->Render( &dpMenu);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_pGame->MenuPostRenderMenu(pgmCurrentMenu->gm_pgmParentMenu->gm_strName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// gray it out
|
|
||||||
dpMenu.Fill(C_BLACK|128);
|
|
||||||
|
|
||||||
// clear popup box
|
|
||||||
dpMenu.Unlock();
|
|
||||||
PIXaabbox2D box = FloatBoxToPixBox(&dpMenu, BoxPopup());
|
|
||||||
CDrawPort dpPopup(pdp, box);
|
|
||||||
dpPopup.Lock();
|
|
||||||
_pGame->LCDSetDrawport(&dpPopup);
|
|
||||||
dpPopup.Fill(C_BLACK|255);
|
|
||||||
_pGame->LCDRenderClouds1();
|
|
||||||
_pGame->LCDRenderGrid();
|
|
||||||
//_pGame->LCDRenderClouds2();
|
|
||||||
_pGame->LCDScreenBox(_pGame->LCDGetColor(C_GREEN|255, "popup box"));
|
|
||||||
dpPopup.Unlock();
|
|
||||||
dpMenu.Lock();
|
|
||||||
}
|
|
||||||
|
|
||||||
// no entity is under cursor initially
|
|
||||||
_pmgUnderCursor = NULL;
|
|
||||||
|
|
||||||
BOOL bStilInMenus = FALSE;
|
|
||||||
_pGame->MenuPreRenderMenu(pgmCurrentMenu->gm_strName);
|
|
||||||
// for each menu gadget
|
|
||||||
FOREACHINLIST( CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
// if gadget is visible
|
|
||||||
if( itmg->mg_bVisible) {
|
|
||||||
bStilInMenus = TRUE;
|
|
||||||
itmg->Render( &dpMenu);
|
|
||||||
if (FloatBoxToPixBox(&dpMenu, itmg->mg_boxOnScreen)>=PIX2D(_pixCursorPosI, _pixCursorPosJ)) {
|
|
||||||
_pmgUnderCursor = itmg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_pGame->MenuPostRenderMenu(pgmCurrentMenu->gm_strName);
|
|
||||||
|
|
||||||
// no currently active gadget initially
|
|
||||||
CMenuGadget *pmgActive = NULL;
|
|
||||||
// if mouse was not active last
|
|
||||||
if (!_bMouseUsedLast) {
|
|
||||||
// find focused gadget
|
|
||||||
FOREACHINLIST( CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
CMenuGadget &mg = *itmg;
|
|
||||||
// if focused
|
|
||||||
if( itmg->mg_bFocused) {
|
|
||||||
// it is active
|
|
||||||
pmgActive = &itmg.Current();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if mouse was active last
|
|
||||||
} else {
|
|
||||||
// gadget under cursor is active
|
|
||||||
pmgActive = _pmgUnderCursor;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if editing
|
|
||||||
if (_bEditingString && pmgActive!=NULL) {
|
|
||||||
// dim the menu bit
|
|
||||||
dpMenu.Fill(C_BLACK|0x40);
|
|
||||||
// render the edit gadget again
|
|
||||||
pmgActive->Render(&dpMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if there is some active gadget and it has tips
|
|
||||||
if (pmgActive!=NULL && (pmgActive->mg_strTip!="" || _bEditingString)) {
|
|
||||||
CTString strTip = pmgActive->mg_strTip;
|
|
||||||
if (_bEditingString) {
|
|
||||||
strTip = TRANS("Enter - OK, Escape - Cancel");
|
|
||||||
}
|
|
||||||
// print the tip
|
|
||||||
SetFontMedium(&dpMenu);
|
|
||||||
dpMenu.PutTextC(strTip,
|
|
||||||
pixW*0.5f, pixH*0.92f, _pGame->LCDGetColor(C_WHITE|255, "tool tip"));
|
|
||||||
}
|
|
||||||
|
|
||||||
_pGame->ConsolePrintLastLines(&dpMenu);
|
|
||||||
|
|
||||||
RenderMouseCursor(&dpMenu);
|
|
||||||
|
|
||||||
dpMenu.Unlock();
|
|
||||||
pdp->Lock();
|
|
||||||
|
|
||||||
return bStilInMenus;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MenuBack(void)
|
|
||||||
{
|
|
||||||
MenuGoToParent();
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void FixupBackButton(CGameMenu *pgm)
|
|
||||||
{
|
|
||||||
BOOL bResume = FALSE;
|
|
||||||
|
|
||||||
if (mgBack.mg_lnNode.IsLinked()) {
|
|
||||||
mgBack.mg_lnNode.Remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL bHasBack = TRUE;
|
|
||||||
|
|
||||||
if (pgm->gm_bPopup) {
|
|
||||||
bHasBack = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pgm->gm_pgmParentMenu==NULL) {
|
|
||||||
if (_gmRunningGameMode==GM_NONE) {
|
|
||||||
bHasBack = FALSE;
|
|
||||||
} else {
|
|
||||||
bResume = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!bHasBack) {
|
|
||||||
mgBack.Disappear();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bResume) {
|
|
||||||
mgBack.mg_strText = TRANS("RESUME");
|
|
||||||
mgBack.mg_strTip = TRANS("return to game");
|
|
||||||
} else {
|
|
||||||
if (_bVarChanged) {
|
|
||||||
mgBack.mg_strText = TRANS("CANCEL");
|
|
||||||
mgBack.mg_strTip = TRANS("cancel changes");
|
|
||||||
} else {
|
|
||||||
mgBack.mg_strText = TRANS("BACK");
|
|
||||||
mgBack.mg_strTip = TRANS("return to previous menu");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mgBack.mg_iCenterI = -1;
|
|
||||||
mgBack.mg_bfsFontSize = BFS_LARGE;
|
|
||||||
mgBack.mg_boxOnScreen = BoxBack();
|
|
||||||
mgBack.mg_boxOnScreen = BoxLeftColumn(16.5f);
|
|
||||||
pgm->gm_lhGadgets.AddTail( mgBack.mg_lnNode);
|
|
||||||
|
|
||||||
mgBack.mg_pmgLeft =
|
|
||||||
mgBack.mg_pmgRight =
|
|
||||||
mgBack.mg_pmgUp =
|
|
||||||
mgBack.mg_pmgDown = pgm->gm_pmgSelectedByDefault;
|
|
||||||
|
|
||||||
mgBack.mg_pActivatedFunction = &MenuBack;
|
|
||||||
|
|
||||||
mgBack.Appear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChangeToMenu( CGameMenu *pgmNewMenu)
|
|
||||||
{
|
|
||||||
// auto-clear old thumbnail when going out of menu
|
|
||||||
ClearThumbnail();
|
|
||||||
|
|
||||||
if( pgmCurrentMenu != NULL) {
|
|
||||||
if (!pgmNewMenu->gm_bPopup) {
|
|
||||||
pgmCurrentMenu->EndMenu();
|
|
||||||
} else {
|
|
||||||
FOREACHINLIST(CMenuGadget, mg_lnNode, pgmCurrentMenu->gm_lhGadgets, itmg) {
|
|
||||||
itmg->OnKillFocus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pgmNewMenu->StartMenu();
|
|
||||||
if (pgmNewMenu->gm_pmgSelectedByDefault) {
|
|
||||||
if (mgBack.mg_bFocused) {
|
|
||||||
mgBack.OnKillFocus();
|
|
||||||
}
|
|
||||||
pgmNewMenu->gm_pmgSelectedByDefault->OnSetFocus();
|
|
||||||
}
|
|
||||||
FixupBackButton(pgmNewMenu);
|
|
||||||
pgmCurrentMenu = pgmNewMenu;
|
|
||||||
}
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_H
|
|
||||||
#define SE_INCL_MENU_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// set new thumbnail
|
|
||||||
void SetThumbnail(CTFileName fn);
|
|
||||||
// remove thumbnail
|
|
||||||
void ClearThumbnail(void);
|
|
||||||
|
|
||||||
void InitializeMenus( void);
|
|
||||||
void DestroyMenus( void);
|
|
||||||
void MenuOnKeyDown( int iVKey);
|
|
||||||
void MenuOnChar(MSG msg);
|
|
||||||
void MenuOnMouseMove(PIX pixI, PIX pixJ);
|
|
||||||
void MenuOnLMBDown(void);
|
|
||||||
BOOL DoMenu( CDrawPort *pdp); // returns TRUE if still active, FALSE if should quit
|
|
||||||
void StartMenus( const char *str="");
|
|
||||||
void StopMenus(BOOL bGoToRoot =TRUE);
|
|
||||||
BOOL IsMenusInRoot(void);
|
|
||||||
void ChangeToMenu( class CGameMenu *pgmNew);
|
|
||||||
extern void PlayMenuSound(CSoundData *psd);
|
|
||||||
|
|
||||||
#define KEYS_ON_SCREEN 14
|
|
||||||
#define LEVELS_ON_SCREEN 16
|
|
||||||
#define SERVERS_ON_SCREEN 15
|
|
||||||
#define VARS_ON_SCREEN 14
|
|
||||||
|
|
||||||
extern CListHead _lhServers;
|
|
||||||
|
|
||||||
extern INDEX _iLocalPlayer;
|
|
||||||
|
|
||||||
enum GameMode {
|
|
||||||
GM_NONE = 0,
|
|
||||||
GM_SINGLE_PLAYER,
|
|
||||||
GM_NETWORK,
|
|
||||||
GM_SPLIT_SCREEN,
|
|
||||||
GM_DEMO,
|
|
||||||
GM_INTRO,
|
|
||||||
};
|
|
||||||
extern GameMode _gmMenuGameMode;
|
|
||||||
extern GameMode _gmRunningGameMode;
|
|
||||||
|
|
||||||
extern CGameMenu *pgmCurrentMenu;
|
|
||||||
|
|
||||||
#include "SeriousSam/GUI/Menus/GameMenu.h"
|
|
||||||
|
|
||||||
#include "MLoadSave.h"
|
|
||||||
#include "MPlayerProfile.h"
|
|
||||||
#include "MSelectPlayers.h"
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
File diff suppressed because it is too large
Load Diff
@ -1,44 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_ACTIONS_H
|
|
||||||
#define SE_INCL_MENU_ACTIONS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void InitActionsForAudioOptionsMenu();
|
|
||||||
void InitActionsForConfirmMenu();
|
|
||||||
void InitActionsForControlsMenu();
|
|
||||||
void InitActionsForCustomizeAxisMenu();
|
|
||||||
void InitActionsForMainMenu();
|
|
||||||
void InitActionsForInGameMenu();
|
|
||||||
void InitActionsForNetworkMenu();
|
|
||||||
void InitActionsForNetworkJoinMenu();
|
|
||||||
void InitActionsForNetworkOpenMenu();
|
|
||||||
void InitActionsForNetworkStartMenu();
|
|
||||||
void InitActionsForOptionsMenu();
|
|
||||||
void InitActionsForPlayerProfileMenu();
|
|
||||||
void InitActionsForSelectPlayersMenu();
|
|
||||||
void InitActionsForServersMenu();
|
|
||||||
void InitActionsForSinglePlayerMenu();
|
|
||||||
void InitActionsForSinglePlayerNewMenu();
|
|
||||||
void InitActionsForSplitScreenMenu();
|
|
||||||
void InitActionsForSplitStartMenu();
|
|
||||||
void InitActionsForVideoOptionsMenu();
|
|
||||||
void InitActionsForVarMenu();
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,21 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Build.h>
|
|
||||||
|
|
||||||
#include "MenuManager.h"
|
|
||||||
|
|
||||||
CMenuManager* _pGUIM = NULL;
|
|
@ -1,80 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENUMANAGER_H
|
|
||||||
#define SE_INCL_MENUMANAGER_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "MAudioOptions.h"
|
|
||||||
#include "MConfirm.h"
|
|
||||||
#include "MControls.h"
|
|
||||||
#include "MCustomizeAxis.h"
|
|
||||||
#include "MCustomizeKeyboard.h"
|
|
||||||
#include "MCredits.h"
|
|
||||||
#include "MDisabled.h"
|
|
||||||
#include "MHighScore.h"
|
|
||||||
#include "MInGame.h"
|
|
||||||
#include "MLevels.h"
|
|
||||||
#include "MMain.h"
|
|
||||||
#include "MNetwork.h"
|
|
||||||
#include "MNetworkJoin.h"
|
|
||||||
#include "MNetworkOpen.h"
|
|
||||||
#include "MNetworkStart.h"
|
|
||||||
#include "MOptions.h"
|
|
||||||
#include "MRenderingOptions.h"
|
|
||||||
#include "MServers.h"
|
|
||||||
#include "MSinglePlayer.h"
|
|
||||||
#include "MSinglePlayerNew.h"
|
|
||||||
#include "MSplitScreen.h"
|
|
||||||
#include "MSplitStart.h"
|
|
||||||
#include "MVar.h"
|
|
||||||
#include "MVideoOptions.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CMenuManager {
|
|
||||||
public:
|
|
||||||
CConfirmMenu gmConfirmMenu;
|
|
||||||
CMainMenu gmMainMenu;
|
|
||||||
CInGameMenu gmInGameMenu;
|
|
||||||
CSinglePlayerMenu gmSinglePlayerMenu;
|
|
||||||
CSinglePlayerNewMenu gmSinglePlayerNewMenu;
|
|
||||||
CDisabledMenu gmDisabledFunction;
|
|
||||||
CLevelsMenu gmLevelsMenu;
|
|
||||||
CVarMenu gmVarMenu;
|
|
||||||
CPlayerProfileMenu gmPlayerProfile;
|
|
||||||
CControlsMenu gmControls;
|
|
||||||
CLoadSaveMenu gmLoadSaveMenu;
|
|
||||||
CHighScoreMenu gmHighScoreMenu;
|
|
||||||
CCustomizeKeyboardMenu gmCustomizeKeyboardMenu;
|
|
||||||
CServersMenu gmServersMenu;
|
|
||||||
CCustomizeAxisMenu gmCustomizeAxisMenu;
|
|
||||||
COptionsMenu gmOptionsMenu;
|
|
||||||
CVideoOptionsMenu gmVideoOptionsMenu;
|
|
||||||
CAudioOptionsMenu gmAudioOptionsMenu;
|
|
||||||
CNetworkMenu gmNetworkMenu;
|
|
||||||
CNetworkJoinMenu gmNetworkJoinMenu;
|
|
||||||
CNetworkStartMenu gmNetworkStartMenu;
|
|
||||||
CNetworkOpenMenu gmNetworkOpenMenu;
|
|
||||||
CSplitScreenMenu gmSplitScreenMenu;
|
|
||||||
CSplitStartMenu gmSplitStartMenu;
|
|
||||||
CSelectPlayersMenu gmSelectPlayersMenu;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern CMenuManager *_pGUIM; // TODO: Make singleton!
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,860 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
/* This file contains starter fuctions for all menus. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Build.h>
|
|
||||||
|
|
||||||
#include "MenuManager.h"
|
|
||||||
#include "MenuStarters.h"
|
|
||||||
#include "MenuStartersAF.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
#include "SeriousSam/LevelInfo.h"
|
|
||||||
|
|
||||||
extern void(*_pAfterLevelChosen)(void);
|
|
||||||
extern BOOL _bPlayerMenuFromSinglePlayer;
|
|
||||||
|
|
||||||
extern CTString _strLastPlayerAppearance;
|
|
||||||
extern CTString sam_strNetworkSettings;
|
|
||||||
|
|
||||||
extern CTFileName _fnmModSelected;
|
|
||||||
extern CTString _strModURLSelected;
|
|
||||||
extern CTString _strModServerSelected;
|
|
||||||
|
|
||||||
|
|
||||||
void StartVideoOptionsMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmVideoOptionsMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartAudioOptionsMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmAudioOptionsMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSinglePlayerMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmSinglePlayerMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmNetworkMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkJoinMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmNetworkJoinMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkStartMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmNetworkStartMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkOpenMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmNetworkOpenMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitScreenMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmSplitScreenMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitStartMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmSplitStartMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSinglePlayerNewMenuCustom(void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmSinglePlayerNewMenu.gm_pgmParentMenu = &_pGUIM->gmLevelsMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmSinglePlayerNewMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SetQuickLoadNotes(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
if (_pShell->GetINDEX("gam_iQuickSaveSlots") <= 8) {
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = TRANS(
|
|
||||||
"In-game QuickSave shortcuts:\n"
|
|
||||||
"F6 - save a new QuickSave\n"
|
|
||||||
"F9 - load the last QuickSave\n");
|
|
||||||
} else {
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extern CTString sam_strFirstLevel;
|
|
||||||
|
|
||||||
void StartSinglePlayerNewMenu(void)
|
|
||||||
{
|
|
||||||
CVarMenu &gmCurrent = _pGUIM->gmVarMenu;
|
|
||||||
|
|
||||||
_pGame->gam_strCustomLevel = sam_strFirstLevel;
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmSinglePlayerMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
// game options var settings
|
|
||||||
void StartVarGameOptions(void)
|
|
||||||
{
|
|
||||||
CVarMenu &gmCurrent = _pGUIM->gmVarMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("GAME OPTIONS");
|
|
||||||
gmCurrent.gm_fnmMenuCFG = CTFILENAME("Scripts\\Menu\\GameOptions.cfg");
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSinglePlayerGameOptions(void)
|
|
||||||
{
|
|
||||||
CVarMenu &gmCurrent = _pGUIM->gmVarMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("GAME OPTIONS");
|
|
||||||
gmCurrent.gm_fnmMenuCFG = CTFILENAME("Scripts\\Menu\\SPOptions.cfg");
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmSinglePlayerMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartGameOptionsFromNetwork(void)
|
|
||||||
{
|
|
||||||
StartVarGameOptions();
|
|
||||||
_pGUIM->gmVarMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkStartMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartGameOptionsFromSplitScreen(void)
|
|
||||||
{
|
|
||||||
StartVarGameOptions();
|
|
||||||
_pGUIM->gmVarMenu.gm_pgmParentMenu = &_pGUIM->gmSplitStartMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
// rendering options var settings
|
|
||||||
void StartRenderingOptionsMenu(void)
|
|
||||||
{
|
|
||||||
CVarMenu &gmCurrent = _pGUIM->gmVarMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("RENDERING OPTIONS");
|
|
||||||
gmCurrent.gm_fnmMenuCFG = CTFILENAME("Scripts\\Menu\\RenderingOptions.cfg");
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmVideoOptionsMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartCustomizeKeyboardMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmCustomizeKeyboardMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartCustomizeAxisMenu(void)
|
|
||||||
{
|
|
||||||
ChangeToMenu(&_pGUIM->gmCustomizeAxisMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartOptionsMenu(void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmOptionsMenu.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmOptionsMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartCurrentLoadMenu()
|
|
||||||
{
|
|
||||||
if (_gmRunningGameMode == GM_NETWORK) {
|
|
||||||
void StartNetworkLoadMenu(void);
|
|
||||||
StartNetworkLoadMenu();
|
|
||||||
} else if (_gmRunningGameMode == GM_SPLIT_SCREEN) {
|
|
||||||
void StartSplitScreenLoadMenu(void);
|
|
||||||
StartSplitScreenLoadMenu();
|
|
||||||
} else {
|
|
||||||
void StartSinglePlayerLoadMenu(void);
|
|
||||||
StartSinglePlayerLoadMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartCurrentSaveMenu()
|
|
||||||
{
|
|
||||||
if (_gmRunningGameMode == GM_NETWORK) {
|
|
||||||
void StartNetworkSaveMenu(void);
|
|
||||||
StartNetworkSaveMenu();
|
|
||||||
} else if (_gmRunningGameMode == GM_SPLIT_SCREEN) {
|
|
||||||
void StartSplitScreenSaveMenu(void);
|
|
||||||
StartSplitScreenSaveMenu();
|
|
||||||
} else {
|
|
||||||
void StartSinglePlayerSaveMenu(void);
|
|
||||||
StartSinglePlayerSaveMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartCurrentQuickLoadMenu()
|
|
||||||
{
|
|
||||||
if (_gmRunningGameMode == GM_NETWORK) {
|
|
||||||
void StartNetworkQuickLoadMenu(void);
|
|
||||||
StartNetworkQuickLoadMenu();
|
|
||||||
} else if (_gmRunningGameMode == GM_SPLIT_SCREEN) {
|
|
||||||
void StartSplitScreenQuickLoadMenu(void);
|
|
||||||
StartSplitScreenQuickLoadMenu();
|
|
||||||
} else {
|
|
||||||
void StartSinglePlayerQuickLoadMenu(void);
|
|
||||||
StartSinglePlayerQuickLoadMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartChangePlayerMenuFromOptions(void)
|
|
||||||
{
|
|
||||||
_bPlayerMenuFromSinglePlayer = FALSE;
|
|
||||||
_pGUIM->gmPlayerProfile.gm_piCurrentPlayer = &_pGame->gm_iSinglePlayer;
|
|
||||||
_pGUIM->gmPlayerProfile.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmPlayerProfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartChangePlayerMenuFromSinglePlayer(void)
|
|
||||||
{
|
|
||||||
_iLocalPlayer = -1;
|
|
||||||
_bPlayerMenuFromSinglePlayer = TRUE;
|
|
||||||
_pGUIM->gmPlayerProfile.gm_piCurrentPlayer = &_pGame->gm_iSinglePlayer;
|
|
||||||
_pGUIM->gmPlayerProfile.gm_pgmParentMenu = &_pGUIM->gmSinglePlayerMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmPlayerProfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartControlsMenuFromPlayer(void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmControls.gm_pgmParentMenu = &_pGUIM->gmPlayerProfile;
|
|
||||||
ChangeToMenu(&_pGUIM->gmControls);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartControlsMenuFromOptions(void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmControls.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmControls);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartHighScoreMenu(void)
|
|
||||||
{
|
|
||||||
_pGUIM->gmHighScoreMenu.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmHighScoreMenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitScreenGame(void)
|
|
||||||
{
|
|
||||||
// _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) mgSplitScreenCfg.mg_iSelected;
|
|
||||||
_pGame->gm_StartSplitScreenCfg = _pGame->gm_MenuSplitScreenCfg;
|
|
||||||
|
|
||||||
_pGame->gm_aiStartLocalPlayers[0] = _pGame->gm_aiMenuLocalPlayers[0];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[1] = _pGame->gm_aiMenuLocalPlayers[1];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[2] = _pGame->gm_aiMenuLocalPlayers[2];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[3] = _pGame->gm_aiMenuLocalPlayers[3];
|
|
||||||
|
|
||||||
CTFileName fnWorld = _pGame->gam_strCustomLevel;
|
|
||||||
|
|
||||||
_pGame->gm_strNetworkProvider = "Local";
|
|
||||||
CUniversalSessionProperties sp;
|
|
||||||
_pGame->SetMultiPlayerSession(sp);
|
|
||||||
if (_pGame->NewGame(fnWorld.FileName(), fnWorld, sp))
|
|
||||||
{
|
|
||||||
StopMenus();
|
|
||||||
_gmRunningGameMode = GM_SPLIT_SCREEN;
|
|
||||||
} else {
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkGame(void)
|
|
||||||
{
|
|
||||||
// _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) mgSplitScreenCfg.mg_iSelected;
|
|
||||||
_pGame->gm_StartSplitScreenCfg = _pGame->gm_MenuSplitScreenCfg;
|
|
||||||
|
|
||||||
_pGame->gm_aiStartLocalPlayers[0] = _pGame->gm_aiMenuLocalPlayers[0];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[1] = _pGame->gm_aiMenuLocalPlayers[1];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[2] = _pGame->gm_aiMenuLocalPlayers[2];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[3] = _pGame->gm_aiMenuLocalPlayers[3];
|
|
||||||
|
|
||||||
CTFileName fnWorld = _pGame->gam_strCustomLevel;
|
|
||||||
|
|
||||||
_pGame->gm_strNetworkProvider = "TCP/IP Server";
|
|
||||||
CUniversalSessionProperties sp;
|
|
||||||
_pGame->SetMultiPlayerSession(sp);
|
|
||||||
if (_pGame->NewGame(_pGame->gam_strSessionName, fnWorld, sp))
|
|
||||||
{
|
|
||||||
StopMenus();
|
|
||||||
_gmRunningGameMode = GM_NETWORK;
|
|
||||||
// if starting a dedicated server
|
|
||||||
if (_pGame->gm_MenuSplitScreenCfg == CGame::SSC_DEDICATED) {
|
|
||||||
// pull down the console
|
|
||||||
extern INDEX sam_bToggleConsole;
|
|
||||||
sam_bToggleConsole = TRUE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void JoinNetworkGame(void)
|
|
||||||
{
|
|
||||||
// _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) mgSplitScreenCfg.mg_iSelected;
|
|
||||||
_pGame->gm_StartSplitScreenCfg = _pGame->gm_MenuSplitScreenCfg;
|
|
||||||
|
|
||||||
_pGame->gm_aiStartLocalPlayers[0] = _pGame->gm_aiMenuLocalPlayers[0];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[1] = _pGame->gm_aiMenuLocalPlayers[1];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[2] = _pGame->gm_aiMenuLocalPlayers[2];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[3] = _pGame->gm_aiMenuLocalPlayers[3];
|
|
||||||
|
|
||||||
_pGame->gm_strNetworkProvider = "TCP/IP Client";
|
|
||||||
if (_pGame->JoinGame(CNetworkSession(_pGame->gam_strJoinAddress)))
|
|
||||||
{
|
|
||||||
StopMenus();
|
|
||||||
_gmRunningGameMode = GM_NETWORK;
|
|
||||||
} else {
|
|
||||||
if (_pNetwork->ga_strRequiredMod != "") {
|
|
||||||
extern CTFileName _fnmModToLoad;
|
|
||||||
extern CTString _strModServerJoin;
|
|
||||||
char strModName[256] = { 0 };
|
|
||||||
char strModURL[256] = { 0 };
|
|
||||||
_pNetwork->ga_strRequiredMod.ScanF("%250[^\\]\\%s", &strModName, &strModURL);
|
|
||||||
_fnmModSelected = CTString(strModName);
|
|
||||||
_strModURLSelected = strModURL;
|
|
||||||
if (_strModURLSelected = "") {
|
|
||||||
_strModURLSelected = "http://www.croteam.com/mods/Old";
|
|
||||||
}
|
|
||||||
_strModServerSelected.PrintF("%s:%s", (const char *) _pGame->gam_strJoinAddress, (const char *) _pShell->GetValue("net_iPort"));
|
|
||||||
extern void ModConnectConfirm(void);
|
|
||||||
ModConnectConfirm();
|
|
||||||
}
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------- Servers Menu Functions
|
|
||||||
void StartSelectServerLAN(void)
|
|
||||||
{
|
|
||||||
CServersMenu &gmCurrent = _pGUIM->gmServersMenu;
|
|
||||||
|
|
||||||
gmCurrent.m_bInternet = FALSE;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmNetworkJoinMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectServerNET(void)
|
|
||||||
{
|
|
||||||
CServersMenu &gmCurrent = _pGUIM->gmServersMenu;
|
|
||||||
|
|
||||||
gmCurrent.m_bInternet = TRUE;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmNetworkJoinMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------- Levels Menu Functions
|
|
||||||
void StartSelectLevelFromSingle(void)
|
|
||||||
{
|
|
||||||
CLevelsMenu &gmCurrent = _pGUIM->gmLevelsMenu;
|
|
||||||
|
|
||||||
FilterLevels(GetSpawnFlagsForGameType(-1));
|
|
||||||
_pAfterLevelChosen = StartSinglePlayerNewMenuCustom;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmSinglePlayerMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectLevelFromSplit(void)
|
|
||||||
{
|
|
||||||
CLevelsMenu &gmCurrent = _pGUIM->gmLevelsMenu;
|
|
||||||
|
|
||||||
FilterLevels(GetSpawnFlagsForGameType(_pGUIM->gmSplitStartMenu.gm_mgGameType.mg_iSelected));
|
|
||||||
void StartSplitStartMenu(void);
|
|
||||||
_pAfterLevelChosen = StartSplitStartMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmSplitStartMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectLevelFromNetwork(void)
|
|
||||||
{
|
|
||||||
CLevelsMenu &gmCurrent = _pGUIM->gmLevelsMenu;
|
|
||||||
|
|
||||||
FilterLevels(GetSpawnFlagsForGameType(_pGUIM->gmNetworkStartMenu.gm_mgGameType.mg_iSelected));
|
|
||||||
void StartNetworkStartMenu(void);
|
|
||||||
_pAfterLevelChosen = StartNetworkStartMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmNetworkStartMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------- Players Selection Menu Functions
|
|
||||||
void StartSelectPlayersMenuFromSplit(void)
|
|
||||||
{
|
|
||||||
CSelectPlayersMenu &gmCurrent = _pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_bAllowDedicated = FALSE;
|
|
||||||
gmCurrent.gm_bAllowObserving = FALSE;
|
|
||||||
gmCurrent.gm_mgStart.mg_pActivatedFunction = &StartSplitScreenGame;
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmSplitStartMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectPlayersMenuFromNetwork(void)
|
|
||||||
{
|
|
||||||
CSelectPlayersMenu &gmCurrent = _pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_bAllowDedicated = TRUE;
|
|
||||||
gmCurrent.gm_bAllowObserving = TRUE;
|
|
||||||
gmCurrent.gm_mgStart.mg_pActivatedFunction = &StartNetworkGame;
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmNetworkStartMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectPlayersMenuFromNetworkLoad(void)
|
|
||||||
{
|
|
||||||
CSelectPlayersMenu &gmCurrent = _pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_bAllowDedicated = FALSE;
|
|
||||||
gmCurrent.gm_bAllowObserving = TRUE;
|
|
||||||
gmCurrent.gm_mgStart.mg_pActivatedFunction = &StartNetworkLoadGame;
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmLoadSaveMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectPlayersMenuFromSplitScreenLoad(void)
|
|
||||||
{
|
|
||||||
CSelectPlayersMenu &gmCurrent = _pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_bAllowDedicated = FALSE;
|
|
||||||
gmCurrent.gm_bAllowObserving = FALSE;
|
|
||||||
gmCurrent.gm_mgStart.mg_pActivatedFunction = &StartSplitScreenGameLoad;
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmLoadSaveMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectPlayersMenuFromOpen(void)
|
|
||||||
{
|
|
||||||
CSelectPlayersMenu &gmCurrent = _pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_bAllowDedicated = FALSE;
|
|
||||||
gmCurrent.gm_bAllowObserving = TRUE;
|
|
||||||
gmCurrent.gm_mgStart.mg_pActivatedFunction = &JoinNetworkGame;
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmNetworkOpenMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
|
|
||||||
/*if (sam_strNetworkSettings=="")*/ {
|
|
||||||
void StartNetworkSettingsMenu(void);
|
|
||||||
StartNetworkSettingsMenu();
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_bNoEscape = TRUE;
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmParentMenu = &_pGUIM->gmNetworkOpenMenu;
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmNextMenu = &gmCurrent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSelectPlayersMenuFromServers(void)
|
|
||||||
{
|
|
||||||
CSelectPlayersMenu &gmCurrent = _pGUIM->gmSelectPlayersMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_bAllowDedicated = FALSE;
|
|
||||||
gmCurrent.gm_bAllowObserving = TRUE;
|
|
||||||
gmCurrent.gm_mgStart.mg_pActivatedFunction = &JoinNetworkGame;
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmServersMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
|
|
||||||
/*if (sam_strNetworkSettings=="")*/ {
|
|
||||||
void StartNetworkSettingsMenu(void);
|
|
||||||
StartNetworkSettingsMenu();
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_bNoEscape = TRUE;
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmParentMenu = &_pGUIM->gmServersMenu;
|
|
||||||
_pGUIM->gmLoadSaveMenu.gm_pgmNextMenu = &gmCurrent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------- Save/Load Menu Calling Functions
|
|
||||||
void StartPlayerModelLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("CHOOSE MODEL");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEUP;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = FALSE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Models\\Player\\");
|
|
||||||
gmCurrent.gm_fnmSelected = _strLastPlayerAppearance;
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".amc");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadPlayerModel;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmPlayerProfile;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartControlsLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("LOAD CONTROLS");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = FALSE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEUP;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = FALSE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Controls\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".ctl");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadControls;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmControls;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartCustomLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("ADVANCED OPTIONS");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = FALSE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_NAMEUP;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = FALSE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Scripts\\CustomOptions\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".cfg");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadCustom;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartAddonsLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("EXECUTE ADDON");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = FALSE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_NAMEUP;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = FALSE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Scripts\\Addons\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".ini");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadAddon;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartModsLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("CHOOSE MOD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_NAMEUP;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = FALSE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Mods\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".des");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadMod;
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmMainMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkSettingsMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("CONNECTION SETTINGS");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = FALSE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEUP;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = FALSE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Scripts\\NetSettings\\");
|
|
||||||
gmCurrent.gm_fnmSelected = sam_strNetworkSettings;
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".ini");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadNetSettings;
|
|
||||||
|
|
||||||
if (sam_strNetworkSettings == "") {
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = TRANS(
|
|
||||||
"Before joining a network game,\n"
|
|
||||||
"you have to adjust your connection parameters.\n"
|
|
||||||
"Choose one option from the list.\n"
|
|
||||||
"If you have problems with connection, you can adjust\n"
|
|
||||||
"these parameters again from the Options menu.\n"
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = &_pGUIM->gmOptionsMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void StartSinglePlayerQuickLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_SINGLE_PLAYER;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory.PrintF("SaveGame\\Player%d\\Quick\\", _pGame->gm_iSinglePlayer);
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadSinglePlayer;
|
|
||||||
SetQuickLoadNotes();
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSinglePlayerLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_SINGLE_PLAYER;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("LOAD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory.PrintF("SaveGame\\Player%d\\", _pGame->gm_iSinglePlayer);
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadSinglePlayer;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSinglePlayerSaveMenu(void)
|
|
||||||
{
|
|
||||||
if (_gmRunningGameMode != GM_SINGLE_PLAYER) return;
|
|
||||||
|
|
||||||
// if no live players
|
|
||||||
if (_pGame->GetPlayersCount()>0 && _pGame->GetLivePlayersCount() <= 0) {
|
|
||||||
// do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_SINGLE_PLAYER;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("SAVE");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = TRUE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory.PrintF("SaveGame\\Player%d\\", _pGame->gm_iSinglePlayer);
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmBaseName = CTString("SaveGame");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSSaveAnyGame;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
gmCurrent.gm_strSaveDes = _pGame->GetDefaultGameDescription(TRUE);
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartDemoLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_DEMO;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("PLAY DEMO");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Demos\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".dem");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadDemo;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartDemoSaveMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
if (_gmRunningGameMode == GM_NONE) return;
|
|
||||||
_gmMenuGameMode = GM_DEMO;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("RECORD DEMO");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEUP;
|
|
||||||
gmCurrent.gm_bSave = TRUE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("Demos\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmBaseName = CTString("Demo");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".dem");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSSaveDemo;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
gmCurrent.gm_strSaveDes = _pGame->GetDefaultGameDescription(FALSE);
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkQuickLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_NETWORK;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("SaveGame\\Network\\Quick\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadNetwork;
|
|
||||||
SetQuickLoadNotes();
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_NETWORK;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("LOAD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("SaveGame\\Network\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadNetwork;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkSaveMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
if (_gmRunningGameMode != GM_NETWORK) return;
|
|
||||||
_gmMenuGameMode = GM_NETWORK;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("SAVE");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = TRUE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("SaveGame\\Network\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmBaseName = CTString("SaveGame");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSSaveAnyGame;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
gmCurrent.gm_strSaveDes = _pGame->GetDefaultGameDescription(TRUE);
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitScreenQuickLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_SPLIT_SCREEN;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("QUICK LOAD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("SaveGame\\SplitScreen\\Quick\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadSplitScreen;
|
|
||||||
SetQuickLoadNotes();
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitScreenLoadMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
_gmMenuGameMode = GM_SPLIT_SCREEN;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("LOAD");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = FALSE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("SaveGame\\SplitScreen\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSLoadSplitScreen;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitScreenSaveMenu(void)
|
|
||||||
{
|
|
||||||
CLoadSaveMenu &gmCurrent = _pGUIM->gmLoadSaveMenu;
|
|
||||||
|
|
||||||
if (_gmRunningGameMode != GM_SPLIT_SCREEN) return;
|
|
||||||
_gmMenuGameMode = GM_SPLIT_SCREEN;
|
|
||||||
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("SAVE");
|
|
||||||
gmCurrent.gm_bAllowThumbnails = TRUE;
|
|
||||||
gmCurrent.gm_iSortType = LSSORT_FILEDN;
|
|
||||||
gmCurrent.gm_bSave = TRUE;
|
|
||||||
gmCurrent.gm_bManage = TRUE;
|
|
||||||
gmCurrent.gm_fnmDirectory = CTString("SaveGame\\SplitScreen\\");
|
|
||||||
gmCurrent.gm_fnmSelected = CTString("");
|
|
||||||
gmCurrent.gm_fnmBaseName = CTString("SaveGame");
|
|
||||||
gmCurrent.gm_fnmExt = CTString(".sav");
|
|
||||||
gmCurrent.gm_pAfterFileChosen = &LSSaveAnyGame;
|
|
||||||
gmCurrent.gm_mgNotes.mg_strText = "";
|
|
||||||
gmCurrent.gm_strSaveDes = _pGame->GetDefaultGameDescription(TRUE);
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------- Disabled Menu Calling Function
|
|
||||||
void DisabledFunction(void)
|
|
||||||
{
|
|
||||||
CDisabledMenu &gmCurrent = _pGUIM->gmDisabledFunction;
|
|
||||||
|
|
||||||
gmCurrent.gm_pgmParentMenu = pgmCurrentMenu;
|
|
||||||
gmCurrent.gm_mgButton.mg_strText = TRANS("The feature is not available in this version!");
|
|
||||||
gmCurrent.gm_mgTitle.mg_strText = TRANS("DISABLED");
|
|
||||||
ChangeToMenu(&gmCurrent);
|
|
||||||
}
|
|
@ -1,81 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_STARTERS_H
|
|
||||||
#define SE_INCL_MENU_STARTERS_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void StartVideoOptionsMenu(void);
|
|
||||||
void StartAudioOptionsMenu(void);
|
|
||||||
void StartNetworkMenu(void);
|
|
||||||
void StartNetworkJoinMenu(void);
|
|
||||||
void StartNetworkStartMenu(void);
|
|
||||||
void StartNetworkOpenMenu(void);
|
|
||||||
void StartSplitScreenMenu(void);
|
|
||||||
void StartSplitStartMenu(void);
|
|
||||||
void StartSinglePlayerNewMenuCustom(void);
|
|
||||||
void StartSinglePlayerNewMenu(void);
|
|
||||||
void StartSinglePlayerQuickLoadMenu(void);
|
|
||||||
void StartSinglePlayerLoadMenu(void);
|
|
||||||
void StartSinglePlayerSaveMenu(void);
|
|
||||||
void StartDemoLoadMenu(void);
|
|
||||||
void StartDemoSaveMenu(void);
|
|
||||||
void StartNetworkQuickLoadMenu(void);
|
|
||||||
void StartNetworkLoadMenu(void);
|
|
||||||
void StartNetworkSaveMenu(void);
|
|
||||||
void StartSplitScreenQuickLoadMenu(void);
|
|
||||||
void StartSplitScreenLoadMenu(void);
|
|
||||||
void StartSplitScreenSaveMenu(void);
|
|
||||||
void StartVarGameOptions(void);
|
|
||||||
void StartSinglePlayerGameOptions(void);
|
|
||||||
void StartGameOptionsFromNetwork(void);
|
|
||||||
void StartGameOptionsFromSplitScreen(void);
|
|
||||||
void StartRenderingOptionsMenu(void);
|
|
||||||
void StartCustomizeKeyboardMenu(void);
|
|
||||||
void StartCustomizeAxisMenu(void);
|
|
||||||
void StartOptionsMenu(void);
|
|
||||||
void StartCurrentLoadMenu();
|
|
||||||
void StartCurrentSaveMenu();
|
|
||||||
void StartCurrentQuickLoadMenu();
|
|
||||||
void StartChangePlayerMenuFromOptions(void);
|
|
||||||
void StartChangePlayerMenuFromSinglePlayer(void);
|
|
||||||
void StartControlsMenuFromPlayer(void);
|
|
||||||
void StartControlsMenuFromOptions(void);
|
|
||||||
void StartSelectLevelFromSingle(void);
|
|
||||||
void StartHighScoreMenu(void);
|
|
||||||
void StartSelectPlayersMenuFromSplit(void);
|
|
||||||
void StartSelectPlayersMenuFromNetwork(void);
|
|
||||||
void StartSelectPlayersMenuFromOpen(void);
|
|
||||||
void StartSelectPlayersMenuFromServers(void);
|
|
||||||
void StartSelectServerLAN(void);
|
|
||||||
void StartSelectServerNET(void);
|
|
||||||
void StartSelectLevelFromSplit(void);
|
|
||||||
void StartSelectLevelFromNetwork(void);
|
|
||||||
void StartSelectPlayersMenuFromSplitScreen(void);
|
|
||||||
void StartSelectPlayersMenuFromNetworkLoad(void);
|
|
||||||
void StartSelectPlayersMenuFromSplitScreenLoad(void);
|
|
||||||
void StartPlayerModelLoadMenu(void);
|
|
||||||
void StartControlsLoadMenu(void);
|
|
||||||
void StartCustomLoadMenu(void);
|
|
||||||
void StartAddonsLoadMenu(void);
|
|
||||||
void StartModsLoadMenu(void);
|
|
||||||
void StartNetworkSettingsMenu(void);
|
|
||||||
void StartSinglePlayerMenu(void);
|
|
||||||
void DisabledFunction(void);
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,230 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
/* This file contains additional functions called from starters. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Build.h>
|
|
||||||
|
|
||||||
#include "MenuManager.h"
|
|
||||||
#include "MenuStartersAF.h"
|
|
||||||
#include "MenuStarters.h"
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
|
|
||||||
static CTFileName _fnDemoToPlay;
|
|
||||||
static CTFileName _fnGameToLoad;
|
|
||||||
|
|
||||||
extern CTString sam_strNetworkSettings;
|
|
||||||
|
|
||||||
extern CTFileName _fnmModSelected;
|
|
||||||
extern CTString _strModURLSelected;
|
|
||||||
extern CTString _strModServerSelected;
|
|
||||||
|
|
||||||
|
|
||||||
BOOL LSLoadSinglePlayer(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
_pGame->gm_StartSplitScreenCfg = CGame::SSC_PLAY1;
|
|
||||||
|
|
||||||
_pGame->gm_aiStartLocalPlayers[0] = _pGame->gm_iSinglePlayer;
|
|
||||||
_pGame->gm_aiStartLocalPlayers[1] = -1;
|
|
||||||
_pGame->gm_aiStartLocalPlayers[2] = -1;
|
|
||||||
_pGame->gm_aiStartLocalPlayers[3] = -1;
|
|
||||||
_pGame->gm_strNetworkProvider = "Local";
|
|
||||||
if (_pGame->LoadGame(fnm)) {
|
|
||||||
StopMenus();
|
|
||||||
_gmRunningGameMode = GM_SINGLE_PLAYER;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadNetwork(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
// call local players menu
|
|
||||||
_fnGameToLoad = fnm;
|
|
||||||
StartSelectPlayersMenuFromNetworkLoad();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadSplitScreen(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
// call local players menu
|
|
||||||
_fnGameToLoad = fnm;
|
|
||||||
StartSelectPlayersMenuFromSplitScreenLoad();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartDemoPlay(void)
|
|
||||||
{
|
|
||||||
_pGame->gm_StartSplitScreenCfg = CGame::SSC_OBSERVER;
|
|
||||||
// play the demo
|
|
||||||
_pGame->gm_strNetworkProvider = "Local";
|
|
||||||
if (_pGame->StartDemoPlay(_fnDemoToPlay))
|
|
||||||
{
|
|
||||||
// exit menu and pull up the console
|
|
||||||
StopMenus();
|
|
||||||
if (_pGame->gm_csConsoleState != CS_OFF) _pGame->gm_csConsoleState = CS_TURNINGOFF;
|
|
||||||
_gmRunningGameMode = GM_DEMO;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extern BOOL LSLoadDemo(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
// call local players menu
|
|
||||||
_fnDemoToPlay = fnm;
|
|
||||||
StartDemoPlay();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadPlayerModel(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
// get base filename
|
|
||||||
CTString strBaseName = fnm.FileName();
|
|
||||||
// set it for current player
|
|
||||||
CPlayerCharacter &pc = _pGame->gm_apcPlayers[*_pGUIM->gmPlayerProfile.gm_piCurrentPlayer];
|
|
||||||
CPlayerSettings *pps = (CPlayerSettings *)pc.pc_aubAppearance;
|
|
||||||
memset(pps->ps_achModelFile, 0, sizeof(pps->ps_achModelFile));
|
|
||||||
strncpy(pps->ps_achModelFile, strBaseName, sizeof(pps->ps_achModelFile));
|
|
||||||
|
|
||||||
void MenuGoToParent(void);
|
|
||||||
MenuGoToParent();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadControls(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
ControlsMenuOn();
|
|
||||||
_pGame->gm_ctrlControlsExtra->Load_t(fnm);
|
|
||||||
ControlsMenuOff();
|
|
||||||
}
|
|
||||||
catch (char *strError) {
|
|
||||||
CPrintF("%s", strError);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MenuGoToParent(void);
|
|
||||||
MenuGoToParent();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadAddon(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
extern INDEX _iAddonExecState;
|
|
||||||
extern CTFileName _fnmAddonToExec;
|
|
||||||
_iAddonExecState = 1;
|
|
||||||
_fnmAddonToExec = fnm;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadMod(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
_fnmModSelected = fnm;
|
|
||||||
extern void ModConfirm(void);
|
|
||||||
ModConfirm();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadCustom(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
_pGUIM->gmVarMenu.gm_mgTitle.mg_strText = TRANS("ADVANCED OPTIONS");
|
|
||||||
// LoadStringVar(fnm.NoExt()+".des", mgVarTitle.mg_strText);
|
|
||||||
// mgVarTitle.mg_strText.OnlyFirstLine();
|
|
||||||
_pGUIM->gmVarMenu.gm_fnmMenuCFG = fnm;
|
|
||||||
_pGUIM->gmVarMenu.gm_pgmParentMenu = &_pGUIM->gmLoadSaveMenu;
|
|
||||||
ChangeToMenu(&_pGUIM->gmVarMenu);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSLoadNetSettings(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
sam_strNetworkSettings = fnm;
|
|
||||||
CTString strCmd;
|
|
||||||
strCmd.PrintF("include \"%s\"", (const char*)sam_strNetworkSettings);
|
|
||||||
_pShell->Execute(strCmd);
|
|
||||||
|
|
||||||
void MenuGoToParent(void);
|
|
||||||
MenuGoToParent();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// same function for saving in singleplay, network and splitscreen
|
|
||||||
BOOL LSSaveAnyGame(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
if (_pGame->SaveGame(fnm)) {
|
|
||||||
StopMenus();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LSSaveDemo(const CTFileName &fnm)
|
|
||||||
{
|
|
||||||
// save the demo
|
|
||||||
if (_pGame->StartDemoRec(fnm)) {
|
|
||||||
StopMenus();
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartNetworkLoadGame(void)
|
|
||||||
{
|
|
||||||
// _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) mgSplitScreenCfg.mg_iSelected;
|
|
||||||
_pGame->gm_StartSplitScreenCfg = _pGame->gm_MenuSplitScreenCfg;
|
|
||||||
|
|
||||||
_pGame->gm_aiStartLocalPlayers[0] = _pGame->gm_aiMenuLocalPlayers[0];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[1] = _pGame->gm_aiMenuLocalPlayers[1];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[2] = _pGame->gm_aiMenuLocalPlayers[2];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[3] = _pGame->gm_aiMenuLocalPlayers[3];
|
|
||||||
|
|
||||||
_pGame->gm_strNetworkProvider = "TCP/IP Server";
|
|
||||||
if (_pGame->LoadGame(_fnGameToLoad))
|
|
||||||
{
|
|
||||||
StopMenus();
|
|
||||||
_gmRunningGameMode = GM_NETWORK;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StartSplitScreenGameLoad(void)
|
|
||||||
{
|
|
||||||
// _pGame->gm_MenuSplitScreenCfg = (enum CGame::SplitScreenCfg) mgSplitScreenCfg.mg_iSelected;
|
|
||||||
_pGame->gm_StartSplitScreenCfg = _pGame->gm_MenuSplitScreenCfg;
|
|
||||||
|
|
||||||
_pGame->gm_aiStartLocalPlayers[0] = _pGame->gm_aiMenuLocalPlayers[0];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[1] = _pGame->gm_aiMenuLocalPlayers[1];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[2] = _pGame->gm_aiMenuLocalPlayers[2];
|
|
||||||
_pGame->gm_aiStartLocalPlayers[3] = _pGame->gm_aiMenuLocalPlayers[3];
|
|
||||||
|
|
||||||
_pGame->gm_strNetworkProvider = "Local";
|
|
||||||
if (_pGame->LoadGame(_fnGameToLoad)) {
|
|
||||||
StopMenus();
|
|
||||||
_gmRunningGameMode = GM_SPLIT_SCREEN;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_gmRunningGameMode = GM_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_STARTERSAF_H
|
|
||||||
#define SE_INCL_MENU_STARTERSAF_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
BOOL LSLoadSinglePlayer(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadNetwork(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadSplitScreen(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadDemo(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadPlayerModel(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadControls(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadAddon(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadMod(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadCustom(const CTFileName &fnm);
|
|
||||||
BOOL LSLoadNetSettings(const CTFileName &fnm);
|
|
||||||
BOOL LSSaveAnyGame(const CTFileName &fnm);
|
|
||||||
BOOL LSSaveDemo(const CTFileName &fnm);
|
|
||||||
void StartDemoPlay(void);
|
|
||||||
void StartNetworkLoadGame(void);
|
|
||||||
void StartSplitScreenGameLoad(void);
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
@ -1,314 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#include "SeriousSam/StdH.h"
|
|
||||||
#include <Engine/Build.h>
|
|
||||||
|
|
||||||
#include "MenuStuff.h"
|
|
||||||
|
|
||||||
#define RADIOTRANS(str) ("ETRS" str)
|
|
||||||
|
|
||||||
CTString astrNoYes[] = {
|
|
||||||
RADIOTRANS("No"),
|
|
||||||
RADIOTRANS("Yes"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrComputerInvoke[] = {
|
|
||||||
RADIOTRANS("Use"),
|
|
||||||
RADIOTRANS("Double-click use"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrWeapon[] = {
|
|
||||||
RADIOTRANS("Only if new"),
|
|
||||||
RADIOTRANS("Never"),
|
|
||||||
RADIOTRANS("Always"),
|
|
||||||
RADIOTRANS("Only if stronger"),
|
|
||||||
};
|
|
||||||
|
|
||||||
PIX apixWidths[][2] = {
|
|
||||||
320, 240,
|
|
||||||
400, 300,
|
|
||||||
512, 384,
|
|
||||||
640, 240,
|
|
||||||
640, 480,
|
|
||||||
720, 540,
|
|
||||||
800, 300,
|
|
||||||
800, 600,
|
|
||||||
960, 720,
|
|
||||||
1024, 384,
|
|
||||||
1024, 768,
|
|
||||||
1152, 864,
|
|
||||||
1280, 480,
|
|
||||||
1280, 960,
|
|
||||||
1600, 600,
|
|
||||||
1600, 1200,
|
|
||||||
1920, 720,
|
|
||||||
1920, 1440,
|
|
||||||
2048, 786,
|
|
||||||
2048, 1536,
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrCrosshair[] = {
|
|
||||||
"",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair1.tex",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair2.tex",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair3.tex",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair4.tex",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair5.tex",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair6.tex",
|
|
||||||
"Textures\\Interface\\Crosshairs\\Crosshair7.tex",
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrMaxPlayersRadioTexts[] = {
|
|
||||||
RADIOTRANS("2"),
|
|
||||||
RADIOTRANS("3"),
|
|
||||||
RADIOTRANS("4"),
|
|
||||||
RADIOTRANS("5"),
|
|
||||||
RADIOTRANS("6"),
|
|
||||||
RADIOTRANS("7"),
|
|
||||||
RADIOTRANS("8"),
|
|
||||||
RADIOTRANS("9"),
|
|
||||||
RADIOTRANS("10"),
|
|
||||||
RADIOTRANS("11"),
|
|
||||||
RADIOTRANS("12"),
|
|
||||||
RADIOTRANS("13"),
|
|
||||||
RADIOTRANS("14"),
|
|
||||||
RADIOTRANS("15"),
|
|
||||||
RADIOTRANS("16"),
|
|
||||||
};
|
|
||||||
// here, we just reserve space for up to 16 different game types
|
|
||||||
// actual names are added later
|
|
||||||
CTString astrGameTypeRadioTexts[] = {
|
|
||||||
"", "", "", "", "",
|
|
||||||
"", "", "", "", "",
|
|
||||||
"", "", "", "", "",
|
|
||||||
"", "", "", "", "",
|
|
||||||
};
|
|
||||||
|
|
||||||
INDEX ctGameTypeRadioTexts = 1;
|
|
||||||
|
|
||||||
CTString astrDifficultyRadioTexts[] = {
|
|
||||||
RADIOTRANS("Tourist"),
|
|
||||||
RADIOTRANS("Easy"),
|
|
||||||
RADIOTRANS("Normal"),
|
|
||||||
RADIOTRANS("Hard"),
|
|
||||||
RADIOTRANS("Serious"),
|
|
||||||
RADIOTRANS("Mental"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrSplitScreenRadioTexts[] = {
|
|
||||||
RADIOTRANS("1"),
|
|
||||||
RADIOTRANS("2 - split screen"),
|
|
||||||
RADIOTRANS("3 - split screen"),
|
|
||||||
RADIOTRANS("4 - split screen"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrDisplayPrefsRadioTexts[] = {
|
|
||||||
RADIOTRANS("Speed"),
|
|
||||||
RADIOTRANS("Normal"),
|
|
||||||
RADIOTRANS("Quality"),
|
|
||||||
RADIOTRANS("Custom"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrDisplayAPIRadioTexts[] = {
|
|
||||||
RADIOTRANS("OpenGL"),
|
|
||||||
#ifdef SE1_D3D
|
|
||||||
RADIOTRANS("Direct3D"),
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrBitsPerPixelRadioTexts[] = {
|
|
||||||
RADIOTRANS("Desktop"),
|
|
||||||
RADIOTRANS("16 BPP"),
|
|
||||||
RADIOTRANS("32 BPP"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrFrequencyRadioTexts[] = {
|
|
||||||
RADIOTRANS("No sound"),
|
|
||||||
RADIOTRANS("11kHz"),
|
|
||||||
RADIOTRANS("22kHz"),
|
|
||||||
RADIOTRANS("44kHz"),
|
|
||||||
};
|
|
||||||
|
|
||||||
CTString astrSoundAPIRadioTexts[] = {
|
|
||||||
#ifdef PLATFORM_WIN32
|
|
||||||
RADIOTRANS("WaveOut"),
|
|
||||||
RADIOTRANS("DirectSound"),
|
|
||||||
RADIOTRANS("EAX"),
|
|
||||||
#else
|
|
||||||
RADIOTRANS("Simple Directmedia Layer"),
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
ULONG GetSpawnFlagsForGameType(INDEX iGameType)
|
|
||||||
{
|
|
||||||
if (iGameType == -1) return SPF_SINGLEPLAYER;
|
|
||||||
|
|
||||||
// get function that will provide us the flags
|
|
||||||
CShellSymbol *pss = _pShell->GetSymbol("GetSpawnFlagsForGameTypeSS", /*bDeclaredOnly=*/ TRUE);
|
|
||||||
// if none
|
|
||||||
if (pss == NULL) {
|
|
||||||
// error
|
|
||||||
ASSERT(FALSE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ULONG(*pFunc)(INDEX) = (ULONG(*)(INDEX))pss->ss_pvValue;
|
|
||||||
return pFunc(iGameType);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL IsMenuEnabled(const CTString &strMenuName)
|
|
||||||
{
|
|
||||||
// get function that will provide us the flags
|
|
||||||
CShellSymbol *pss = _pShell->GetSymbol("IsMenuEnabledSS", /*bDeclaredOnly=*/ TRUE);
|
|
||||||
// if none
|
|
||||||
if (pss == NULL) {
|
|
||||||
// error
|
|
||||||
ASSERT(FALSE);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL(*pFunc)(const CTString &) = (BOOL(*)(const CTString &))pss->ss_pvValue;
|
|
||||||
return pFunc(strMenuName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize game type strings table
|
|
||||||
void InitGameTypes(void)
|
|
||||||
{
|
|
||||||
// get function that will provide us the info about gametype
|
|
||||||
CShellSymbol *pss = _pShell->GetSymbol("GetGameTypeNameSS", /*bDeclaredOnly=*/ TRUE);
|
|
||||||
// if none
|
|
||||||
if (pss == NULL) {
|
|
||||||
// error
|
|
||||||
astrGameTypeRadioTexts[0] = "<\?\?\?>";
|
|
||||||
ctGameTypeRadioTexts = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// for each mode
|
|
||||||
for (ctGameTypeRadioTexts = 0; ctGameTypeRadioTexts<ARRAYCOUNT(astrGameTypeRadioTexts); ctGameTypeRadioTexts++) {
|
|
||||||
// get the text
|
|
||||||
CTString(*pFunc)(INDEX) = (CTString(*)(INDEX))pss->ss_pvValue;
|
|
||||||
CTString strMode = pFunc(ctGameTypeRadioTexts);
|
|
||||||
// if no mode modes
|
|
||||||
if (strMode == "") {
|
|
||||||
// stop
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// add that mode
|
|
||||||
astrGameTypeRadioTexts[ctGameTypeRadioTexts] = strMode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int qsort_CompareFileInfos_NameUp(const void *elem1, const void *elem2)
|
|
||||||
{
|
|
||||||
const CFileInfo &fi1 = **(CFileInfo **)elem1;
|
|
||||||
const CFileInfo &fi2 = **(CFileInfo **)elem2;
|
|
||||||
return strcmp(fi1.fi_strName, fi2.fi_strName);
|
|
||||||
}
|
|
||||||
|
|
||||||
int qsort_CompareFileInfos_NameDn(const void *elem1, const void *elem2)
|
|
||||||
{
|
|
||||||
const CFileInfo &fi1 = **(CFileInfo **)elem1;
|
|
||||||
const CFileInfo &fi2 = **(CFileInfo **)elem2;
|
|
||||||
return -strcmp(fi1.fi_strName, fi2.fi_strName);
|
|
||||||
}
|
|
||||||
|
|
||||||
int qsort_CompareFileInfos_FileUp(const void *elem1, const void *elem2)
|
|
||||||
{
|
|
||||||
const CFileInfo &fi1 = **(CFileInfo **)elem1;
|
|
||||||
const CFileInfo &fi2 = **(CFileInfo **)elem2;
|
|
||||||
return strcmp(fi1.fi_fnFile, fi2.fi_fnFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
int qsort_CompareFileInfos_FileDn(const void *elem1, const void *elem2)
|
|
||||||
{
|
|
||||||
const CFileInfo &fi1 = **(CFileInfo **)elem1;
|
|
||||||
const CFileInfo &fi2 = **(CFileInfo **)elem2;
|
|
||||||
return -strcmp(fi1.fi_fnFile, fi2.fi_fnFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
INDEX APIToSwitch(enum GfxAPIType gat)
|
|
||||||
{
|
|
||||||
switch (gat) {
|
|
||||||
case GAT_OGL: return 0;
|
|
||||||
#ifdef SE1_D3D
|
|
||||||
case GAT_D3D: return 1;
|
|
||||||
#endif // SE1_D3D
|
|
||||||
default: ASSERT(FALSE); return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum GfxAPIType SwitchToAPI(INDEX i)
|
|
||||||
{
|
|
||||||
switch (i) {
|
|
||||||
case 0: return GAT_OGL;
|
|
||||||
#ifdef SE1_D3D
|
|
||||||
case 1: return GAT_D3D;
|
|
||||||
#endif // SE1_D3D
|
|
||||||
default: ASSERT(FALSE); return GAT_OGL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
INDEX DepthToSwitch(enum DisplayDepth dd)
|
|
||||||
{
|
|
||||||
switch (dd) {
|
|
||||||
case DD_DEFAULT: return 0;
|
|
||||||
case DD_16BIT: return 1;
|
|
||||||
case DD_32BIT: return 2;
|
|
||||||
default: ASSERT(FALSE); return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum DisplayDepth SwitchToDepth(INDEX i)
|
|
||||||
{
|
|
||||||
switch (i) {
|
|
||||||
case 0: return DD_DEFAULT;
|
|
||||||
case 1: return DD_16BIT;
|
|
||||||
case 2: return DD_32BIT;
|
|
||||||
default: ASSERT(FALSE); return DD_DEFAULT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// controls that are currently customized
|
|
||||||
CTFileName _fnmControlsToCustomize = CTString("");
|
|
||||||
|
|
||||||
void ControlsMenuOn()
|
|
||||||
{
|
|
||||||
_pGame->SavePlayersAndControls();
|
|
||||||
try {
|
|
||||||
_pGame->gm_ctrlControlsExtra->Load_t(_fnmControlsToCustomize);
|
|
||||||
}
|
|
||||||
catch (char *strError) {
|
|
||||||
WarningMessage(strError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ControlsMenuOff()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
if (_pGame->gm_ctrlControlsExtra->ctrl_lhButtonActions.Count()>0) {
|
|
||||||
_pGame->gm_ctrlControlsExtra->Save_t(_fnmControlsToCustomize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (char *strError) {
|
|
||||||
FatalError(strError);
|
|
||||||
}
|
|
||||||
|
|
||||||
_pGame->gm_ctrlControlsExtra->DeleteAllButtonActions();
|
|
||||||
|
|
||||||
_pGame->LoadPlayersAndControls();
|
|
||||||
}
|
|
||||||
|
|
@ -1,84 +0,0 @@
|
|||||||
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of version 2 of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation
|
|
||||||
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
||||||
|
|
||||||
#ifndef SE_INCL_MENU_STUFF_H
|
|
||||||
#define SE_INCL_MENU_STUFF_H
|
|
||||||
#ifdef PRAGMA_ONCE
|
|
||||||
#pragma once
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "SeriousSam/FileInfo.h"
|
|
||||||
|
|
||||||
#define TRIGGER_MG(mg, y, up, down, text, astr) \
|
|
||||||
mg.mg_pmgUp = &up; \
|
|
||||||
mg.mg_pmgDown = &down; \
|
|
||||||
mg.mg_boxOnScreen = BoxMediumRow(y); \
|
|
||||||
gm_lhGadgets.AddTail(mg.mg_lnNode); \
|
|
||||||
mg.mg_astrTexts = astr; \
|
|
||||||
mg.mg_ctTexts = sizeof(astr) / sizeof(astr[0]); \
|
|
||||||
mg.mg_iSelected = 0; \
|
|
||||||
mg.mg_strLabel = text; \
|
|
||||||
mg.mg_strValue = astr[0];
|
|
||||||
|
|
||||||
|
|
||||||
extern INDEX ctGameTypeRadioTexts;
|
|
||||||
|
|
||||||
extern CTString astrNoYes[2];
|
|
||||||
extern CTString astrWeapon[4];
|
|
||||||
extern CTString astrComputerInvoke[2];
|
|
||||||
extern CTString astrCrosshair[8];
|
|
||||||
extern CTString astrMaxPlayersRadioTexts[15];
|
|
||||||
extern CTString astrGameTypeRadioTexts[20];
|
|
||||||
extern CTString astrDifficultyRadioTexts[6];
|
|
||||||
extern CTString astrSplitScreenRadioTexts[4];
|
|
||||||
extern CTString astrDisplayPrefsRadioTexts[4];
|
|
||||||
|
|
||||||
// !!! FIXME: this sucks
|
|
||||||
#ifdef SE1_D3D
|
|
||||||
extern CTString astrDisplayAPIRadioTexts[2];
|
|
||||||
#else
|
|
||||||
extern CTString astrDisplayAPIRadioTexts[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern CTString astrBitsPerPixelRadioTexts[3];
|
|
||||||
extern CTString astrFrequencyRadioTexts[4];
|
|
||||||
|
|
||||||
// !!! FIXME: this sucks
|
|
||||||
#if PLATFORM_WIN32
|
|
||||||
extern CTString astrSoundAPIRadioTexts[3];
|
|
||||||
#else
|
|
||||||
extern CTString astrSoundAPIRadioTexts[1];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern PIX apixWidths[20][2];
|
|
||||||
|
|
||||||
ULONG GetSpawnFlagsForGameType(INDEX iGameType);
|
|
||||||
BOOL IsMenuEnabled(const CTString &strMenuName);
|
|
||||||
void InitGameTypes(void);
|
|
||||||
|
|
||||||
int qsort_CompareFileInfos_NameUp(const void *elem1, const void *elem2);
|
|
||||||
int qsort_CompareFileInfos_NameDn(const void *elem1, const void *elem2);
|
|
||||||
int qsort_CompareFileInfos_FileUp(const void *elem1, const void *elem2);
|
|
||||||
int qsort_CompareFileInfos_FileDn(const void *elem1, const void *elem2);
|
|
||||||
|
|
||||||
INDEX APIToSwitch(enum GfxAPIType gat);
|
|
||||||
enum GfxAPIType SwitchToAPI(INDEX i);
|
|
||||||
INDEX DepthToSwitch(enum DisplayDepth dd);
|
|
||||||
enum DisplayDepth SwitchToDepth(INDEX i);
|
|
||||||
|
|
||||||
void ControlsMenuOn();
|
|
||||||
void ControlsMenuOff();
|
|
||||||
|
|
||||||
#endif /* include-once check. */
|
|
6151
Sources/SeriousSam/Menu.cpp
Normal file
6151
Sources/SeriousSam/Menu.cpp
Normal file
File diff suppressed because it is too large
Load Diff
306
Sources/SeriousSam/Menu.h
Normal file
306
Sources/SeriousSam/Menu.h
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
|
||||||
|
|
||||||
|
// set new thumbnail
|
||||||
|
void SetThumbnail(CTFileName fn);
|
||||||
|
// remove thumbnail
|
||||||
|
void ClearThumbnail(void);
|
||||||
|
|
||||||
|
void InitializeMenus( void);
|
||||||
|
void DestroyMenus( void);
|
||||||
|
void MenuOnKeyDown( int iVKey);
|
||||||
|
void MenuOnChar(MSG msg);
|
||||||
|
void MenuOnMouseMove(PIX pixI, PIX pixJ);
|
||||||
|
void MenuOnLMBDown(void);
|
||||||
|
BOOL DoMenu( CDrawPort *pdp); // returns TRUE if still active, FALSE if should quit
|
||||||
|
void StartMenus( char *str="");
|
||||||
|
void StopMenus(BOOL bGoToRoot =TRUE);
|
||||||
|
BOOL IsMenusInRoot(void);
|
||||||
|
void ChangeToMenu( class CGameMenu *pgmNew);
|
||||||
|
extern void PlayMenuSound(CSoundData *psd);
|
||||||
|
|
||||||
|
#define KEYS_ON_SCREEN 14
|
||||||
|
#define LEVELS_ON_SCREEN 16
|
||||||
|
#define SERVERS_ON_SCREEN 15
|
||||||
|
#define VARS_ON_SCREEN 14
|
||||||
|
|
||||||
|
extern CListHead _lhServers;
|
||||||
|
|
||||||
|
extern class CPlayerProfileMenu gmPlayerProfile;
|
||||||
|
extern class CSelectPlayersMenu gmSelectPlayersMenu;
|
||||||
|
extern class CCustomizeAxisMenu gmCustomizeAxisMenu;
|
||||||
|
extern INDEX _iLocalPlayer;
|
||||||
|
|
||||||
|
enum GameMode {
|
||||||
|
GM_NONE = 0,
|
||||||
|
GM_SINGLE_PLAYER,
|
||||||
|
GM_NETWORK,
|
||||||
|
GM_SPLIT_SCREEN,
|
||||||
|
GM_DEMO,
|
||||||
|
GM_INTRO,
|
||||||
|
};
|
||||||
|
extern GameMode _gmMenuGameMode;
|
||||||
|
extern GameMode _gmRunningGameMode;
|
||||||
|
|
||||||
|
extern CGameMenu *pgmCurrentMenu;
|
||||||
|
|
||||||
|
class CGameMenu {
|
||||||
|
public:
|
||||||
|
CListHead gm_lhGadgets;
|
||||||
|
CGameMenu *gm_pgmParentMenu;
|
||||||
|
BOOL gm_bPopup;
|
||||||
|
const char *gm_strName; // menu name (for mod interface only)
|
||||||
|
class CMenuGadget *gm_pmgSelectedByDefault;
|
||||||
|
class CMenuGadget *gm_pmgArrowUp;
|
||||||
|
class CMenuGadget *gm_pmgArrowDn;
|
||||||
|
class CMenuGadget *gm_pmgListTop;
|
||||||
|
class CMenuGadget *gm_pmgListBottom;
|
||||||
|
INDEX gm_iListOffset;
|
||||||
|
INDEX gm_iListWantedItem; // item you want to focus initially
|
||||||
|
INDEX gm_ctListVisible;
|
||||||
|
INDEX gm_ctListTotal;
|
||||||
|
CGameMenu(void);
|
||||||
|
void ScrollList(INDEX iDir);
|
||||||
|
void KillAllFocuses(void);
|
||||||
|
virtual void Initialize_t(void);
|
||||||
|
virtual void Destroy(void);
|
||||||
|
virtual void StartMenu(void);
|
||||||
|
virtual void FillListItems(void);
|
||||||
|
virtual void EndMenu(void);
|
||||||
|
// return TRUE if handled
|
||||||
|
virtual BOOL OnKeyDown( int iVKey);
|
||||||
|
virtual BOOL OnChar(MSG msg);
|
||||||
|
virtual void Think(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CConfirmMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
// return TRUE if handled
|
||||||
|
BOOL OnKeyDown( int iVKey);
|
||||||
|
|
||||||
|
void BeLarge(void);
|
||||||
|
void BeSmall(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CMainMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CInGameMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSinglePlayerMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CCreditsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CDisabledMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSinglePlayerNewMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CLevelsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void FillListItems(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CVarMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
CTFileName gm_fnmMenuCFG;
|
||||||
|
void Initialize_t(void);
|
||||||
|
void FillListItems(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
void Think(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CServersMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
BOOL m_bInternet;
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void Think(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CPlayerProfileMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
INDEX *gm_piCurrentPlayer;
|
||||||
|
void Initialize_t(void);
|
||||||
|
INDEX ComboFromPlayer(INDEX iPlayer);
|
||||||
|
INDEX PlayerFromCombo(INDEX iCombo);
|
||||||
|
void SelectPlayer(INDEX iPlayer);
|
||||||
|
void ApplyComboPlayer(INDEX iPlayer);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CControlsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
void ObtainActionSettings(void);
|
||||||
|
void ApplyActionSettings(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CFileInfo {
|
||||||
|
public:
|
||||||
|
CListNode fi_lnNode;
|
||||||
|
CTFileName fi_fnFile;
|
||||||
|
CTString fi_strName;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CLoadSaveMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
// settings adjusted before starting the menu
|
||||||
|
CGameMenu *gm_pgmNextMenu; // menu to go to after selecting a file (if null, use parent menu)
|
||||||
|
CTFileName gm_fnmSelected; // file that is selected initially
|
||||||
|
CTFileName gm_fnmDirectory; // directory that should be read
|
||||||
|
CTFileName gm_fnmBaseName; // base file name for saving (numbers are auto-added)
|
||||||
|
CTFileName gm_fnmExt; // accepted file extension
|
||||||
|
BOOL gm_bSave; // set when chosing file for saving
|
||||||
|
BOOL gm_bManage; // set if managing (rename/delet is enabled)
|
||||||
|
CTString gm_strSaveDes; // default description (if saving)
|
||||||
|
BOOL gm_bAllowThumbnails; // set when chosing file for saving
|
||||||
|
BOOL gm_bNoEscape; // forbid exiting with escape/rmb
|
||||||
|
#define LSSORT_NONE 0
|
||||||
|
#define LSSORT_NAMEUP 1
|
||||||
|
#define LSSORT_NAMEDN 2
|
||||||
|
#define LSSORT_FILEUP 3
|
||||||
|
#define LSSORT_FILEDN 4
|
||||||
|
INDEX gm_iSortType; // sort type
|
||||||
|
|
||||||
|
// function to activate when file is chosen
|
||||||
|
// return true if saving succeeded - description is saved automatically
|
||||||
|
// always return true for loading
|
||||||
|
BOOL (*gm_pAfterFileChosen)(const CTFileName &fnm);
|
||||||
|
|
||||||
|
// internal properties
|
||||||
|
CListHead gm_lhFileInfos; // all file infos to list
|
||||||
|
INDEX gm_iLastFile; // index of last saved file in numbered format
|
||||||
|
|
||||||
|
// called to get info of a file from directory, or to skip it
|
||||||
|
BOOL ParseFile(const CTFileName &fnm, CTString &strName);
|
||||||
|
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
void FillListItems(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern CLoadSaveMenu gmLoadSaveMenu;
|
||||||
|
|
||||||
|
class CHighScoreMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CNetworkMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CNetworkStartMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CNetworkOpenMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CNetworkJoinMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSplitScreenMenu: public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSplitStartMenu: public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSelectPlayersMenu: public CGameMenu {
|
||||||
|
public:
|
||||||
|
BOOL gm_bAllowDedicated;
|
||||||
|
BOOL gm_bAllowObserving;
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class COptionsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CVideoOptionsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void StartMenu(void);
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CRenderingOptionsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CAudioOptionsMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void StartMenu(void);
|
||||||
|
void Initialize_t(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CCustomizeKeyboardMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
void FillListItems(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CCustomizeAxisMenu : public CGameMenu {
|
||||||
|
public:
|
||||||
|
~CCustomizeAxisMenu(void);
|
||||||
|
void Initialize_t(void);
|
||||||
|
void StartMenu(void);
|
||||||
|
void EndMenu(void);
|
||||||
|
void ObtainActionSettings(void);
|
||||||
|
void ApplyActionSettings(void);
|
||||||
|
};
|
||||||
|
|
1915
Sources/SeriousSam/MenuGadgets.cpp
Normal file
1915
Sources/SeriousSam/MenuGadgets.cpp
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user