void CAnimCamera::OnEvent(InputEvent & event) { COperator *pOperator = NULL; pOperator = CMapEditApp::GetInst()->GetOperator(); if ( pOperator == NULL || !m_bActive ) { return; } CVector3f vecVector; CVector3f hitpoint = pOperator->GetHitPoint(); switch ( event.eType ) { case EIET_KB_KEYDOWN : { // handle keyboard if ( m_bMovable ) { // left if ( event.dwData == DIK_A ) { vecVector = -m_pCamEx->getRIGHT(); vecVector.y = 0; vecVector.normalize(); vecVector *= MOVE_SPEED_RATIO; MoveRTS(vecVector) ; hitpoint.x += vecVector.x; hitpoint.z += vecVector.z; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; } // right if ( event.dwData == DIK_D ) { vecVector = m_pCamEx->getRIGHT(); vecVector.y = 0; vecVector.normalize(); vecVector *= MOVE_SPEED_RATIO; MoveRTS(vecVector) ; hitpoint.x += vecVector.x; hitpoint.z += vecVector.z; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; } // up if ( event.dwData == DIK_W ) { vecVector = m_pCamEx->getDIRECTION(); vecVector.y = 0; vecVector.normalize(); vecVector *= MOVE_SPEED_RATIO; MoveRTS(vecVector); hitpoint.x += vecVector.x; hitpoint.z += vecVector.z; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; } // down if ( event.dwData == DIK_S ) { vecVector = -m_pCamEx->getDIRECTION(); vecVector.y = 0; vecVector.normalize(); vecVector *= MOVE_SPEED_RATIO; MoveRTS(vecVector); hitpoint.x += vecVector.x; hitpoint.z += vecVector.z; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; } // up another type if ( event.dwData == DIK_Q ) { vecVector = m_pCamEx->getDIRECTION(); vecVector *= MOVE_SPEED_RATIO; MoveRTS(vecVector); hitpoint.x += m_pCamEx->getDIRECTION().x; hitpoint.y += m_pCamEx->getDIRECTION().y; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; CMapEditApp::GetInst()->GetOperator()->SetGPushed(false); } // down another type if ( event.dwData == DIK_E ) { vecVector = -m_pCamEx->getDIRECTION(); vecVector *= MOVE_SPEED_RATIO; MoveRTS(vecVector); hitpoint.x -= m_pCamEx->getDIRECTION().x; hitpoint.y -= m_pCamEx->getDIRECTION().y; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; CMapEditApp::GetInst()->GetOperator()->SetGPushed(false); } } } break; case EIET_MS_WHEEL : { vecVector = -m_pCamEx->getDIRECTION(); vecVector.normalize(); vecVector *= -event.fData*ZOOM_SPEED_RATIO; Zoom(vecVector); hitpoint.x += vecVector.x; hitpoint.z += vecVector.z; pOperator->SetHitPoint(hitpoint); m_bResetVS = true; } break; case EIET_MS_MOVE : { if ( CInputDevice::GetInst()->GetButtonState(MK_RBUTTON) ) // right button down rotate { if( pOperator->GetEditState() == COperator::EES_SET_TILE_BLOCK ) return; if ( m_bRotate ) { int x,y; CInputDevice::GetInst()->GetMouseDelta(x,y); float pitch = 0.004f * y; float yaw = 0.004f * x; // ÈÆ×ÔÉíÐýת Rotate(yaw, pitch); m_bResetVS = true; CMapEditApp::GetInst()->GetOperator()->SetGPushed(false); } } if ( CInputDevice::GetInst()->GetButtonState(MK_MBUTTON) ) { int x,y; CInputDevice::GetInst()->GetMouseDelta(x,y); vecVector = -m_pCamEx->getDIRECTION(); vecVector *= y*ZOOM_SPEED_RATIO; Zoom(vecVector); m_bResetVS = true; CMapEditApp::GetInst()->GetOperator()->SetGPushed(false); } } break; default: break; } if ( m_bResetVS ) { CMapEditApp::GetInst()->GetOperator()->UpdateParamsView(); } }