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

📄 chvrmltransition.cpp

📁 Windows上的MUD客户端程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	AddCell(s_moveRight, 	er_alt,		s_right,		ChVrmlWalkSTM,	DefaultHandler);
	// --			
	AddCell(s_start,	ep_lookUp,		s_lookUp, 	ChVrmlWalkSTM,	LookUpStart);
	AddCell(s_lookUp, 	er_lookUp,		s_start,	ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_alt,		ep_lookUpAlt,	s_lookUp, 	ChVrmlWalkSTM,	LookUpStart);
	AddCell(s_lookUp, 	er_lookUpAlt,	s_alt,		ChVrmlWalkSTM,	DefaultHandler);
	//AddCell(s_lookUp, 	er_alt,			s_lookUp,	ChVrmlWalkSTM,	DefaultHandler); //nada
	AddCell(s_lookUp, 	e_tick,			s_lookUp,	ChVrmlWalkSTM,	LookUp);
	// --			
	AddCell(s_start,	ep_lookDown,	s_lookDown, ChVrmlWalkSTM,	LookDownStart);
	AddCell(s_lookDown, er_lookDown,	s_start,	ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_alt,		ep_lookDownAlt,	s_lookDown, ChVrmlWalkSTM,	LookDownStart);
	AddCell(s_lookDown, er_lookDownAlt,	s_alt,		ChVrmlWalkSTM,	DefaultHandler);
	//AddCell(s_lookDown, er_alt,			s_lookDown,	ChVrmlWalkSTM,	DefaultHandler); //nada
	AddCell(s_lookDown, e_tick,			s_lookDown,	ChVrmlWalkSTM,	LookDown);
	//
	// -- Mouse stuff
	//			
	AddCell(s_start,	ep_lbutton,		s_lbuttondown, 		ChVrmlWalkSTM,	WalkStart);
	AddCell(s_lbuttondown, 		er_lbutton,		s_start,	ChVrmlWalkSTM,	LeftClick);
	AddCell(s_lbuttondown, 		e_tick,		s_lbuttondrag,		ChVrmlWalkSTM,	TickWalk);
	AddCell(s_lbuttondown, 		e_move,		s_lbuttondrag,		ChVrmlWalkSTM,	DragWalk);
	AddCell(s_lbuttondown, 		ep_alt,		s_lbuttondownMove,	ChVrmlWalkSTM,	DefaultHandler);

	AddCell(s_alt,	ep_lbutton,		s_lbuttondownMove, 		ChVrmlWalkSTM,	CrabbishStart);
	AddCell(s_lbuttondownMove, 		er_lbutton,		s_alt,	ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_lbuttondownMove, 		e_tick,		s_lbuttondragMove,		ChVrmlWalkSTM,	TickCrabbishly);
	AddCell(s_lbuttondownMove, 		e_move,		s_lbuttondragMove,		ChVrmlWalkSTM,	DragCrabbishly);
	AddCell(s_lbuttondownMove, 		er_alt,		s_lbuttondown,	ChVrmlWalkSTM,	DefaultHandler);

	AddCell(s_lbuttondrag, 		er_lbutton,		s_start,	ChVrmlWalkSTM,	LeftClickSlow);
	AddCell(s_lbuttondrag, 		e_tick,		s_lbuttondrag,		ChVrmlWalkSTM,	TickWalk);
	AddCell(s_lbuttondrag, 		e_move,		s_lbuttondrag,		ChVrmlWalkSTM,	DragWalk);
	AddCell(s_lbuttondrag, 		ep_alt,		s_lbuttondragMove,	ChVrmlWalkSTM,	DefaultHandler);

	AddCell(s_lbuttondragMove, 		er_lbutton,		s_alt,	ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_lbuttondragMove, 		e_tick,		s_lbuttondragMove,		ChVrmlWalkSTM,	TickCrabbishly);
	AddCell(s_lbuttondragMove, 		e_move,		s_lbuttondragMove,		ChVrmlWalkSTM,	DragCrabbishly);
	AddCell(s_lbuttondragMove, 		er_alt,		s_lbuttondrag,	ChVrmlWalkSTM,	DefaultHandler);

//
	AddCell(s_start,	ep_rbutton,		s_rbuttondown, 		ChVrmlWalkSTM,	ExamineStart);
	AddCell(s_rbuttondown, 		er_rbutton,		s_start,	ChVrmlWalkSTM,	RightClick);
	AddCell(s_rbuttondown, 		e_tick,		s_rbuttondrag,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondown, 		e_move,		s_rbuttondrag,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondown, 		ep_alt,		s_rbuttondownMove,	ChVrmlWalkSTM,	DefaultHandler);

	AddCell(s_alt,	ep_rbutton,		s_rbuttondownMove, 		ChVrmlWalkSTM,	ExamineStart);
	AddCell(s_rbuttondownMove, 		er_rbutton,		s_alt,	ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_rbuttondownMove, 		e_tick,		s_rbuttondragMove,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondownMove, 		e_move,		s_rbuttondragMove,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondownMove, 		er_alt,		s_rbuttondown,	ChVrmlWalkSTM,	DefaultHandler);

	AddCell(s_rbuttondrag, 		er_rbutton,		s_start,	ChVrmlWalkSTM,	RightClickSlow);
	AddCell(s_rbuttondrag, 		e_tick,		s_rbuttondrag,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondrag, 		e_move,		s_rbuttondrag,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondrag, 		ep_alt,		s_rbuttondragMove,	ChVrmlWalkSTM,	DefaultHandler);

	AddCell(s_rbuttondragMove, 		er_rbutton,		s_alt,	ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_rbuttondragMove, 		e_tick,		s_rbuttondragMove,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondragMove, 		e_move,		s_rbuttondragMove,		ChVrmlWalkSTM,	Examine);
	AddCell(s_rbuttondragMove, 		er_alt,		s_rbuttondrag,	ChVrmlWalkSTM,	DefaultHandler);

	// We only get in or out of these states via goto's in actions
	AddCell(s_goTowardsBegin, 	e_tick,		s_goTowards,	ChVrmlWalkSTM,	GoTowardsStart);
	AddCell(s_goTowards, 		e_tick,		s_goTowards,	ChVrmlWalkSTM,	GoTowards);
	// We only get into these states via goto's in actions; we get out by events
	AddCell(s_spinningBegin, 	e_tick,		s_spinning,	ChVrmlWalkSTM,	SpinStart);
	AddCell(s_spinning, 		e_tick,		s_spinning,	ChVrmlWalkSTM,	Spin);

	AddCell(s_spinningBegin,	ep_alt,		s_alt, 		ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_spinningBegin,	ep_up,		s_up, 		ChVrmlWalkSTM,	MoveForwardStart);
	AddCell(s_spinningBegin,	ep_down,	s_down, 	ChVrmlWalkSTM,	MoveReverseStart);
	AddCell(s_spinningBegin,	ep_left,	s_left,		ChVrmlWalkSTM,	TurnLeftStart);
	AddCell(s_spinningBegin,	ep_right,	s_right, 		ChVrmlWalkSTM,	TurnRightStart);
	AddCell(s_spinningBegin,	ep_lookUp,		s_lookUp, 	ChVrmlWalkSTM,	LookUpStart);
	AddCell(s_spinningBegin,	ep_lookDown,	s_lookDown, ChVrmlWalkSTM,	LookDownStart);
	AddCell(s_spinningBegin,	ep_lbutton,		s_lbuttondown, 		ChVrmlWalkSTM,	WalkStart);
	AddCell(s_spinningBegin,	ep_rbutton,		s_rbuttondown, 		ChVrmlWalkSTM,	ExamineStart);

	AddCell(s_spinning,	ep_alt,		s_alt, 		ChVrmlWalkSTM,	DefaultHandler);
	AddCell(s_spinning,	ep_up,		s_up, 		ChVrmlWalkSTM,	MoveForwardStart);
	AddCell(s_spinning,	ep_down,	s_down, 	ChVrmlWalkSTM,	MoveReverseStart);
	AddCell(s_spinning,	ep_left,	s_left,		ChVrmlWalkSTM,	TurnLeftStart);
	AddCell(s_spinning,	ep_right,	s_right, 		ChVrmlWalkSTM,	TurnRightStart);
	AddCell(s_spinning,	ep_lookUp,		s_lookUp, 	ChVrmlWalkSTM,	LookUpStart);
	AddCell(s_spinning,	ep_lookDown,	s_lookDown, ChVrmlWalkSTM,	LookDownStart);
	AddCell(s_spinning,	ep_lbutton,		s_lbuttondown, 		ChVrmlWalkSTM,	WalkStart);
	AddCell(s_spinning,	ep_rbutton,		s_rbuttondown, 		ChVrmlWalkSTM,	ExamineStart);
}

bool ChVrmlWalkSTM::TranslateKeyEvent(int keyMsg, int key, chuint32 modifiers, int &event, chuint32 *&pData)
{
	chflag32		flMods = 0;

	if (GetKeyState( VK_MENU ) & 0x8000)
	{
		flMods |= ACTION_MOD_ALT;
	}

	if (keyMsg == WM_KEYUP || keyMsg == WM_SYSKEYUP)
	{
		flMods |= ACTION_MOD_KEY_UP;
	}
	
	if (GetKeyState( VK_SHIFT ) & 0x8000)
	{
		flMods |= ACTION_MOD_SHIFT;
		m_keyFlags &= ~kd_shift;
	}

	if (GetKeyState( VK_CONTROL ) & 0x8000)
	{
		flMods |= ACTION_MOD_CONTROL;
		m_keyFlags &= ~kd_ctl;
	}

	bool boolFound = true;
	if(flMods & ACTION_MOD_KEY_UP)
	{
		switch(key)
		{
			case VK_UP:
			{
				event = er_up;
				m_keyFlags &= ~kd_up;
				break;
			}
			case VK_DOWN:
			{
				event = er_down;
				m_keyFlags &= ~kd_down;
				break;
			}
			case VK_LEFT:
			{
				event = er_left;
				m_keyFlags &= ~kd_left;
				break;
			}
			case VK_RIGHT:
			{
				event = er_right;
				m_keyFlags &= ~kd_right;
				break;
			}
			case 'A':
			{
				if(flMods & ACTION_MOD_ALT)
				{
					event = er_lookUpAlt;
				}
				else
				{
					event = er_lookUp;
				}
				m_keyFlags &= ~kd_lookUp;
				break;
			}
			case 'Z':
			{
				if(flMods & ACTION_MOD_ALT)
				{
					event = er_lookDownAlt;
				}
				else
				{
					event = er_lookDown;
				}
				m_keyFlags &= ~kd_lookDown;
				break;
			}
			case VK_MENU:
			{
				event = er_alt;
				m_keyFlags &= ~kd_alt;
				break;
			}
			default:
			{
				boolFound = false;
			}
		}
	}
	else
	{
		switch(key)
		{
			case VK_UP:
			{
				event = ep_up;
				m_keyFlags |= kd_up;
				break;
			}
			case VK_DOWN:
			{
				event = ep_down;
				m_keyFlags |= kd_down;
				break;
			}
			case VK_LEFT:
			{
				event = ep_left;
				m_keyFlags |= kd_left;
				break;
			}
			case VK_RIGHT:
			{
				event = ep_right;
				m_keyFlags |= kd_right;
				break;
			}
			case 'A':
			{
				if(flMods & ACTION_MOD_ALT)
				{
					event = ep_lookUpAlt;
				}
				else
				{
					event = ep_lookUp;
				}
				m_keyFlags |= kd_lookUp;
				break;
			}
			case 'Z':
			{
				if(flMods & ACTION_MOD_ALT)
				{
					event = ep_lookDownAlt;
				}
				else
				{
					event = ep_lookDown;
				}
				m_keyFlags |= kd_lookDown;
				break;
			}
			case VK_MENU:
			{
				event = ep_alt;
				m_keyFlags |= kd_alt;
				break;
			}
			default:
			{
				boolFound = false;
			}
		}
	}

	if (boolFound)
	{

		m_flags = flMods;
		return true;
	}

	return false;
};

// Handlers
bool ChVrmlWalkSTM::MoveForwardStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();	
	MoveForward( );
	return true;
};	   

bool ChVrmlWalkSTM::MoveReverseStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	MoveReverse( );
	return true;
};	   

bool ChVrmlWalkSTM::MoveUpStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	MoveUp( );
	return true;
};	   

bool ChVrmlWalkSTM::MoveDownStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	MoveDown( );
	return true;
};	   

bool ChVrmlWalkSTM::TurnLeftStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	TurnLeft( );
	return true;
};	   

bool ChVrmlWalkSTM::MoveLeftStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	MoveLeft( );
	return true;
};	   

bool ChVrmlWalkSTM::TurnRightStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	TurnRight( );
	return true;
};	   

bool ChVrmlWalkSTM::MoveRightStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	MoveRight( );
	return true;
};	   

bool ChVrmlWalkSTM::LookUpStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	LookUp( );
	return true;
};	   

bool ChVrmlWalkSTM::LookDownStart()
{
	RecordTime();
	m_pWnd->GetCameraControl()->HeadsUp();
	LookDown( );
	return true;
};	   

bool ChVrmlWalkSTM::MoveForward()
{
	m_pWnd->GetCameraControl()->HeadsUp();	// Ought to break all these out into "start" methods
											// for efficiency's sake.
	m_pWnd->GetCameraControl()->WalkForward( GetMoveAmountDistance() );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::MoveReverse()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->WalkBackward( GetMoveAmountDistance() );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::MoveUp()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->Shift( 0., GetMoveAmountDistance(), 0. );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::MoveDown()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->Shift( 0., -GetMoveAmountDistance(), 0. );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::TurnLeft()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->Turn( GetMoveAmountAngle() );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::MoveLeft()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->MoveLeft( GetMoveAmountDistance() );
	return true;
};	   

bool ChVrmlWalkSTM::TurnRight()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->Turn( -(GetMoveAmountAngle()) );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::MoveRight()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->MoveRight( GetMoveAmountDistance() );
	return true;
};	   

bool ChVrmlWalkSTM::LookUp()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->Pitch( (GetMoveAmountAngle()) );
	RecordTime();
	return true;
};	   

bool ChVrmlWalkSTM::LookDown()
{
	m_pWnd->GetCameraControl()->HeadsUp();
	m_pWnd->GetCameraControl()->Pitch( -(GetMoveAmountAngle()) );
	RecordTime();
	return true;
};	   


bool ChVrmlWalkSTM::WalkStart()
{
	RecordTime();
	RecordPressTime();
	m_iAnchorX = m_ix;
	m_iAnchorY = m_iy;

	m_pWnd->GetCameraControl()->HeadsUp();
	return true;
};	   

bool ChVrmlWalkSTM::CrabbishStart()
{
	RecordTime();
	RecordPressTime();
	m_iAnchorX = m_ix;
	m_iAnchorY = m_iy;

	m_pWnd->GetCameraControl()->HeadsUp();
	return true;
};	   

const float HACK_HACK = 10.;
const float HACK_HACK_ANGLE = 40.;

bool ChVrmlWalkSTM::DragWalk()
{
		
	return true;
};	   

bool ChVrmlWalkSTM::DragCrabbishly()
{
	return true;
};	   


bool ChVrmlWalkSTM::TickWalk()
{
	float		fMoveX, fMoveY;

	fMoveX = GetMoveAmountAngle(m_iAnchorX - m_ix);
	//fMoveX /= HACK_HACK_ANGLE;

	fMoveY = m_iAnchorY - m_iy;
	fMoveY /= HACK_HACK;

	m_pWnd->GetCameraControl()->WalkForward( m_pWnd->CalcAccel( fMoveY ), false );
	m_pWnd->GetCameraControl()->Turn( fMoveX );
	RecordTime();

	return true;
};	   

bool ChVrmlWalkSTM::TickCrabbishly()
{
	float		fMoveX, fMoveY;

	fMoveX = m_iAnchorX - m_ix;
	fMoveX /= HACK_HACK;

	fMoveY = m_iAnchorY - m_iy;
	fMoveY /= HACK_HACK;

	m_pWnd->GetCameraControl()->Shift( 0., m_pWnd->CalcAccel( fMoveY ), 0., false );  // absolutely up
	m_pWnd->GetCameraControl()->MoveLeft(  m_pWnd->CalcAccel( fMoveX ) );
	RecordTime();

	return true;
};	   


bool ChVrmlWalkSTM::LeftClick()
{
	if(GetKeyState( VK_CONTROL ) & 0x8000)
	{
#if !defined(CH_USE_3DR)
		SetState(s_goTowardsBegin);
#endif

⌨️ 快捷键说明

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