📄 menu.cpp
字号:
m_pUI->GetGfx()->DrawLine(14, 26, 161, 26, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 27, 161, 27, MAKERGB(16, 81, 206));
m_pUI->GetGfx()->DrawLine(14, 28, 161, 28, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 51, 161, 51, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 52, 161, 52, MAKERGB(16, 81, 206));
m_pUI->GetGfx()->DrawLine(14, 53, 161, 53, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 71, 161, 71, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 72, 161, 72, MAKERGB(16, 81, 206));
m_pUI->GetGfx()->DrawLine(14, 73, 161, 73, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 116, 161, 116, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 117, 161, 117, MAKERGB(16, 81, 206));
m_pUI->GetGfx()->DrawLine(14, 118, 161, 118, MAKERGB(16, 56, 173));
m_pUI->DrawMenuString(35, 31, "win", 1);
SPRINTF(str, "%d", win);
m_pUI->DrawMenuString(35, 41, str, 1);
m_pUI->DrawMenuString(88, 31, "draw", 1);
SPRINTF(str, "%d", draw);
m_pUI->DrawMenuString(88, 41, str, 1);
m_pUI->DrawMenuString(142, 31, "loss", 1);
SPRINTF(str, "%d", loss);
m_pUI->DrawMenuString(142, 41, str, 1);
m_pUI->DrawMenuString(14, 61, "your stats");
SPRINTF(str, "%d", hscore);
m_pUI->DrawMenuString(35, 77, str, 1);
SPRINTF(str, "%d", averank);
m_pUI->DrawMenuString(35, 91, str, 1);
SPRINTF(str, "%d", winrank);
m_pUI->DrawMenuString(35, 105, str, 1);
m_pUI->DrawMenuString(88, 77, "h.score", 1);
m_pUI->DrawMenuString(88, 91, "ave.rank", 1);
m_pUI->DrawMenuString(88, 105, "win%rank", 1);
}
if (m_accrej)
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 150, "Waiting opponent", 1);
else
if (m_acceptop) {
m_pEngine->GetNetwork()->getRivalName(str, &hscore, &winrank, &averank);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 154, str, 1);
SPRINTF(str, "%d", hscore);
m_pUI->DrawMenuString(142, 77, str, 1);
SPRINTF(str, "%d", averank);
m_pUI->DrawMenuString(142, 91, str, 1);
SPRINTF(str, "%d", winrank);
m_pUI->DrawMenuString(142, 105, str, 1);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 139, "play with?", 1);
m_pUI->DrawMenuString(161, 122, "opponent", 2);
for (i=0; i<m_nCount[s]; i++)
if (i==m_nSel[s])
m_pUI->DrawMenuString(36+i*80, 169, m_cItemString[s][i], 0, 0);
else
m_pUI->DrawMenuString(36+i*80, 169, m_cItemString[s][i], 0, 1);
} else
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 150, "Waiting for reply", 1);
}
break;
case STATE_RANKING:
{
RANK_DATA rd[20];
m_pUI->DrawMenuBg(3);
m_pUI->DrawLButton(3);
if (m_rank3) {
switch (m_nSel[s]) {
case 0:
m_pEngine->GetNetwork()->getRank(rd);
m_pUI->DrawMenuString(155, 30, "h.score", 2, 1, 1);
break;
case 1:
m_pEngine->GetNetwork()->getAveRank(rd);
m_pUI->DrawMenuString(155, 30, "ave.point", 2, 1, 1);
break;
case 2:
m_pEngine->GetNetwork()->getWinRank(rd);
m_pUI->DrawMenuString(155, 30, "win%", 2, 1, 1);
break;
}
m_pUI->GetGfx()->DrawLine(14, 23, 161, 23, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 24, 161, 24, MAKERGB(16, 81, 206));
m_pUI->GetGfx()->DrawLine(14, 25, 161, 25, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 40, 161, 40, MAKERGB(16, 56, 173));
m_pUI->GetGfx()->DrawLine(14, 41, 161, 41, MAKERGB(16, 81, 206));
m_pUI->GetGfx()->DrawLine(14, 42, 161, 42, MAKERGB(16, 56, 173));
m_pUI->DrawMenuString(20, 30, "name");
for (i=0; i<10; i++) {
if (rd[i].score) {
m_pUI->DrawMenuString(20, 50+i*13, rd[i].name);
SPRINTF(str, "%d", rd[i].score);
m_pUI->DrawMenuString(140, 50+i*13, str, 1);
}
}
} else
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 100, "Retrieve ranking info...", 1);
}
break;
case STATE_TIMEDINFO:
m_pUI->DrawMenuBg(3);
switch (m_nSel[s]) {
case ERR_NONETWORK:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_NONETWORK], 1);
break;
case ERR_GETNICKNAME:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRGETNICK], 1);
break;
case ERR_SETNICKNAME:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRSETNICK], 1);
break;
case ERR_NICKNAMEDUP:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "nickname used", 1);
break;
case ERR_LOGIN:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRLOGIN], 1);
break;
case ERR_GETRIVALNAME:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRGETRIVAL], 1);
break;
case ERR_GETACCINFO:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRGETACC], 1);
break;
case ERR_REJECTED:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRREJ], 1);
break;
case ERR_GETRANK:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "get rank error", 1);
break;
case STOP_CONNECT:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_EXITNET], 1);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2+20, m_pDataManager->m_pStringItem[ID_TIMEDINFO_EXITNET2], 1);
break;
case RESET_SUC:
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Reset succeed", 1);
break;
}
break;
case STATE_INITCONNECT:
m_pUI->DrawMenuBg(1);
m_pUI->DrawLButton(3);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Init Connection...", 1);
break;
}
if (byesno) {
char *str;
m_pEngine->GetGfx()->DrawColorMask(MAKERGB(96, 96, 96), 0, 0, 75, SCREEN_WIDTH, 50);
m_pUI->GetGfx()->FillRec(0, 191, SCREEN_WIDTH, SCREEN_HEIGHT-191, 0);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
switch (m_iynState) {
case YESNO_EXITGAME:
str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_EXITGAME];
break;
case YESNO_EXITFROMGAME:
str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_EXITFROMGAME];
break;
case YESNO_SAVEGAME:
str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_SAVEGAME];
break;
case YESNO_NEWSTORY:
str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_NEWSTORY];
break;
case YESNO_SAVEGAMEANDEXIT:
str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_SAVEGAMEANDEXIT];
break;
case YESNO_RESETONLINE:
str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_RESETONLINE];
break;
}
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 85, str, 1);
for (i=0; i<m_nCount[STATE_YESNO]; i++)
if (i==m_nSel[STATE_YESNO])
m_pUI->DrawMenuString(36+i*80, 105, m_cItemString[STATE_YESNO][i], 0, 0);
else
m_pUI->DrawMenuString(36+i*80, 105, m_cItemString[STATE_YESNO][i], 0, 1);
m_iState |= 1<<STATE_YESNO;
}
}
void CMenu::Update()
{
MENUSTATE mainsel[] =
{
STATE_QUICKMODE,
#ifdef ONLINE
STATE_ONLINEMODE,
#endif
STATE_STORYMODE,
STATE_FREEMODE,
STATE_BONUSMODE,
STATE_OPTION,
STATE_HELP,
STATE_CREDIT,
STATE_YESNO,
};
MENUSTATE pausesel[6] =
{
STATE_STARTGAME,
STATE_OPTION,
STATE_HELP,
CheckState(STATE_BONUSMODE)?STATE_YESNO:STATE_VIEWSCORE,
STATE_YESNO,
STATE_YESNO,
// CheckState(STATE_BONUSMODE)?STATE_EXITFROMGAME:STATE_VIEWSCORE,
// (CheckState(STATE_STORYMODE) && ((CGame*)m_pEngine->m_pGame)->m_saveFlag <= 0)?STATE_SAVEGAME:STATE_EXITFROMGAME,
// STATE_EXITFROMGAME,
};
MENUSTATE s = GetState();
if (!m_pGame)
m_pGame = (CGame*)m_pEngine->m_pGame;
int i;
switch (s) {
case STATE_SUSPEND:
m_pGame->m_chcode = false;
return;
case STATE_PREGAME:
switch (m_nSel[s]) {
case 0:
#ifdef AEE_SIMULATOR
if((GETUPTIMEMS()-m_WindDur)>2)
#else
if((GETUPTIMEMS()-m_WindDur)>2000)
#endif
m_nSel[s]++;
if(m_pInput->KeyPressed(VKEY_MENU_CLR))
ResetState();
break;
case 1:
if(m_pInput->KeyPressed(gk_RSOFT)||m_pInput->KeyPressed(VKEY_COMMAND)) {//yes, have sound
if (m_pEngine->GetSound()->m_soundVolume == 0)
#ifdef LG
m_pEngine->GetSound()->SetVolume(CSound::soundMid);
#else
m_pEngine->GetSound()->SetVolume(CSound::soundLoud);
#endif
if (((CGame*)m_pEngine->m_pGame)->m_saveFlag <= 0) {
m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_LEE_THROW2),0);
m_pGame->GetScene()->LoadTitleAni(TITLE_FIRST_ANI);//Milo
m_nSel[s] += 2;
m_pGame->saveGeneralRecord(SAVE_OPTION);
} else
m_nSel[s]++;
} else
if (m_pInput->KeyPressed(gk_LSOFT)) {//no, no sound
#ifndef LG
m_pEngine->m_bSoundVolumeSet=true;
#endif
m_pEngine->GetSound()->SetVolume(CSound::soundNone);
if (((CGame*)m_pEngine->m_pGame)->m_saveFlag <= 0) {
m_pGame->GetScene()->LoadTitleAni(TITLE_FIRST_ANI);//Milo
m_nSel[s] += 2;
m_pGame->saveGeneralRecord(SAVE_OPTION);
} else
m_nSel[s]++;
}
if(m_pInput->KeyPressed(VKEY_MENU_CLR))
ResetState();
break;
case 2:
if (m_pInput->KeyPressed(VKEY_MENU_NEXT)) {
if (m_pEngine->GetSound()->m_soundVolume != CSound::soundNone)
m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_LEE_THROW2),0);
m_pGame->GetScene()->LoadTitleAni(TITLE_FIRST_ANI);//Milo
m_nSel[s]++;
}
if(m_pInput->KeyPressed(VKEY_MENU_BACK))
ResetState();
break;
case 3:
if ((m_pInput->KeyPressed(gk_RSOFT) || m_pInput->KeyPressed(VKEY_COMMAND) ) ||
(m_pGame->GetTitleType() == TITLE_ANI_DONE) ) {
m_pGame->ReleaseLocalResource();
m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_MENU),1);
m_nSel[s]++;
}
if(m_pInput->KeyPressed(VKEY_MENU_CLR))
ResetState();
break;
case 4:
if (m_pInput->isAnyKeyDown() && !m_pInput->KeyPressed(gk_SEND) && !m_pInput->KeyPressed(VKEY_MENU_CLR)) {
GoBack(GetState());
SetState(STATE_MAINMENU);
}
if (m_pInput->KeyPressed(VKEY_MENU_CLR))
ResetState();
break;
}
return;
case STATE_MAINMENU:
m_pGame->onlineClear();
if(isCheatOpen() == CHEAT_OPEN)
{
if (m_pInput->KeyPressed(gk_NUM9))
m_pGame->m_chcode = true;
if (m_pInput->KeyPressed(gk_NUM7))
{
m_pGame->initGeneralRecord();
m_pGame->GetScene()->m_pMatch->m_cnMatchCount = 0;
}
}
if (m_mminAnim < MMANIMFRAME*3)
return;
HandleUD(s);
if (m_pInput->KeyPressed(VKEY_MENU_UP) || m_pInput->KeyPressed(VKEY_MENU_DOWN))
m_mmAnim=0;
if (m_pInput->KeyPressed(VKEY_MENU_RIGHT))
if ((mainsel[m_nSel[s]] == STATE_STORYMODE) || (mainsel[m_nSel[s]] == STATE_FREEMODE)
|| (mainsel[m_nSel[s]] == STATE_BONUSMODE) || (mainsel[m_nSel[s]] == STATE_ONLINEMODE))
SetState(mainsel[m_nSel[s]]);
if (m_pInput->KeyPressed(VKEY_MENU_SELECT))
switch (mainsel[m_nSel[s]]) {
case STATE_BONUSMODE:
case STATE_FREEMODE:
case STATE_STORYMODE:
case STATE_ONLINEMODE:
SetState(mainsel[m_nSel[s]]);
break;
case STATE_QUICKMODE:
// random selection
m_nSel[STATE_QUICKMODE] = 1;
SetState(STATE_QUICKMODE);
SetState(STATE_PLAYERSELECTA, 1);
InitSel();
m_nSel[STATE_PLAYERSELECTB] = _rand(0, m_nCount[STATE_PLAYERSELECTB]-1);
m_nSel[STATE_CLOTHSELECTB] = _rand(0, m_nCount[STATE_CLOTHSELECTB]-1);
m_nSel[STATE_BALLSELECTA] = _rand(0, m_nCount[STATE_BALLSELECTA]-1);
while (!m_pGame->m_SaveBallCanSel[m_nSel[STATE_BALLSELECTA]])
m_nSel[STATE_BALLSELECTA] = _rand(0, m_nCount[STATE_BALLSELECTA]-1);
m_nSel[STATE_BALLSELECTB] = m_pDataManager->m_pPlayer[m_nSel[STATE_PLAYERSELECTB]].ballIndex;
m_nSel[STATE_ICONSELECTA] = _rand(0, m_nCount[STATE_ICONSELECTA]-1);
m_nSel[STATE_ICONSELECTB] = _rand(0, m_nCount[STATE_ICONSELECTB]-1);
m_nSel[STATE_LANESELECT] = _rand(0, m_nCount[STATE_LANESELECT]-1);
ReleaseResource();
break;
default:
SetState(mainsel[m_nSel[s]], 1);
m_iynState = YESNO_EXITGAME;
ReleaseResource();
}
if (m_pInput->KeyPressed(VKEY_MENU_CLR))
ResetState();
return;
case STATE_BONUSMODE:
case STATE_FREEMODE:
case STATE_STORYMODE:
case STATE_ONLINEMODE:
if (m_pGame->m_SaveCanContinue && ((CGame *)m_pEngine->m_pGame)->m_saveFlag <= 0)
m_nCount[STATE_STORYMODE] = 2;
else
m_nCount[STATE_STORYMODE] = 1;
m_nSel[s] %= m_nCount[s];
HandleUD(s);
if (m_pInput->KeyPressed(VKEY_MENU_BACK) || m_pInput->KeyPressed(VKEY_MENU_LEFT)) {
int temp = m_mminAnim;
GoBack(GetState());
m_mminAnim = temp;
}
if (m_pInput->KeyPressed(VKEY_MENU_SELECT)) {
switch (s) {
case STATE_BONUSMODE:
if (m_nSel[s])
SetState(STATE_LANESELECT, 1);
else
SetState(STATE_BONUSSELECT);
break;
case STATE_ONLINEMODE:
if (m_pEngine->m_pIWeb && m_pEngine->m_pIWebUtil) {
if (!m_nSel[s]) {
SetState(STATE_PLAYERSELECTA, 1);
InitSel();
}
if (m_nSel[s] == 2) {
SetState(STATE_YESNO);
m_iynState = YESNO_RESETONLINE;
}
if (m_nSel[s] == 1)
SetState(STATE_RANKING);
} else
SetState(STATE_TIMEDINFO, ERR_NONETWORK);
break;
case STATE_STORYMODE:
if (m_nSel[s])
SetState(STATE_STARTGAME);
else
if (m_pGame->m_SaveCanContinue && ((CGame *)m_pEngine->m_pGame)->m_saveFlag <= 0) {
SetState(STATE_YESNO);
m_iynState = YESNO_NEWSTORY;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -