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

📄 menu.cpp

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