📄 menu.cpp
字号:
SetState(STATE_RIVALSELECT);
if (i<0)
SetState(STATE_TIMEDINFO, ERR_LOGIN);
break;
}
if (m_waitplay) {
i = m_pEngine->GetNetwork()->Login();
if (i>0)
m_getinfo = true;
if (i<0)
SetState(STATE_TIMEDINFO, ERR_LOGIN);
break;
}
if (m_settingnick) {
i = m_pEngine->GetNetwork()->setNickName(m_strName);
if (i>0)
m_waitplay = true;
if (i<0)
if (i == -1)
SetState(STATE_TIMEDINFO, ERR_SETNICKNAME);
else
SetState(STATE_TIMEDINFO, ERR_NICKNAMEDUP);
break;
}
if (m_nickconf) {
if (m_pInput->KeyPressed(VKEY_MENU_SELECT))
m_settingnick = true;
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
m_nickconf = false;
break;
}
if (m_knownblank) {
if (m_pInput->KeyPressed(gk_LEFT))
if (m_nSel[s])
m_nSel[s]--;
if (m_pInput->KeyPressed(gk_RIGHT))
if ((m_nSel[s] < 9) && m_strName[m_nSel[s]]){
m_nSel[s]++;
if (!m_strName[m_nSel[s]]) {
m_iLastKey[m_nSel[s]] = 0;
m_iKey[m_nSel[s]] = 0;
m_strName[m_nSel[s]] = '0';
}
}
const char map[10][6] = {"0", "1", "abc2", "def3", "ghi4", "jkl5", "mno6", "pqrs7", "tuv8", "wxyz9"};
const int mapcount[10] = {1, 1, 4, 4, 4, 4, 4, 5, 4, 5};
if (m_pInput->KeyPressed(0x03ff0)) {
int key=1<<4;
for (i=0; i<10; ++i, key<<=1)
if(m_pInput->KeyPressed(key))
break;
if (i == m_iLastKey[m_nSel[s]])
m_iKey[m_nSel[s]]++;
else {
m_iKey[m_nSel[s]] = 0;
m_iLastKey[m_nSel[s]] = i;
}
m_strName[m_nSel[s]] = map[i][m_iKey[m_nSel[s]]%mapcount[i]];
}
if (m_pInput->KeyPressed(gk_STAR)) {
i = m_nSel[s];
while (m_iLastKey[i] != -1) {
m_iLastKey[i] = m_iLastKey[i+1];
m_iKey[i] = m_iKey[i+1];
m_strName[i] = m_strName[i+1];
i++;
}
if (m_nSel[s] && (m_iLastKey[m_nSel[s]] == -1))
m_nSel[s]--;
}
if ((m_pInput->KeyPressed(gk_MSOFT) || m_pInput->KeyPressed(gk_RSOFT)) && m_strName[2])
m_nickconf = true;
} else {
i = m_pEngine->GetNetwork()->getNickName(m_strName);
if (i>0)
if (m_strName[0])
m_waitplay = true;
else {
m_strName[0] = 'x';
m_strName[1] = 'i';
m_strName[2] = 'a';
m_strName[3] = 'o';
m_strName[4] = 'y';
m_strName[5] = 'a';
m_strName[6] = 'n';
m_strName[7] = 'g';
m_iLastKey[0] = 9;
m_iLastKey[1] = 4;
m_iLastKey[2] = 2;
m_iLastKey[3] = 6;
m_iLastKey[4] = 9;
m_iLastKey[5] = 2;
m_iLastKey[6] = 6;
m_iLastKey[7] = 4;
m_iKey[0] = 1;
m_iKey[1] = 2;
m_iKey[2] = 0;
m_iKey[3] = 2;
m_iKey[4] = 2;
m_iKey[5] = 0;
m_iKey[6] = 1;
m_iKey[7] = 0;
m_knownblank = true;
}
if (i<0)
SetState(STATE_TIMEDINFO, ERR_GETNICKNAME);
}
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
SetState(STATE_TIMEDINFO, STOP_CONNECT);
break;
case STATE_RIVALSELECT:
if (m_accrej) {
int ret;
i = m_pEngine->GetNetwork()->wantChallenge(!m_nSel[s], &ret);
if (i<0)
SetState(STATE_TIMEDINFO, ERR_GETACCINFO);
if (i>0)
if (ret)
SetState(STATE_STARTGAME);
else
SetState(STATE_TIMEDINFO, ERR_REJECTED);
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
SetState(STATE_TIMEDINFO, STOP_CONNECT);
break;
}
if (m_acceptop) {
HandleLR(s);
if (m_pInput->KeyPressed(VKEY_MENU_SELECT))
m_accrej = true;
if (m_pInput->KeyPressed(VKEY_MENU_BACK)) {
m_nSel[s] = 1;
m_accrej = true;
}
break;
}
i = m_pEngine->GetNetwork()->getRivalName(m_strName);
if (i>0)
m_acceptop = true;
if (i<0)
SetState(STATE_TIMEDINFO, ERR_GETRIVALNAME);
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
SetState(STATE_TIMEDINFO, STOP_CONNECT);
break;
case STATE_VIEWSCORE:
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
GoBack(GetState());
break;
case STATE_STARTGAME:
m_pGame->m_chcode = false;
break;
case STATE_RANKING:
{
RANK_DATA rd[20];
if (m_rank3)
HandleLR(s);
else
if (m_rank2) {
i = m_pEngine->GetNetwork()->getWinRank(rd);
if (i>0)
m_rank3 = true;
if (i<0)
SetState(STATE_TIMEDINFO, ERR_GETRANK);
} else
if (m_rank1) {
i = m_pEngine->GetNetwork()->getAveRank(rd);
if (i>0)
m_rank2 = true;
if (i<0)
SetState(STATE_TIMEDINFO, ERR_GETRANK);
} else {
i = m_pEngine->GetNetwork()->getRank(rd);
if (i>0)
m_rank1 = true;
if (i<0)
SetState(STATE_TIMEDINFO, ERR_GETRANK);
}
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
GoBack(GetState());
}
break;
case STATE_INITCONNECT:
if (m_pEngine->GetNetwork()->InitConnect())
SetState(STATE_NICKNAME);
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
SetState(STATE_TIMEDINFO, STOP_CONNECT);
break;
case STATE_RESETPROFILE:
i = m_pEngine->GetNetwork()->resetProfile();
if (i>0)
SetState(STATE_TIMEDINFO, RESET_SUC);
if (i<0)
SetState(STATE_TIMEDINFO, STOP_CONNECT);
if (m_pInput->KeyPressed(VKEY_MENU_BACK))
SetState(STATE_TIMEDINFO, STOP_CONNECT);
break;
case STATE_TIMEDINFO:
switch (m_nSel[s]) {
case ERR_REJECTED:
if ( (GETUPTIMEMS() - m_WindDur) > 2000) {
GoBack(GetState());
GoBack(GetState());
}
break;
case ERR_NICKNAMEDUP:
if ( (GETUPTIMEMS() - m_WindDur) > 2000)
GoBack(GetState());
break;
default:
if ( (GETUPTIMEMS() - m_WindDur) > 1000) {
m_pEngine->GetNetwork()->stopConnect();
ResetState();
SetState(STATE_MAINMENU);
}
break;
}
break;
default:
return;
}
}
MENUSTATE CMenu::GetState() const
{
int i=0;
while (m_iState>>i)
i++;
return i-1;
}
int CMenu::CheckState(MENUSTATE s) const
{
SYS_ASSERT(s<MENUSTATECOUNT);
return (m_iState&(1<<s));
}
void CMenu::SetState(MENUSTATE s, int resetsel)
{
m_iState |= 1<<s;
if (resetsel)
m_nSel[s] = 0;
if (s == STATE_CREDIT)
m_nSel[s] = 71*13;
m_iLastItem = m_nSel[s];
if (s == STATE_MAINMENU) {
m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_MENU),1);
m_mminAnim = 0;
}
if (s == STATE_PAUSE)
m_nSel[s] = 0;
if (s == STATE_YESNO) {
m_iynState = 0;
m_nSel[s] = 1;
}
if (s == STATE_NICKNAME) {
int i;
for (i=0; i<sizeof(m_iLastKey)>>2; i++)
m_iLastKey[i] = -1;
for (i=0; i<sizeof(m_strName); i++)
m_strName[i] = 0;
m_getinfo = m_knownblank = m_settingnick = m_waitplay = m_nickconf = false;
}
if (s == STATE_RIVALSELECT)
m_acceptop = m_accrej = false;
if (s == STATE_TIMEDINFO) {
m_nSel[s] = resetsel;
m_WindDur = GETUPTIMEMS();
}
if (s == STATE_PREGAME)
m_WindDur = GETUPTIMEMS();
if (s == STATE_RANKING) {
m_pEngine->GetNetwork()->InvalidRank();
m_pEngine->GetNetwork()->InvalidAveRank();
m_pEngine->GetNetwork()->InvalidWinRank();
m_rank1 = m_rank2 = m_rank3 = false;
}
if (s == STATE_HELP) {
m_iSelAnim = 999;
m_nSel[s] = 0;
}
if (s == STATE_ICONSELECTA || s == STATE_ICONSELECTB)
m_iSelAnim = 0;
#ifdef ONLINE
if (s == STATE_STARTGAME)
m_pEngine->GetNetwork()->InvalidInfo();
#endif
}
int CMenu::GetSel(MENUSTATE s) const
{
return m_nSel[s];
}
void CMenu::ResetState()
{
m_iState = 1<<STATE_SUSPEND;
}
void CMenu::InitSel()
{
m_nSel[STATE_PLAYERSELECTA] = 0;
while (!m_pGame->m_SavePlayerCanSel[m_nSel[STATE_PLAYERSELECTA]])
m_nSel[STATE_PLAYERSELECTA]++;
m_nSel[STATE_PLAYERSELECTB] = 0;
m_nSel[STATE_CLOTHSELECTA] = 0;
m_nSel[STATE_CLOTHSELECTB] = 0;
m_nSel[STATE_BALLSELECTA] = 0;
m_nSel[STATE_BALLSELECTB] = 0;
while (!m_pGame->m_SaveBallCanSel[m_nSel[STATE_BALLSELECTA]])
m_nSel[STATE_BALLSELECTA]++;
while (!m_pGame->m_SaveBallCanSel[m_nSel[STATE_BALLSELECTB]])
m_nSel[STATE_BALLSELECTB]++;
m_nSel[STATE_ICONSELECTA] = 0;
m_nSel[STATE_ICONSELECTB] = 0;
m_iSelAnim = m_iLastItem = 0;
m_stateCloth = false;
}
void CMenu::ReleaseResource()
{
m_pDataManager->GetRender3D()->ReleaseModel(-1);
m_pEngine->GetMem()->ResetHeap();
m_pDataManager->GetRender3D()->ReleaseTex();
}
void CMenu::HandleLR(MENUSTATE s)
{
if (m_pInput->KeyPressed(VKEY_MENU_LEFT)) {
m_iLastItem = m_nSel[s];
m_iSelAnim = 0;
if (--m_nSel[s] < 0)
m_nSel[s] += m_nCount[s];
}
if (m_pInput->KeyPressed(VKEY_MENU_RIGHT)) {
m_iLastItem = m_nSel[s];
m_iSelAnim = 0;
if (++m_nSel[s] >= m_nCount[s])
m_nSel[s] -= m_nCount[s];
}
}
void CMenu::HandleUD(MENUSTATE s)
{
if (m_pInput->KeyPressed(VKEY_MENU_UP))
if (--m_nSel[s] < 0)
m_nSel[s] += m_nCount[s];
if (m_pInput->KeyPressed(VKEY_MENU_DOWN))
if (++m_nSel[s] >= m_nCount[s])
m_nSel[s] -= m_nCount[s];
}
void CMenu::DrawPlayer(int playerId, int actionid, int clohtid, int posType)
{
int cpos[3] = {0, 0, 0};
int crot[3] = {0, 1, 0};
int pos[2][3] = {{70, 600, -100}, {70, 800, -120}};
int rot[3] = {0, 0, -256};
CMatrix44 mat;
if (m_lastplayer != playerId) {
ReleaseResource();
m_lastplayer = playerId;
}
CPlayerRes *pPlayer = &m_pDataManager->m_pPlayer[playerId];
int actionStart = pPlayer->actionstart[actionid];
int actionLen = pPlayer->actionend[actionid]-pPlayer->actionstart[actionid]+1;
char texid = m_pDataManager->GetRender3D()->GetG3d()->LoadTexture(pPlayer->cloths[clohtid]);
mat.Identity();
mat.LookAt(cpos, crot);
m_pDataManager->GetRender3D()->GetG3d()->SetMatrix(1, &mat);
m_pDataManager->GetRender3D()->GetG3d()->setZDist(126);
m_pDataManager->LoadModel(pPlayer->modelIndex);
m_pDataManager->GetRender3D()->GetG3d()->m_renderParam = RP_NOFRUSTUM|RP_FLAT;
m_pDataManager->GetRender3D()->GetWorldMat(posType==0?pos[0]:pos[1], rot, &mat);
m_pDataManager->GetRender3D()->RenderModel(pPlayer->modelIndex, &mat,
m_iActAnim%actionLen + actionStart, texid, pPlayer->decor[clohtid]);
++m_iActAnim;
}
void CMenu::_Lane()
{
int i, j;
unsigned short *buf = (unsigned
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -