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

📄 menujoystick.cpp

📁 Blood 2全套源码
💻 CPP
字号:
// MenuJoystick.cpp: implementation of the CMenuJoystick class.
//
//////////////////////////////////////////////////////////////////////

#include "MainMenus.h"
#include "MenuJoystick.h"
#include "MenuJoystickAxis.h"
#include "BloodClientShell.h"
#include "ClientRes.h"

#define JOYSTICKAXISX 0
#define JOYSTICKAXISY 1


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMenuJoystick::CMenuJoystick()
{
	m_bUseJoystick=DFALSE;	
	m_bUsePovHat=DFALSE;

	m_pUsePovHat=NULL;

	m_pAxisTurn=new CMenuJoystickAxisTurn;
	m_pAxisLook=new CMenuJoystickAxisLook;	
	m_pAxisStrafe=new CMenuJoystickAxisStrafe;
	m_pAxisMove=new CMenuJoystickAxisMove;	
}

CMenuJoystick::~CMenuJoystick()
{
	if (m_pAxisTurn)
	{
		delete m_pAxisTurn;
		m_pAxisTurn=DNULL;
	}
	if (m_pAxisLook)
	{
		delete m_pAxisLook;
		m_pAxisLook=DNULL;
	}
	if (m_pAxisStrafe)
	{
		delete m_pAxisStrafe;
		m_pAxisStrafe=DNULL;
	}
	if (m_pAxisMove)
	{
		delete m_pAxisMove;
		m_pAxisMove=DNULL;
	}	
}

// Build the menu
void CMenuJoystick::Build()
{
	// Make sure to call the base class
	CMenuBase::Build();	

//	m_pClientDE->CPrint("CMenuJoystick::Build called!"); // BLB TEMP
	
	CreateTitle("interface\\mainmenus\\options.pcx", IDS_MENU_TITLE_OPTIONS, m_pMainMenus->GetTitlePos());		
	SetOptionPos(m_pMainMenus->GetOptionsPos());
	SetItemSpacing(5);
	SetScrollWrap(DFALSE);	
	UseArrows(DTRUE, 300);

	m_bUseJoystick=g_pBloodClientShell->IsUseJoystick();

	// check if the joystick has been disabled by the advanced menu console variables
	HCONSOLEVAR hVar = m_pClientDE->GetConsoleVar( "joystickdisable");
	if (hVar != NULL) 
	{
		if (m_pClientDE->GetVarValueFloat(hVar) == 1) 
		{
			m_bUseJoystick = DFALSE;
			g_pBloodClientShell->SetUseJoystick(FALSE);
		}
	}

	// read in the JOYSTICK.CFG file
	m_pClientDE->ReadConfigFile ("joystick.cfg");

	UpdateData(DFALSE);
	BuildAxisMenus();	

	// Update the enable/disable status of the controls
	UpdateEnable();
}

// Build the axis menus
void CMenuJoystick::BuildAxisMenus()
{
	// Add the menu options
	AddOnOffOption(IDS_MENU_JOYSTICK_USE, m_pMainMenus->GetSmallFont(), 100, &m_bUseJoystick);

	CLTGUITextItemCtrl *pTitleCtrl=DNULL;

	// Turn menu options
	pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_TURNLEFTRIGHTAXIS, 0, m_pMainMenus->GetSmallFont());
	pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
	if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);

	m_pAxisTurn->Build(m_pClientDE, this);	

	// Look menu options
	pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_LOOKUPDOWNAXIS, 0, m_pMainMenus->GetSmallFont());
	pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
	if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);

	m_pAxisLook->Build(m_pClientDE, this);

	// Move menu options
	pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_MOVEFORWARDBACKWARDAXIS, 0, m_pMainMenus->GetSmallFont());
	pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
	if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);

	m_pAxisMove->Build(m_pClientDE, this);

	// Strafe menu options
	pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_STRAFELEFTRIGHTAXIS, 0, m_pMainMenus->GetSmallFont());
	pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
	if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);

	m_pAxisStrafe->Build(m_pClientDE, this);

	m_pUsePovHat = AddOnOffOption(IDS_MENU_JOYSTICK_HATONOFF, m_pMainMenus->GetSmallFont(), 100, &m_bUsePovHat);
}

// Update the enable/disabled status of the controls
void CMenuJoystick::UpdateEnable()
{
	// Update the enable/disable status of the controls
	m_pAxisTurn->UpdateEnable(m_bUseJoystick);
	m_pAxisMove->UpdateEnable(m_bUseJoystick);
	m_pAxisLook->UpdateEnable(m_bUseJoystick);
	m_pAxisStrafe->UpdateEnable(m_bUseJoystick);
	m_pAxisStrafe->UpdateEnable(m_bUseJoystick);
	if (m_pUsePovHat != NULL) m_pUsePovHat->Enable(m_bUseJoystick);
}


// The left key was pressed
void CMenuJoystick::OnLeft()
{
	// Call the base class
	CMenuBase::OnLeft();

	UpdateData();

	// Update the enable/disable status of the controls
	UpdateEnable();
}

// The right key was pressed
void CMenuJoystick::OnRight()
{
	// Call the base class
	CMenuBase::OnRight();

	UpdateData();

	// Update the enable/disable status of the controls
	UpdateEnable();	
}

// Change in focus
void CMenuJoystick::OnFocus(DBOOL bFocus)
{
	if (bFocus)
	{
		// get the hat variable 
		HCONSOLEVAR hVar = m_pClientDE->GetConsoleVar( "UsePovHat");
		if (hVar != NULL) 
		{
			if (m_pClientDE->GetVarValueFloat(hVar) == 1) m_bUsePovHat = DTRUE;
			else m_bUsePovHat = DFALSE;
		}

		// Load the menu options from the console	
		m_pAxisTurn->LoadFromConsole(m_pClientDE);
		m_pAxisMove->LoadFromConsole(m_pClientDE);
		m_pAxisLook->LoadFromConsole(m_pClientDE);
		m_pAxisStrafe->LoadFromConsole(m_pClientDE);		

		UpdateData(DFALSE);

		// Update the enable/disable status of the controls
		UpdateEnable();	
	}
	else		
	{
		char strConsole[512];

		UpdateData();

		// Save the menu options to the console
		m_pAxisTurn->SaveToConsole(m_pClientDE);
		m_pAxisMove->SaveToConsole(m_pClientDE);
		m_pAxisLook->SaveToConsole(m_pClientDE);
		m_pAxisStrafe->SaveToConsole(m_pClientDE);

		// get the name of the joystic device
		char* sDeviceName = m_pAxisTurn->GetDeviceName();

		// save the POV console variable
		{
			int nVal;
			if (m_bUsePovHat) nVal = 1;
			else nVal = 0;
			sprintf(strConsole, "+UsePovHat %f", (float)nVal);
			m_pClientDE->RunConsoleString(strConsole);
		}

		// write out the POV binding
		if (sDeviceName != NULL)
		{
			if (m_bUsePovHat)
			{
				sprintf(strConsole, "rangebind \"%s\" \"##POV 0\" 0.0 1000.0 \"LookUp\"  35000.0 36000.0 \"LookUp\" 8000.0 10000.0 \"NextWeapon\" 17000.0 19000.0 \"LookDown\" 26000 28000 \"PrevWeapon\"", sDeviceName);
				m_pClientDE->RunConsoleString(strConsole);
			}
			else
			{
				sprintf(strConsole, "rangebind \"%s\" \"##POV 0\" 0 0", sDeviceName);
				m_pClientDE->RunConsoleString(strConsole);
			}
		}

		g_pBloodClientShell->SetUseJoystick(m_bUseJoystick);
/* this code is no longer needed
		if (m_bUseJoystick)
		{
			char strJoystick[128];
			memset (strJoystick, 0, 128);
			DRESULT result = m_pClientDE->GetDeviceName (DEVICETYPE_JOYSTICK, strJoystick, 127);
			if (result == LT_OK) 
			{
				char strConsole[256];
				sprintf (strConsole, "EnableDevice \"%s\"", strJoystick);
				m_pClientDE->RunConsoleString (strConsole);
			}
			else
			{
				g_pBloodClientShell->SetUseJoystick(FALSE);
			}
		}	
*/
	}
}

⌨️ 快捷键说明

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