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

📄 newstatusbar.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	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 + -