📄 menu.cpp
字号:
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 + -