⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		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 + -