📄 menu.cpp
字号:
DrawPlayer(m_player, PLAYER_ANI_FOR_SELECT, 0);
m_pUI->GetGfx()->DrawColorMask(MAKERGB(128, 128, 128), 0, 85, j-3, 85, m_nCount[s]*13);
m_pUI->GetGfx()->DrawRect(85, j-3, 85, m_nCount[s]*13, MAKERGB(255, 255, 255));
y=j;
i=0;
while (i<m_nCount[s]) {
if (i==m_nSel[s]) {
m_pUI->DrawMenuString(98,y, m_cItemString[s][i], 0, 0);
m_pUI->MainMenuArrow(88, y-1);
} else
m_pUI->DrawMenuString(98,y, m_cItemString[s][i], 0, 1);
i++;
y+=13;
}
break;
case STATE_PLAYERSELECTA:
case STATE_PLAYERSELECTB:
m_pDataManager->GetRender3D()->StartRender3D();
m_pDataManager->GetRender3D()->GetG3d()->setZDist(126);
m_pUI->DrawMenuBg(3);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
SPRINTF(str, "$ %d", m_pGame->m_money.totalMoney);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 193, str, 1);
if (m_stateCloth)
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_CLOTHSELECT_TITLE], 2);
else
if (CheckState(STATE_FREEMODE) && GetSel(STATE_FREEMODE))
if (GetSel(STATE_FREEMODE) == 1)
if (s == STATE_PLAYERSELECTA)
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_PLAYERSELECT_TITLE1], 2);
else
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_PLAYERSELECT_TITLE2], 2);
else
if (s == STATE_PLAYERSELECTA)
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_PLAYERSELECT_TITLE3], 2);
else
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_PLAYERSELECT_TITLE4], 2);
else
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_PLAYERSELECT_TITLE1], 2);
// animation calculation
if (m_nSel[s] != m_iLastItem)
if (m_nSel[s] == (m_iLastItem+1)%m_nCount[s])
// 20+32+20+32+20+32+20 = 176
if (m_iSelAnim-4<-50) {
m_iSelAnim = 0;
m_iLastItem = m_nSel[s];
} else
m_iSelAnim-=4;
else
if (m_iSelAnim+4>50) {
m_iSelAnim = 0;
m_iLastItem = m_nSel[s];
} else
m_iSelAnim+=4;
else
if (m_iSelAnim)
m_iSelAnim -= m_iSelAnim/Abs(m_iSelAnim)*4;
// player
if (m_pGame->m_SavePlayerCanSel[m_iLastItem])
{
m_pUI->DrawMenuHead(m_iLastItem, m_iSelAnim, !m_stateCloth);
// personal stats
m_pEngine->GetGfx()->FillRec(17, 122, 73*m_pDataManager->m_pPlayer[m_iLastItem].power/100, 5, MAKERGB(99, 49, 125));
m_pEngine->GetGfx()->FillRec(17, 140, 73*m_pDataManager->m_pPlayer[m_iLastItem].precision/3, 5, MAKERGB(99, 49, 125));
m_pEngine->GetGfx()->FillRec(17, 158, 73*m_pDataManager->m_pPlayer[m_iLastItem].rotation/3, 5, MAKERGB(99, 49, 125));
int cl;
if (m_stateCloth)
{
if (s == STATE_PLAYERSELECTA)
cl = GetSel(STATE_CLOTHSELECTA);
else
cl = GetSel(STATE_CLOTHSELECTB);
}
else
cl = 0;
// for (int i=0; i<m_nCount[s]; i++)
// if (m_pGame->m_SavePlayerCanSel[i])
// m_pDataManager->LoadModel(m_pDataManager->m_pPlayer[i].modelIndex);
if (m_bSelected)
DrawPlayer(m_iLastItem, PLAYER_ANI_CHEER2, cl, 1);
else
if (!m_pGame->m_SaveClothCanSel[m_iLastItem][cl]) {
m_pUI->DrawMenuString(108, 116, m_pDataManager->m_pStringItem[ID_CLOTH_DESCNA2]);
SPRINTF(str, m_pDataManager->m_pStringItem[ID_CLOTH_DESCNA], MONEY_UNLOCK[2][m_iLastItem]);
m_pUI->RollingString(SCREEN_WIDTH, 175, str);
} else
DrawPlayer(m_iLastItem, PLAYER_ANI_FOR_SELECT, cl, 1);
} else {
m_pUI->DrawMenuHead(m_iLastItem, m_iSelAnim, !m_stateCloth, 0);
SPRINTF(str, m_strPlayerDescNA, MONEY_UNLOCK[1][m_iLastItem]);
m_pUI->RollingString(SCREEN_WIDTH, 120, str);
}
break;
case STATE_BALLSELECTA:
case STATE_BALLSELECTB:
m_pDataManager->GetRender3D()->StartRender3D();
m_pDataManager->GetRender3D()->GetG3d()->setZDist(126);
m_pUI->DrawMenuBg(2);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
SPRINTF(str, "$ %d", m_pGame->m_money.totalMoney);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 193, str, 1);
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_BALLSELECT_TITLE], 2);
{
// animation calculation
if (m_iLastItem != m_nSel[s]) {
if (m_iLastItem == (m_nSel[s]+1)%m_nCount[s])
m_iSelAnim -= 40;
else
m_iSelAnim += 40;
if (Abs(m_iSelAnim) > ANGLE2PI/m_nCount[s]) {
m_iSelAnim = 0;
m_iLastItem = m_nSel[s];
}
}
_Ball(s);
if (m_pGame->m_SaveBallCanSel[m_iLastItem])
m_pUI->RollingString(SCREEN_WIDTH, 150, m_strBallDescA[m_iLastItem]);
else {
SPRINTF(str, m_strBallDescNA, MONEY_UNLOCK[0][m_iLastItem]);
m_pUI->RollingString(SCREEN_WIDTH, 150, str);
}
if (m_pGame->m_SaveBallCanSel[m_iLastItem]) {
SPRINTF(str, "%d pound", m_pDataManager->m_pBallWeight[m_iLastItem]*2+8);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 50, str, 1);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 35, m_cItemString[s][m_iLastItem], 1);
}
m_pDataManager->GetRender3D()->GetG3d()->EnableBallLight(-1);
}
break;
case STATE_ICONSELECTA:
case STATE_ICONSELECTB:
m_pDataManager->GetRender3D()->StartRender3D();
m_pDataManager->GetRender3D()->GetG3d()->setZDist(126);
m_pUI->DrawMenuBg(2);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_ICONSELECT_TITLE], 2);
{
Vector4s pos(0, 0, 40);
Vector4s rot(0, 100, -30);
Vector4s up(0, 0, 1<<COS_SIN_SHIFT);
CMatrix44 mat;
mat.LookAt(pos, rot, up);
m_pDataManager->GetRender3D()->GetG3d()->SetMatrix(1, &mat);
pos.Init(0, 0, 0);
m_pDataManager->GetRender3D()->GetG3d()->SetEye(&pos);
m_pDataManager->GetRender3D()->GetG3d()->m_renderParam = 0;
// animation calculation
if (m_iLastItem != m_nSel[s]) {
if (m_iLastItem == (m_nSel[s]+1)%m_nCount[s])
m_iSelAnim -= 40;
else
m_iSelAnim += 40;
if (Abs(m_iSelAnim) > ANGLE2PI/m_nCount[s]) {
m_iSelAnim = 0;
m_iLastItem = m_nSel[s];
}
}
m_iRotAnim2[m_iLastItem] += 15;
m_iRotAnim2[(m_iLastItem+1)%m_nCount[s]] = m_iRotAnim2[(m_iLastItem+m_nCount[s]-1)%m_nCount[s]] = 512;
m_pDataManager->GetRender3D()->GetG3d()->EnableBallLight(1);
if (!m_iSelAnim)
m_pUI->SelArrow(SCREEN_WIDTH/2, 95);
MENUSTATE laststate = (s==STATE_ICONSELECTA)?STATE_BALLSELECTA:STATE_BALLSELECTB;
if (m_pGame->m_SaveBallIconCanSel[m_iLastItem])
m_pUI->RollingString(SCREEN_WIDTH, 150, m_strIconDesc[m_iLastItem]);
// first time init
if (!m_icontex[0].m_pData) {
const CTexture * ptex = &m_pDataManager->GetRender3D()->GetG3d()->m_pTextures[m_pDataManager->LoadBallRes(m_nSel[laststate])];
GFXBMP bmp;
bmp.h = ptex->m_h;
bmp.w = ptex->m_w;
for (i=0; i<m_nCount[s]; i++) {
m_icontex[i].m_h = ptex->m_h;
m_icontex[i].m_w = ptex->m_w;
m_icontex[i].m_shift = ptex->m_shift;
m_icontex[i].m_mask = ptex->m_mask;
m_icontex[i].m_pData = (unsigned char *)m_pEngine->GetMem()->StackMalloc(ptex->m_w * ptex->m_h * 2);
if (m_pGame->m_SaveBallIconCanSel[i]) {
MEMCPY(m_icontex[i].m_pData, ptex->m_pData, ptex->m_w * ptex->m_h * 2);
bmp.pData = m_icontex[i].m_pData;
m_pUI->DrawBmp2Buf(&bmp, 0, 0, i, 0, 0);
} else
MEMSET(m_icontex[i].m_pData, 0, ptex->m_w * ptex->m_h * 2);
}
}
// from far to near
i=m_nCount[s]/2-1;
while (i<m_nCount[s]) {
pos.Init(0, 200, 0);
rot.Init(0, 40, 0);
mat.DefRotateZ(i*ANGLE2PI/m_nCount[s]-m_iSelAnim);
up = mat.Transform(rot);
up.z = up.y/10;
pos -= up;
rot.Init(0, 0, m_iRotAnim2[(i+m_iLastItem)%m_nCount[s]]);
m_pDataManager->GetRender3D()->GetWorldMat(&pos, &rot, &mat);
m_pDataManager->GetRender3D()->GetG3d()->SetMatrix(0, &mat);
m_pDataManager->GetRender3D()->GetG3d()->SetTexture(&m_icontex[(i+m_iLastItem)%m_nCount[s]]);
m_pDataManager->GetRender3D()->GetG3d()->DrawBall();
m_pDataManager->GetRender3D()->GetG3d()->get2DPos(pos[0], pos[1], pos[2], x, y);
if (!m_pGame->m_SaveBallIconCanSel[(i+m_iLastItem)%m_nCount[s]] && !i)
m_pUI->QMark(x, y);
j = (80*80/(pos[1]-80))*512/80-256;
m_pDataManager->GetRender3D()->DrawBallColorMask(x, y, j);
if (!i)
i=m_nCount[s]/2;
else
if (i<m_nCount[s]/2)
i--;
else
i++;
}
m_pDataManager->GetRender3D()->GetG3d()->EnableBallLight(-1);
}
break;
case STATE_BONUSSELECT:
m_pUI->DrawMenuBg(2);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
SPRINTF(str, "$ %d", m_pGame->m_money.totalMoney);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 193, str, 1);
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_BONUSSELECT_TITLE], 2);
{
x = y = 25;
for (i=0; i<5; i++) {
SPRINTF(str, "Level %d", i+1);
m_pUI->DrawMenuString(x, y+i*15, str);
}
i = 0;
x = 80;
m_iRotAnim3++;
for (i=0; i<5; i++)
for (j=0; j<m_bngames[i]; j++) {
const int gg = (i+7)*i/2+j;
// if is selected
// if beat heart
// if can select
if ((m_bnx == j) && (m_bny == i))
if ((m_iRotAnim3%8 < 2))
if (m_pGame->m_SaveBonusCanSel[gg])
m_pUI->BHChar(j+1, x+10*j, y+i*15, 0);
else
m_pUI->BHChar(10, x+10*j, y+i*15, 0);
else
if ((m_iRotAnim3%8 < 6) && (m_iRotAnim3%8 >= 4))
if (m_pGame->m_SaveBonusCanSel[gg])
m_pUI->BHChar(j+1, x+10*j, y+i*15, 2);
else
m_pUI->BHChar(10, x+10*j, y+i*15, 2);
else
if (m_pGame->m_SaveBonusCanSel[gg])
m_pUI->BHChar(j+1, x+10*j, y+i*15, 1);
else
m_pUI->BHChar(10, x+10*j, y+i*15, 1);
else
if (m_pGame->m_SaveBonusCanSel[gg])
m_pUI->BHChar(j+1, x+10*j, y+i*15, 0);
else
m_pUI->BHChar(10, x+10*j, y+i*15, 0);
}
if (m_pGame->m_SaveBonusCanSel[m_nSel[s]])
_Bottle();
else
m_pUI->RollingString(SCREEN_WIDTH, 150, m_strBonusDescNA);
}
break;
case STATE_LANESELECT:
m_pUI->DrawMenuBg(2);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
if (GetSel(STATE_BONUSMODE))
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_LANESELECT_TITLE2], 2);
else
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_LANESELECT_TITLE1], 2);
m_pUI->LaneEffect(m_nSel[s], 24, 0);
// draw lane
if (CheckState(STATE_BONUSMODE) && m_pGame->m_SaveLaneCanView[m_nSel[s]] ||
CheckState(STATE_BALLSELECTA) && m_pGame->m_SaveLaneCanSel[m_nSel[s]])
{
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 69, m_cItemString[s][m_nSel[s]], 1);
_Lane();
} else
m_pUI->RollingString(SCREEN_WIDTH, 120, m_strLaneDescNA);
break;
case STATE_OPTION:
m_pUI->DrawMenuBg(1);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
m_pUI->DrawMenuString(SCREEN_WIDTH-2, 2, m_pDataManager->m_pStringItem[ID_STATE_OPTION_TITLE], 2);
y=36;
m_pUI->PauseBg(y, m_nCount[s], m_nSel[s], m_opAnim++);
for(i=0;i<m_nCount[s];i++) {
if(i!=m_nSel[s])
m_pUI->DrawMenuString(SCREEN_WIDTH/2-5, y, m_cItemString[s][i], 2, 1);
else {
y+=7;
m_pUI->DrawMenuString(SCREEN_WIDTH/2-5, y, m_cItemString[s][i], 2, 0);
y+=7;
}
y+=13;
}
{
int yy[4] = {36, 49, 62, 75};
i = m_nSel[s];
yy[i] += 7;
while (++i<4)
yy[i] += 14;
// draw on/off
#ifdef LG
switch (m_pEngine->GetSound()->m_soundVolume) {
case CSound::soundNone:
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[0], m_pDataManager->m_pStringItem[ID_STATE_OPTION_SOUNDNONE]);
break;
case CSound::soundLow:
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[0], m_pDataManager->m_pStringItem[ID_STATE_OPTION_SOUNDLOW]);
break;
case CSound::soundMid:
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[0], m_pDataManager->m_pStringItem[ID_STATE_OPTION_SOUNDMED]);
break;
case CSound::soundLoud:
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[0], m_pDataManager->m_pStringItem[ID_STATE_OPTION_SOUNDLOUD]);
break;
}
#else
if (m_pEngine->GetSound()->m_soundVolume == CSound::soundNone)
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[0], m_pDataManager->m_pStringItem[ID_STATE_OPTION_OFF], 0, 1);
if (m_pEngine->GetSound()->m_soundVolume == CSound::soundLoud)
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[0], m_pDataManager->m_pStringItem[ID_STATE_OPTION_ON], 0, 0);
#endif
if (m_pEngine->GetSound()->GetVibOn())
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[1], m_pDataManager->m_pStringItem[ID_STATE_OPTION_ON], 0, 0);
else
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[1], m_pDataManager->m_pStringItem[ID_STATE_OPTION_OFF], 0, 1);
if (((CGame *)m_pEngine->m_pGame)->IsShowHint())
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[2], m_pDataManager->m_pStringItem[ID_STATE_OPTION_ON], 0, 0);
else
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[2], m_pDataManager->m_pStringItem[ID_STATE_OPTION_OFF], 0, 1);
if(m_pEngine->GetSound()->playerSoundOn)
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[3], m_pDataManager->m_pStringItem[ID_STATE_OPTION_ON], 0, 0);
else
m_pUI->DrawMenuString(SCREEN_WIDTH/2+5, yy[3], m_pDataManager->m_pStringItem[ID_STATE_OPTION_OFF], 0, 1);
}
break;
case STATE_VIEWSCORE:
m_pGame->PaintInPause();
break;
case STATE_NICKNAME:
m_pUI->DrawMenuBg(2);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
if (m_getinfo)
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Retrieve userinfo...", 1);
else
if (m_waitplay)
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Login...", 1);
else
if (m_settingnick)
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Authorizing...", 1);
else
if (m_nickconf) {
m_pUI->BigString2(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_strName, 1);
m_pUI->RollingString(SCREEN_WIDTH, 150, m_pDataManager->m_pStringItem[ID_STATE_ONLINE_NICK_CONFIRM]);
} else
if (m_knownblank) {
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2-20, "Input your name", 1);
m_pUI->BigString2(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_strName, 1, m_nSel[s]);
m_pUI->RollingString(SCREEN_WIDTH, 150, m_pDataManager->m_pStringItem[ID_STATE_ONLINE_NICK]);
} else
m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Connecting...", 1);
break;
case STATE_RIVALSELECT:
m_pUI->DrawMenuBg(3);
m_pUI->DrawLButton(3);
m_pUI->DrawRButton(3);
{
int win, loss, draw, hscore, winrank, averank;
m_pEngine->GetNetwork()->getNickName(str);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 1, "Welcome", 1);
m_pUI->DrawMenuString(SCREEN_WIDTH/2, 16, str, 1);
if (m_pEngine->GetNetwork()->getUserInfo(&win, &loss, &draw, &hscore, &winrank, &averank) > 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -