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