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

📄 menu.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	SetupOption(m_pOSSubItems[3][1], 4, "Weapon 2 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][2], 4, "Weapon 3 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][3], 4, "Weapon 4 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][4], 4, "Weapon 5 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][5], 4, "Weapon 6 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][6], 4, "Weapon 7 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][7], 4, "Weapon 8 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][8], 4, "Weapon 9 Cycle\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[3][9], 4, "Weapon 0 Cycle\0", 0, 0, 10, 1);

	SetupOption(m_pOSSubItems[5][0], 6, "Forward\0", 0, 0, 0, 1);
	SetupOption(m_pOSSubItems[5][1], 6, "Backward\0", 0, 0, 1, 1);
	SetupOption(m_pOSSubItems[5][2], 6, "Turn Left\0", 0, 0, 9, 1);
	SetupOption(m_pOSSubItems[5][3], 6, "Turn Right\0", 0, 0, 10, 1);
	SetupOption(m_pOSSubItems[5][4], 6, "Strafe\0", 0, 0, 8, 1);
	SetupOption(m_pOSSubItems[5][5], 6, "Strafe Left\0", 0, 0, 12, 1);
	SetupOption(m_pOSSubItems[5][6], 6, "Strafe Right\0", 0, 0, 13, 1);
	SetupOption(m_pOSSubItems[5][7], 6, "Run\0", 0, 0, 6, 1);
	SetupOption(m_pOSSubItems[5][8], 6, "Jump\0", 0, 0, 5, 1);
	SetupOption(m_pOSSubItems[5][9], 6, "Crouch\0", 0, 0, 4, 1);
	SetupOption(m_pOSSubItems[5][10], 6, "Look Up\0", 0, 0, 16, 1);
	SetupOption(m_pOSSubItems[5][11], 6, "Look Down\0", 0, 0, 17, 1);
	SetupOption(m_pOSSubItems[5][12], 6, "Turn Around\0", 0, 0, 3, 1);
	SetupOption(m_pOSSubItems[5][13], 6, "Mouse Look Toggle\0", 0, 0, 15, 1);
	SetupOption(m_pOSSubItems[5][14], 6, "Use\0", 0, 0, 2, 1);
	SetupOption(m_pOSSubItems[5][15], 6, "Grab\0", 0, 0, 36, 1);
	SetupOption(m_pOSSubItems[5][16], 6, "Primary Fire\0", 0, 0, 7, 1);
	SetupOption(m_pOSSubItems[5][17], 6, "Alt Fire \0", 0, 0, 14, 1);
	SetupOption(m_pOSSubItems[5][18], 6, "Use Item\0", 0, 0, 22, 1);
	SetupOption(m_pOSSubItems[5][19], 6, "Next Item\0", 0, 0, 24, 1);
	SetupOption(m_pOSSubItems[5][20], 6, "Previous Item\0", 0, 0, 23, 1);
	SetupOption(m_pOSSubItems[5][21], 6, "Next Weapon\0", 0, 0, 27, 1);
	SetupOption(m_pOSSubItems[5][22], 6, "Previous Weapon\0", 0, 0, 28, 1);
	SetupOption(m_pOSSubItems[5][23], 6, "Drop Weapon\0", 0, 0, 29, 1);
	SetupOption(m_pOSSubItems[5][24], 6, "Weapon Layout\0", 0, 0, 0, 1);
	SetupOption(m_pOSSubItems[5][25], 6, "Send Message\0", 0, 0, 21, 1);
	SetupOption(m_pOSSubItems[5][26], 6, "Send Macro\0", 0, 0, 0, 1);
	SetupOption(m_pOSSubItems[5][27], 6, "Shrink Screen\0", 0, 0, 25, 1);
	SetupOption(m_pOSSubItems[5][28], 6, "Enlarge Screen\0", 0, 0, 26, 1);
	SetupOption(m_pOSSubItems[5][29], 6, "Message Log\0", 0, 0, 0, 1);
	SetupOption(m_pOSSubItems[5][30], 6, "Frags / Level Status\0", 0, 0, 0, 1);
	SetupOption(m_pOSSubItems[5][31], 6, "Use Item 1\0", 0, 0, 30, 1);
	SetupOption(m_pOSSubItems[5][32], 6, "Use Item 2\0", 0, 0, 31, 1);
	SetupOption(m_pOSSubItems[5][33], 6, "Use Item 3\0", 0, 0, 32, 1);
	SetupOption(m_pOSSubItems[5][34], 6, "Use Item 4\0", 0, 0, 33, 1);
	SetupOption(m_pOSSubItems[5][35], 6, "Select Weapon 1\0", 0, 0, 37, 1);
	SetupOption(m_pOSSubItems[5][36], 6, "Select Weapon 2\0", 0, 0, 38, 1);
	SetupOption(m_pOSSubItems[5][37], 6, "Select Weapon 3\0", 0, 0, 39, 1);
	SetupOption(m_pOSSubItems[5][38], 6, "Select Weapon 4\0", 0, 0, 40, 1);
	SetupOption(m_pOSSubItems[5][39], 6, "Select Weapon 5\0", 0, 0, 41, 1);
	SetupOption(m_pOSSubItems[5][40], 6, "Select Weapon 6\0", 0, 0, 42, 1);
	SetupOption(m_pOSSubItems[5][41], 6, "Select Weapon 7\0", 0, 0, 43, 1);
	SetupOption(m_pOSSubItems[5][42], 6, "Select Weapon 8\0", 0, 0, 44, 1);
	SetupOption(m_pOSSubItems[5][43], 6, "Select Weapon 9\0", 0, 0, 45, 1);
	SetupOption(m_pOSSubItems[5][44], 6, "Select Weapon 10\0", 0, 0, 46, 1);

	SetupOption(m_pOSSubItems[6][0], 2, "Mouse X Sensitivity\0", 0, 5, 10, 1);
	SetupOption(m_pOSSubItems[6][1], 2, "Mouse Y Sensitivity\0", 0, 5, 10, 1);
	SetupOption(m_pOSSubItems[6][2], 3, "Invert Y Axis\0", 0, 0, 0, 1);
	SetupOption(m_pOSSubItems[6][3], 0, "\0", 0, 0, 0, 0);
	SetupOption(m_pOSSubItems[6][4], 5, "Mouse Button 1\0", g_pActionName, 7, 46, 1);
	SetupOption(m_pOSSubItems[6][5], 5, "Mouse Button 2\0", g_pActionName, 0, 46, 1);
	SetupOption(m_pOSSubItems[6][6], 5, "Mouse Button 3\0", g_pActionName, 14, 46, 1);

	SetupOption(m_pOSSubItems[7][0], 3, "Enable Joystick\0", 0, 0, 0, 1);

	m_bOptionsOn = 1;
	m_bOSInputMode = 0;
	return	1;
}

// --------------------------------------------------------------------------- //
//
//	ROUTINE:	CMenu::SetupOption()
//
//	PURPOSE:	Initializes a menu option
//
// --------------------------------------------------------------------------- //

void	CMenu::SetupOption(OPTIONITEM &op, char t, char *s1, char **s2, char n1, char n2, char a)
{
	op.type = t;
	op.string1 = s1;
	op.string2 = s2;
	op.num1 = n1;
	op.num2 = n2;
	op.active = a;
}

// --------------------------------------------------------------------------- //
//
//	ROUTINE:	CMenu::GetGraphicsMode()
//
//	PURPOSE:	Initializes a the graphics mode menu option
//
// --------------------------------------------------------------------------- //

char	CMenu::GetGraphicsMode()
{
	// Make the display modes list
	m_pRModes = m_pClientDE->GetRenderModes();
	RMode	*modeIndex = m_pRModes;
	RMode	curRMode;
	m_numModes = 0;
	m_curMode = 0;

	m_pClientDE->GetRenderMode(&curRMode);
	while(modeIndex)
	{
		if((modeIndex->m_Width == curRMode.m_Width) && (modeIndex->m_Height == curRMode.m_Height))
			m_curMode = m_numModes;
		m_numModes++;
		modeIndex = modeIndex->m_pNext;
	}

	SetupOption(m_pOSSubItems[1][0], 5, "Graphics Resolution\0", 0, m_curMode, m_numModes - 1, 1);
	return	1;
}

// --------------------------------------------------------------------------- //
//
//	ROUTINE:	CMenu::TermOptionsMenu()
//
//	PURPOSE:	Terminates the data from the options menu
//
// --------------------------------------------------------------------------- //

void	CMenu::TermOptionsMenu()
{
	for(char i = 0; i < OS_NUM_CATEGORIES; i++)
		if(m_pOSSubItems[i])
			delete m_pOSSubItems[i];

	memset(m_pOSCategory, 0, sizeof(OPTIONITEM) * OS_NUM_CATEGORIES);
	memset(m_pOSSubItems, 0, sizeof(OPTIONITEM*) * OS_NUM_CATEGORIES);

	m_bOSCategory = 0;
	m_bOSSubItem = 0;
	m_bOptionsOn = 0;

	m_pClientDE->RelinquishRenderModes(m_pRModes);
	m_pRModes = 0;

	m_pClientDE->SetInputState(DTRUE);
}

// --------------------------------------------------------------------------- //
//
//	ROUTINE:	CMenu::OnKeyDown()
//
//	PURPOSE:	Called upon a key down message from Windows.
//
// --------------------------------------------------------------------------- //
DBOOL CMenu::HandleKeyDown(int key, int rep)
{
	if(m_bOptionsOn)	return HandleOptionsControl(key);

	switch (key)
	{
		case VK_RETURN:
			return	1;
		case VK_DOWN:
		case VK_RIGHT:
		{
			// play the switch sound
			m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
			ScrollDown();
			break;
		}

		case VK_UP:
		case VK_LEFT:
		{
			// play the switch sound
			m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
			ScrollUp();
			break;
		}

		case VK_ESCAPE:
		{
			// play the select sound
			m_pClientDE->PlaySoundLocal("sounds/interface/MenuSelect2.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
			if (!BackOneLevel())
			{	
//				Reset(); 
				return 1;	
			}
			break;
		}
	}
	return 0;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CMenu::HandleOptionsControl(int key)
//
//	PURPOSE:	
//
// ----------------------------------------------------------------------- //

char CMenu::HandleOptionsControl(int key)
{
	if((m_bOSInputMode == 2) && (m_bOptionsOn == 2))
	{
		if(m_bOSInputChar < SB_MAX_OS_STRING_SIZE - 1)
		{
			if((key >= VK_0) && (key <= VK_9))
			{
				m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
				m_szOSInputString[m_bOSInputChar - 1] = key;
				m_szOSInputString[m_bOSInputChar++] = '_';
				m_szOSInputString[m_bOSInputChar] = 0;
				return	0;
			}

			if((key >= VK_A) && (key <= VK_Z))
			{
				m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
				m_szOSInputString[m_bOSInputChar - 1] = key;
				m_szOSInputString[m_bOSInputChar++] = '_';
				m_szOSInputString[m_bOSInputChar] = 0;
				return	0;
			}

			if(key == VK_SPACE)
			{
				m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
				m_szOSInputString[m_bOSInputChar - 1] = ' ';
				m_szOSInputString[m_bOSInputChar++] = '_';
				m_szOSInputString[m_bOSInputChar] = 0;
				return	0;
			}
		}

		if((key == VK_BACK) && (m_bOSInputChar > 1))
		{
			m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
			m_bOSInputChar--;
			m_szOSInputString[m_bOSInputChar] = 0;
			m_szOSInputString[m_bOSInputChar - 1] = '_';
			return	0;
		}

		if(key == VK_RETURN)
		{
			m_pClientDE->PlaySoundLocal("sounds/interface/MenuSelect3.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
			m_bOSInputChar--;
			m_szOSInputString[m_bOSInputChar] = 0;
			SaveConfigFile(DFALSE);

			m_bOSInputMode = 0;
			m_bOptionsOn = 1;
//			m_bOSInputChar = 0;
			return	0;
		}

		if(key == VK_ESCAPE)
		{
			m_pClientDE->PlaySoundLocal("sounds/interface/MenuSelect3.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
			m_bOSInputMode = 0;
			m_bOptionsOn = 1;
			memset(m_szOSInputString, 0, SB_MAX_OS_STRING_SIZE);
//			m_bOSInputChar = 0;
			return	0;
		}
		return	0;
	}

	if(m_gGotKeyPress && (m_pClientDE->GetTime() < m_gKeyPressTime + 0.1f))
	{
//		m_bOSInputMode = 0;
		m_gGotKeyPress = 0;
		return	0;
	}

/*	if((m_bOSInputMode == 1) && (m_bOptionsOn == 2) && m_gGotKeyPress)
	{
		m_bOSInputMode = 0;
		m_gGotKeyPress = 0;
		return	0;
	}
*/
	if(!m_bOSInputMode)
		switch(key)
		{
			case	VK_ESCAPE:
				m_pClientDE->PlaySoundLocal("sounds/interface/MenuSelect2.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
				if(m_bOptionsOn == 1)	
				{	
					TermOptionsMenu(); 
					if (!BackOneLevel())
						return 1;
				}
				else	
					m_bOptionsOn--;

				if((m_bOSCategory == 10) || (m_bOSCategory == 11))
				{
					delete	m_pOSSubItems[m_bOSCategory];
					m_pOSSubItems[m_bOSCategory] = 0;
				}
				return	0;

			case	VK_UP:
				if(m_bOptionsOn == 1)
				{
					m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
					do
					{
						m_bOSCategory--;
						if(m_bOSCategory < 0)	m_bOSCategory = OS_NUM_CATEGORIES - 1;
					}
					while(!m_pOSCategory[m_bOSCategory].active);
				}
				else
				{
					m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
					do
					{
						m_bOSSubItem--;
						if(m_bOSTopSubItem && (m_bOSSubItem == m_bOSTopSubItem))
							m_bOSTopSubItem--;
						if(m_bOSSubItem < 0)
							{ m_bOSSubItem = m_pOSCategory[m_bOSCategory].num1 - 1; m_bOSTopSubItem = m_bOSSubItem - 13; }
						if(m_bOSTopSubItem < 0)
							m_bOSTopSubItem = 0;
					}
					while(!m_pOSSubItems[m_bOSCategory][m_bOSSubItem].active);
				}
				break;

			case	VK_DOWN:
				if(m_bOptionsOn == 1)
				{
					m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
					do
					{
						m_bOSCategory++;
						if(m_bOSCategory > OS_NUM_CATEGORIES - 1)	m_bOSCategory = 0;
					}
					while(!m_pOSCategory[m_bOSCategory].active);
				}
				else
				{
					m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
					do
					{
						m_bOSSubItem++;
						if((m_bOSTopSubItem + 14 < m_pOSCategory[m_bOSCategory].num1) && (m_bOSSubItem == m_bOSTopSubItem + 13))
							m_bOSTopSubItem++;
						if(m_bOSSubItem > m_pOSCategory[m_bOSCategory].num1 - 1)
							{ m_bOSSubItem = 0; m_bOSTopSubItem = 0; }
					}
					while(!m_pOSSubItems[m_bOSCategory][m_bOSSubItem].active);
				}
				break;

			case	VK_LEFT:
				if(m_bOptionsOn == 2)
				{
					OPTIONITEM	*op = &(m_pOSSubItems[m_bOSCategory][m_bOSSubItem]);
					short		tempVal = op->num1;

					switch(op->type)
					{
						case	2:
						case	4:
						case	5:	if(op->num1 > 0) op->num1--;			break;
						case	3:	op->num1 = op->num1 ? 0 : 1;			break;
					}
					if(tempVal != op->num1)
						m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
				}
				break;

			case	VK_RIGHT:
				if(m_bOptionsOn == 2)
				{
					OPTIONITEM	*op = &(m_pOSSubItems[m_bOSCategory][m_bOSSubItem]);
					short		tempVal = op->num1;

					switch(op->type)
					{
						case	2:
						case	4:
						case	5:	if(op->num1 < op->num2) op->num1++;		break;
						case	3:	op->num1 = op->num1 ? 0 : 1;			break;
					}
					if(tempVal != op->num1)
						m_pClientDE->PlaySoundLocal("sounds/interface/MenuSwitch1.wav", NULL, SOUNDPRIORITY_MISC_HIGH);
				}
				break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -