📄 frontend.cpp
字号:
}
JString subStr = st.substring(0, index);
if(m_pGraph->GetTextWidth(subStr)<allowedwidth)
{
lastindex=index;
}
else
{
if(lastindex==0)
{
//a long word that wont fit on the screen - split
int curwidth=0;
while(curwidth<allowedwidth)
{
JString charStr;
charStr+= st.charAt(lastindex);
curwidth+=m_pGraph->GetTextWidth(charStr);
lastindex++;
}
tmpStr = st.substring(0,lastindex);
paragraph[blockIndex] = new JString (tmpStr);
blockIndex++;
lastindex--;
}
else
{
tmpStr = st.substring(0,lastindex);
paragraph[blockIndex] = new JString (tmpStr);
blockIndex++;
}
st=st.substring(lastindex+1);
lastindex=0;
}
}
if(blockIndex>0 && (!st.equals(" ")))
{
paragraph[blockIndex] = new JString (st);
blockIndex++;
}
*counter = blockIndex;
}
/*===============================================================================
METHOD: SetCurrentScreen
=============================================================================== */
void Frontend::SetCurrentScreen(char screen, int selection)
{
JString tempStr;
int i;
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
m_titleText=NULL;
m_menuSelection=(short)selection;
m_numMenuItems=0;
m_textScrollY=0;
m_currentScreen=screen;
if(m_bShowOptions)
{
if(m_currentScreen==STATUS_PAUSE)
{
m_menuStringArray[0]= &m_pData->string8;
if(m_bSoundFlag)
m_menuStringArray[1]=&m_pData->string5;
else
m_menuStringArray[1]= &m_pData->string6;
if(!m_bIsPractice)
m_menuStringArray[2]= &m_pData->string9;
else
m_menuStringArray[2]= &m_pData->stringMainMenu;
CentreMenuPos(3);
m_titleText=m_pData->stringPauseMenu;
}
else
{
if(m_bSoundFlag)
m_menuStringArray[0]=&m_pData->string5;
else
m_menuStringArray[0]= &m_pData->string6;
m_menuStringArray[1]= &m_pData->string72;
CentreMenuPos(2);
m_titleText=m_pData->stringOptions;
}
}
else
{
switch(m_currentScreen)
{
case STATUS_INTRO:
DBGPRINTF("INTRO %d" , selection);
m_currentIntroScreen=selection;
m_menuSelection=0;
switch(selection)
{
case 4: //Splash
m_pGraph->SetBitmapClip(0,0,m_canvasW,m_canvasH);
m_pGraph->SetScreenClip(0,0,m_canvasW,m_canvasH);
//m_pSplashPNG=ISHELL_LoadResImage(m_pIShell, DUCATI_RES_FILE, BM_SPLASH);
m_SplashImg = new CMImage( loadCompressedData(BM_SPLASH, DUCATI_RES_FILE), true ); //拘绵茄 捞固瘤 肺靛
m_SplashImg->convert();
m_pGraph->SetColor(0);
m_pGraph->FillRect(0,0,m_canvasW,m_canvasH);
//DrawImage(m_pSplashPNG,m_canvasW/2,m_canvasH/2,HCENTER | VCENTER);
m_pKscUtil->DrawImage(m_SplashImg,(m_canvasW/2-m_SplashImg->getWidth()/2),(m_canvasH/2-m_SplashImg->getHeight()/2));
m_pGraph->SetFont(m_fontSmallBold);
m_pGraph->SetTextColor(CYAN);
tempStr = "Ver:";
tempStr += VERSION;
DBGPRINTF("version str %s" , tempStr.Buffer);
m_pGraph->DrawString(tempStr,m_halfScreenWidth,m_canvasH,bottomcentre);
m_timer=GETTIMEMS();
break;
case 2: //Vir2L
m_pGraph->SetColor(0);
m_pGraph->FillRect(0,0,m_canvasW,m_canvasH);
m_pVi2LPNG=ISHELL_LoadResImage(m_pIShell, DUCATI_RES_FILE, BM_VIR2L);
m_pGraph->DrawImage(m_pVi2LPNG,m_halfScreenWidth,m_halfScreenHeight,topcentre);
m_pGraph->SetFont(m_fontSmall);
m_pGraph->SetTextColor(0xc0c0c0);
{
int y = m_halfScreenHeight-37;
if (y < 2) y = 2;
m_pGraph->DrawString(m_pData->stringPublished1, m_halfScreenWidth,y,topcentre);
m_pGraph->DrawString(m_pData->stringPublished2, m_halfScreenWidth,y+10,topcentre);
}
m_timer=GETTIMEMS();
//set up next screen
//BS666 m_mformaScroll=m_canvasW;
break;
case 0:
case 7:
m_pGraph->SetColor(0);
m_pGraph->FillRect(0,0,m_canvasW,m_canvasH);
m_mformaScroll=m_canvasW;
m_timer=GETTIMEMS();
break;
case 1: //legal screen
case 6: //outtro
FreeParagraph();
m_paragraphCounter=centrecentre;
SetText(m_pData->legalText,m_canvasW,m_paragraphText,&m_paragraphCounter);
m_bDoneLegalScroll=FALSE;
m_timer=GETTIMEMS();
break;
case 3: //ESRB
FreeParagraph();
m_pGraph->SetColor(0);
m_pGraph->FillRect(0,0,m_canvasW,m_canvasH);
//m_pEsrbPNG=ISHELL_LoadResImage(m_pIShell, DUCATI_RES_FILE, BM_ESRB);
m_EsrbImg = new CMImage( loadCompressedData(BM_ESRB, DUCATI_RES_FILE), true ); //拘绵茄 捞固瘤 肺靛
m_EsrbImg->convert();
//DrawImage(m_pEsrbPNG,m_halfScreenWidth,m_halfScreenHeight,centrecentre);
m_pKscUtil->DrawImage(m_EsrbImg,(m_canvasW/2-m_EsrbImg->getWidth()/2),(m_canvasH/2-m_EsrbImg->getHeight()/2));
m_timer=GETTIMEMS();
break;
case 5: //Splash
//YingZ: Loading is very fast on brew devices, this screen is disabled - but check MFORMA guide lines!
// m_pGraph->DrawImage(m_pSplashPNG,0,0);
// m_pGraph->SetTextColor(WHITE);
// m_pGraph->DrawString(m_pData->textLoading,m_canvasW-2,2,topright);
break;
}
break;
case STATUS_NOFILE:
FreeParagraph();
m_titleText=NULL;
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
m_pGraph->SetColor(0);
m_pGraph->FillRect(0,0,m_canvasW,m_canvasH);
SetText(m_pData->stringNoFile,m_canvasW-2,m_paragraphText,&m_paragraphCounter);
break;
case STATUS_MAINMENU:
m_menuStringArray[0] = &m_pData->string1;
m_menuStringArray[1] = &m_pData->stringOptions;
m_menuStringArray[2] = &m_pData->stringHelp;
m_menuStringArray[3] = &m_pData->stringInfo;
//m_menuStringArray[4] = &m_pData->stringAbout;
m_menuStringArray[4] = &m_pData->string4;
m_titleText=m_pData->stringMainMenu;
CentreMenuPos(5);
break;
case STATUS_SUREEXIT:
m_menuStringArray[0] = &m_pData->string18;
m_menuStringArray[1] = &m_pData->string19;
CentreMenuPos(2);
m_titleText=m_pData->string4;
break;
case STATUS_ABOUT:
StartOnceHelp=0;
FreeParagraph();
m_titleText=m_pData->stringAbout;
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
tempStr = m_pData->legalText;
tempStr += m_pData->credits;
SetText(tempStr,m_canvasW-2,m_paragraphText,&m_paragraphCounter);
break;
case STATUS_INFO:
m_titleText=m_pData->stringInfo;
break;
case STATUS_HELP:
if(m_subPage<0)
{
m_menuStringArray[0] = &m_pData->string10;
m_menuStringArray[1] = &m_pData->string11;
m_menuStringArray[2] = &m_pData->string12;
m_menuStringArray[3] = &m_pData->string13;
m_menuStringArray[4] = &m_pData->string15;
CentreMenuPos(5);
m_titleText=m_pData->stringHelp;
}
else
{
//we won't have left right to change instructions on S40
StartOnceHelp=0;
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
FreeParagraph();
//SetText(*m_pData->ruleString[m_subPage],m_canvasW-2,m_paragraphText,&m_paragraphCounter);
}
break;
case STATUS_CHOOSECHARACTER:
m_menuStringArray[0] = &m_pData->stringSelect;
m_menuYPos=m_backdropShadowBottom-m_menuHeight;
m_menuBarYPos=m_menuYPos<<16;
m_titleText=m_pData->stringChooseCharacter;
FreeParagraph();
//SetText(*m_pData->bios[m_myCharacter],m_canvasW-2,m_paragraphText,&m_paragraphCounter);
break;
case STATUS_RACEMENU:
if(m_champStage==-1)
{
m_menuStringArray[0] = &m_pData->string22;
m_menuStringArray[1] = &m_pData->string23;
m_menuStringArray[2] = &m_pData->string21;
}
else
{
m_menuStringArray[0] = &m_pData->string22;
m_menuStringArray[1] = &m_pData->string59;
m_menuStringArray[2] = &m_pData->string60;
m_menuStringArray[3] = &m_pData->string21;
}
m_titleText=m_pData->stringRaceMenu;
//YingZ: maybe can be optimised to be included in above condition statement
if(m_champStage==-1)
CentreMenuPos(3);
else
CentreMenuPos(4);
break;
case STATUS_DIFFICULTYSELECT:
m_menuStringArray[0] = &m_pData->string26;
m_menuStringArray[1] = &m_pData->string27;
m_menuStringArray[2] = &m_pData->string28;
CentreMenuPos(3);
m_titleText=m_pData->stringChooseDifficulty;
break;
case STATUS_SHOP:
m_menuStringArray[0] = &m_pData->string29;
m_menuStringArray[1] = &m_pData->string30;
m_menuStringArray[2] = &m_pData->string31;
CentreMenuPos(3);
m_titleText=m_pData->string21;
break;
case STATUS_CHOOSEBIKE:
m_menuStringArray[0] = &m_pData->stringSelect;
m_menuYPos=m_backdropShadowBottom-(m_menuHeight<<1);
m_menuBarYPos=m_menuYPos<<16;
m_titleText=m_pData->stringChooseBike;
break;
case STATUS_PARTSMAIN:
m_menuStringArray[0] = &m_pData->string47;
m_menuStringArray[1] = &m_pData->string48;
m_menuStringArray[2] = &m_pData->string49;
m_menuStringArray[3] = &m_pData->string50;
CentreMenuPos(4);
m_titleText=m_pData->string29;
break;
case STATUS_PARTSSUBSCREEN:
m_menuStringArray[0] = &m_pData->stringSelect;
m_menuYPos=m_backdropShadowBottom-(m_menuHeight<<1);
m_menuBarYPos=m_menuYPos<<16;
m_titleText=*m_pData->partsStrings[m_subPage];
break;
case STATUS_REPAIR:
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
m_titleText=m_pData->string30;
break;
case STATUS_CHAMPFINISHED:
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
m_titleText=m_pData->string23;
if(m_playerChampPos>2) //nowhere
{
JString tmpStr;
FreeParagraph();
tmpStr = m_pData->string61;
tmpStr += *m_pData->positions[m_playerChampPos];
tmpStr += m_pData->string62;
SetText(tmpStr,m_canvasW-2,m_paragraphText,&m_paragraphCounter);
}
else
{
int champReward;
if(m_playerChampPos==0) //won
{
tempStr=m_pData->string51;
champReward=400;
}
else if(m_playerChampPos==1)
{
tempStr=m_pData->string52;
champReward=200;
}
else
{
tempStr=m_pData->string53;
champReward=100;
}
champReward*=m_difficultyLevel+1;
FreeParagraph();
tempStr+="~";
tempStr+=m_pData->string54;
tempStr+=champReward;
SetText(tempStr,m_canvasW-2,m_paragraphText,&m_paragraphCounter);
m_myCash+=champReward;
}
m_champStage=-1;
m_pGame->m_score[0]=-1;
WriteRecords();
break;
case STATUS_CHAMPTABLE:
SortChampScores();
for (i = 0; i < MAX_MENU_STR; i++)
m_menuStringArray[i]=NULL;
m_titleText=m_pData->string23;
m_paragraphHeight=4+(20*7)-m_backdropShadowHeight; //for the scrolling
if (m_paragraphHeight<0) m_paragraphHeight=0;
m_playerChampPos=0;
while(m_champOrder[m_playerChampPos]!=0)
m_playerChampPos++;
m_textScrollY=(m_playerChampPos-2)*20;
if(m_textScrollY<0)
m_textScrollY=0;
else if(m_textScrollY>m_paragraphHeight)
m_textScrollY=m_paragraphHeight;
break;
case STATUS_TRACK:
if(m_bIsPractice)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -