📄 newstatusbar.cpp
字号:
m_stAmmo.borderJ = STATTAB_JUST_NW;
m_stAmmo.iconX = 63;
m_stAmmo.iconY = 0;
m_stAmmo.iconJ = STATTAB_JUST_N;
m_stAmmo.valueX = 63;
m_stAmmo.valueY = 32;
m_stAmmo.valueJ = CF_JUSTIFY_CENTER;
m_stAmmo.digits = 3;
// Alt Ammo status tab
m_stAltAmmo.sizeX = 60;
m_stAltAmmo.sizeY = 20;
m_stAltAmmo.hTab = m_pClientDE->CreateSurface(m_stAmmo.sizeX, m_stAmmo.sizeY);
m_stAltAmmo.hBorder = 0;
m_stAltAmmo.hIcon = m_pClientDE->CreateSurfaceFromBitmap("interface/statusbar/weapons/raidcanister.pcx");
m_stAltAmmo.hBar = 0;
m_stAltAmmo.borderX = 0;
m_stAltAmmo.borderY = 0;
m_stAltAmmo.borderJ = 0;
m_stAltAmmo.iconX = 0;
m_stAltAmmo.iconY = 0;
m_stAltAmmo.iconJ = STATTAB_JUST_NW;
m_stAltAmmo.valueX = 35;
m_stAltAmmo.valueY = 3;
m_stAltAmmo.valueJ = CF_JUSTIFY_LEFT;
m_stAltAmmo.digits = 3;
return DTRUE;
}
//*************************************************************************
//***** Function: InitInvTabs()
//***** Details: Initializes the inventory tabs
//*************************************************************************
DBOOL CNewStatusBar::InitInvTabs()
{
// Prev, current, and next items
for(int i = 0; i < 3; i++)
{
m_stItems[i].sizeX = 75;
m_stItems[i].sizeY = 50;
m_stItems[i].hTab = m_pClientDE->CreateSurface(m_stItems[i].sizeX, m_stItems[i].sizeY);
m_stItems[i].hBorder = m_pClientDE->CreateSurfaceFromBitmap("interface/statusbar/border_inv.pcx");
m_stItems[i].hIcon = 0;
m_stItems[i].hBar = 0;
m_stItems[i].borderX = 0;
m_stItems[i].borderY = 4;
m_stItems[i].borderJ = STATTAB_JUST_NW;
m_stItems[i].iconX = 50;
m_stItems[i].iconY = 18;
m_stItems[i].iconJ = STATTAB_JUST_C;
m_stItems[i].valueX = 50;
m_stItems[i].valueY = 29;
m_stItems[i].valueJ = CF_JUSTIFY_CENTER;
m_stItems[i].digits = 3;
}
// Currently selected item
m_stCurrentItem.sizeX = 50;
m_stCurrentItem.sizeY = 45;
m_stCurrentItem.hTab = m_pClientDE->CreateSurface(m_stCurrentItem.sizeX, m_stCurrentItem.sizeY);
m_stCurrentItem.hBorder = m_pClientDE->CreateSurfaceFromBitmap("interface/statusbar/border_current.pcx");
m_stCurrentItem.hIcon = 0;
m_stCurrentItem.hBar = 0;
m_stCurrentItem.borderX = 2;
m_stCurrentItem.borderY = 0;
m_stCurrentItem.borderJ = STATTAB_JUST_NW;
m_stCurrentItem.iconX = 25;
m_stCurrentItem.iconY = 14;
m_stCurrentItem.iconJ = STATTAB_JUST_C;
m_stCurrentItem.valueX = 25;
m_stCurrentItem.valueY = 25;
m_stCurrentItem.valueJ = CF_JUSTIFY_CENTER;
m_stCurrentItem.digits = 3;
return DTRUE;
}
//*************************************************************************
//***** Function: InitWeaponTabs()
//***** Details: Initializes the weapon tabs
//*************************************************************************
DBOOL CNewStatusBar::InitWeaponTabs()
{
// Prev, current, and next items
for(int i = 0; i < 10; i++)
{
m_stWeapons[i].sizeX = 150;
m_stWeapons[i].sizeY = 25;
m_stWeapons[i].hTab = m_pClientDE->CreateSurface(m_stWeapons[i].sizeX, m_stWeapons[i].sizeY);
m_stWeapons[i].hBorder = m_pClientDE->CreateSurfaceFromBitmap("interface/statusbar/border_weapon.pcx");
m_stWeapons[i].hIcon = 0;
m_stWeapons[i].hBar = 0;
m_stWeapons[i].borderX = 122;
m_stWeapons[i].borderY = 3;
m_stWeapons[i].borderJ = STATTAB_JUST_NW;
m_stWeapons[i].iconX = 125;
m_stWeapons[i].iconY = 4;
m_stWeapons[i].iconJ = STATTAB_JUST_NE;
m_stWeapons[i].value = i + 1;
m_stWeapons[i].valueX = 150;
m_stWeapons[i].valueY = 0;
m_stWeapons[i].valueJ = CF_JUSTIFY_RIGHT;
m_stWeapons[i].digits = 2;
SetupTab(m_stWeapons[i], m_pStatNumbers2, TAB_INC_HIGH);
}
return DTRUE;
}
//*************************************************************************
//***** Function: InitObjectivesTab()
//***** Details: Initializes the objectives to some general text
//*************************************************************************
DBOOL CNewStatusBar::InitObjectivesTab()
{
if(!m_pClientDE || !m_hObjectives) return DFALSE;
DDWORD width, height;
// Reset the background picture of the objectives
m_pClientDE->DrawBitmapToSurface(m_hObjectives, "interface/objectives/objectives.pcx", DNULL, 0, 0);
m_pClientDE->GetSurfaceDims(m_hObjectives, &width, &height);
// Setup the font and print it out on the surface
m_pStatCursor->SetFont(m_pObjectivesFont1);
m_pStatCursor->SetDest(m_hObjectives);
m_pStatCursor->SetJustify(CF_JUSTIFY_CENTER);
m_pStatCursor->SetLoc(OBJTAB_TITLE_CENTER, OBJTAB_TITLE_TOP);
m_pStatCursor->Draw("No Current Objective");
return DTRUE;
}
//*************************************************************************
//***** Function: TermStatTabs()
//***** Details: Removes the stat tabs
//*************************************************************************
void CNewStatusBar::TermStatTabs()
{
if(m_stHealth.hTab) { m_pClientDE->DeleteSurface(m_stHealth.hTab); m_stHealth.hTab = 0; }
if(m_stHealth.hBorder) { m_pClientDE->DeleteSurface(m_stHealth.hBorder); m_stHealth.hBorder = 0; }
if(m_stHealth.hIcon) { m_pClientDE->DeleteSurface(m_stHealth.hIcon); m_stHealth.hIcon = 0; }
if(m_stHealth.hBar) { m_pClientDE->DeleteSurface(m_stHealth.hBar); m_stHealth.hBar = 0; }
if(m_stArmor.hTab) { m_pClientDE->DeleteSurface(m_stArmor.hTab); m_stArmor.hTab = 0; }
if(m_stArmor.hBorder) { m_pClientDE->DeleteSurface(m_stArmor.hBorder); m_stArmor.hBorder = 0; }
if(m_stArmor.hIcon) { m_pClientDE->DeleteSurface(m_stArmor.hIcon); m_stArmor.hIcon = 0; }
if(m_stArmor.hBar) { m_pClientDE->DeleteSurface(m_stArmor.hBar); m_stArmor.hBar = 0; }
if(m_stAmmo.hTab) { m_pClientDE->DeleteSurface(m_stAmmo.hTab); m_stAmmo.hTab = 0; }
if(m_stAmmo.hBorder) { m_pClientDE->DeleteSurface(m_stAmmo.hBorder); m_stAmmo.hBorder = 0; }
if(m_stAmmo.hIcon) { m_pClientDE->DeleteSurface(m_stAmmo.hIcon); m_stAmmo.hIcon = 0; }
if(m_stAmmo.hBar) { m_pClientDE->DeleteSurface(m_stAmmo.hBar); m_stAmmo.hBar = 0; }
if(m_stAltAmmo.hTab) { m_pClientDE->DeleteSurface(m_stAltAmmo.hTab); m_stAltAmmo.hTab = 0; }
if(m_stAltAmmo.hBorder) { m_pClientDE->DeleteSurface(m_stAltAmmo.hBorder); m_stAltAmmo.hBorder = 0; }
if(m_stAltAmmo.hIcon) { m_pClientDE->DeleteSurface(m_stAltAmmo.hIcon); m_stAltAmmo.hIcon = 0; }
if(m_stAltAmmo.hBar) { m_pClientDE->DeleteSurface(m_stAltAmmo.hBar); m_stAltAmmo.hBar = 0; }
}
//*************************************************************************
//***** Function: TermInvTabs()
//***** Details: Removes the inventory tabs
//*************************************************************************
void CNewStatusBar::TermInvTabs()
{
for(int i = 0; i < 3; i++)
{
if(m_stItems[i].hTab) { m_pClientDE->DeleteSurface(m_stItems[i].hTab); m_stItems[i].hTab = 0; }
if(m_stItems[i].hBorder){ m_pClientDE->DeleteSurface(m_stItems[i].hBorder); m_stItems[i].hBorder = 0; }
if(m_stItems[i].hIcon) { m_pClientDE->DeleteSurface(m_stItems[i].hIcon); m_stItems[i].hIcon = 0; }
if(m_stItems[i].hBar) { m_pClientDE->DeleteSurface(m_stItems[i].hBar); m_stItems[i].hBar = 0; }
}
if(m_stCurrentItem.hTab) { m_pClientDE->DeleteSurface(m_stCurrentItem.hTab); m_stCurrentItem.hTab = 0; }
if(m_stCurrentItem.hBorder) { m_pClientDE->DeleteSurface(m_stCurrentItem.hBorder); m_stCurrentItem.hBorder = 0; }
if(m_stCurrentItem.hIcon) { m_pClientDE->DeleteSurface(m_stCurrentItem.hIcon); m_stCurrentItem.hIcon = 0; }
if(m_stCurrentItem.hBar) { m_pClientDE->DeleteSurface(m_stCurrentItem.hBar); m_stCurrentItem.hBar = 0; }
}
//*************************************************************************
//***** Function: TermWeaponTabs()
//***** Details: Removes the weapon tabs
//*************************************************************************
void CNewStatusBar::TermWeaponTabs()
{
for(int i = 0; i < 10; i++)
{
if(m_stWeapons[i].hTab) { m_pClientDE->DeleteSurface(m_stWeapons[i].hTab); m_stWeapons[i].hTab = 0; }
if(m_stWeapons[i].hBorder) { m_pClientDE->DeleteSurface(m_stWeapons[i].hBorder); m_stWeapons[i].hBorder = 0; }
if(m_stWeapons[i].hIcon) { m_pClientDE->DeleteSurface(m_stWeapons[i].hIcon); m_stWeapons[i].hIcon = 0; }
if(m_stWeapons[i].hBar) { m_pClientDE->DeleteSurface(m_stWeapons[i].hBar); m_stWeapons[i].hBar = 0; }
}
}
//*************************************************************************
//***** Function: UpdateInv()
//***** Details: Changes the inventory items to the new prev, cur, and next
//*************************************************************************
void CNewStatusBar::UpdateInv(DBOOL bShow, HSTRING name, HSTRING c, HSTRING cH, DDWORD cN, HSTRING p, DDWORD pN, HSTRING n, DDWORD nN)
{
if(!m_pClientDE) return;
char string1[100] = "interface/statusbar/items/";
char string2[100];
// Fill in the name of the current object
m_pClientDE->FillRect(m_hItemName, DNULL, m_hTransColor);
if(name)
{
m_pStatCursor->SetFont(m_pStatFont1);
m_pStatCursor->SetDest(m_hItemName);
m_pStatCursor->SetJustify(CF_JUSTIFY_LEFT);
m_pStatCursor->SetLoc(0, 0);
m_pStatCursor->Draw(m_pClientDE->GetStringData(name));
}
// Currently selected item
if(m_stCurrentItem.hIcon)
{
m_pClientDE->DeleteSurface(m_stCurrentItem.hIcon);
m_stCurrentItem.hIcon = 0;
}
if(c)
{
_mbscpy((unsigned char*)string2, (const unsigned char*)string1);
_mbscat((unsigned char*)string2, (const unsigned char*)m_pClientDE->GetStringData(c));
m_stCurrentItem.hIcon = m_pClientDE->CreateSurfaceFromBitmap(string2);
m_stCurrentItem.value = cN;
}
// Currently highlighted item in the inv tabs
if(m_stItems[1].hIcon)
{
m_pClientDE->DeleteSurface(m_stItems[1].hIcon);
m_stItems[1].hIcon = 0;
}
if(cH)
{
_mbscpy((unsigned char*)string2, (const unsigned char*)string1);
_mbscat((unsigned char*)string2, (const unsigned char*)m_pClientDE->GetStringData(cH));
m_stItems[1].hIcon = m_pClientDE->CreateSurfaceFromBitmap(string2);
m_stItems[1].value = cN;
}
// Previous item in the inv tabs
if(m_stItems[0].hIcon)
{
m_pClientDE->DeleteSurface(m_stItems[0].hIcon);
m_stItems[0].hIcon = 0;
}
if(p)
{
_mbscpy((unsigned char*)string2, (const unsigned char*)string1);
_mbscat((unsigned char*)string2, (const unsigned char*)m_pClientDE->GetStringData(p));
m_stItems[0].hIcon = m_pClientDE->CreateSurfaceFromBitmap(string2);
m_stItems[0].value = pN;
}
// Next item in the inv tabs
if(m_stItems[2].hIcon)
{
m_pClientDE->DeleteSurface(m_stItems[2].hIcon);
m_stItems[2].hIcon = 0;
}
if(n)
{
_mbscpy((unsigned char*)string2, (const unsigned char*)string1);
_mbscat((unsigned char*)string2, (const unsigned char*)m_pClientDE->GetStringData(n));
m_stItems[2].hIcon = m_pClientDE->CreateSurfaceFromBitmap(string2);
m_stItems[2].value = nN;
}
// Update the time so it stays on the screen for a while
switch(m_nInvLevel)
{
case INVTAB_INVISIBLE:
if( bShow )
{
m_nInvLevel = INVTAB_SCROLL_IN;
m_fInvUpdateTime = m_pClientDE->GetTime();
}
break;
case INVTAB_SCROLL_IN:
break;
case INVTAB_STOPPED:
m_fInvUpdateTime = m_pClientDE->GetTime();
break;
case INVTAB_SCROLL_OUT:
m_nInvLevel = INVTAB_SCROLL_IN;
m_fInvUpdateTime = m_pClientDE->GetTime();
break;
}
// Setup the items tabs with the new information
for(int i = 0; i < 3; i++)
if(m_stItems[i].hIcon)
SetupTab(m_stItems[i], m_pStatFont1, TAB_INC_HIGH);
}
//*************************************************************************
//***** Function: ToggleWeapons()
//***** Details: Toggles the weapon view
//*************************************************************************
void CNewStatusBar::ToggleWeapons()
{
if(m_nWeapLevel == WEAPTAB_INVISIBLE)
{
m_nWeapLevel = WEAPTAB_SCROLL_IN;
m_fWeapUpdateTime = m_pClientDE->GetTime();
}
else if(m_nWeapLevel == WEAPTAB_STOPPED)
{
m_nWeapLevel = WEAPTAB_SCROLL_OUT;
m_fWeapUpdateTime = m_pClientDE->GetTime();
}
}
//*************************************************************************
//***** Function: UpdateWeap()
//***** Details: Changes the weapons to the latest one
//*************************************************************************
void CNewStatusBar::UpdateWeap(HSTRING weap, HSTRING weapH, char slot)
{
if(!m_pClientDE) return;
// Delete the old strings
if(m_pWeapPics[slot]) { m_pClientDE->FreeString(m_pWeapPics[slot]); m_pWeapPics[slot] = 0; }
if(m_pWeapPicsH[slot]) { m_pClientDE->FreeString(m_pWeapPicsH[slot]); m_pWeapPicsH[slot] = 0; }
// Update the string arrays for the pictures
if(weap) m_pWeapPics[slot] = m_pClientDE->CopyString(weap);
if(weapH) m_pWeapPicsH[slot] = m_pClientDE->CopyString(weapH);
// Delete the icon if there is one (there shouldn't be)
if(m_stWeapons[slot].hIcon)
{
m_pClientDE->DeleteSurface(m_stWeapons[slot].hIcon);
m_stWeapons[slot].hIcon = 0;
}
// Set the new icon for this slot
if(weap)
m_stWeapons[slot].hIcon = m_pClientDE->CreateSurfaceFromBitmap(m_pClientDE->GetStringData(weap));
SetupTab(m_stWeapons[slot], m_pStatNumbers2, TAB_INC_HIGH);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -