void AKIMCharacter::MoveForward(float Value) { if (Value < -0.09f || Value > 0.09f) { if (IsInRoationState) { RotateUp(Value * 10); return; } if (PickedUpItem) { if (Value < -0.08f) { Value += FMath::Clamp((((AKIMInteractionActor*)PickedUpItem)->Weight / 100), 0.f, abs(Value)); } else if (Value > 0.08f) { Value -= FMath::Clamp((((AKIMInteractionActor*)PickedUpItem)->Weight / 100), 0.f, abs(Value)); } else return; } //Value *= MovementSpeed; //MovedForward(1 + 0.1*MovementSpeed); // find out which way is forward const FRotator Rotation = Controller->GetControlRotation(); const FRotator YawRotation(0, Rotation.Yaw, 0); // get forward vector const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); AddMovementInput(Direction, Value); } }
int64_t HeapTimer::RegisterTimer(const TimeValue& interval, const TimeValue& delay, CallbackObject* cb_obj, void* data) { if (interval.Sec() == 0 && interval.Usec() == 0) return -1; if (cur_size_ >= heap_size_) return -1; TimerNode* new_node = new TimerNode; if (new_node == NULL) return -1; new_node->cb_obj = cb_obj; new_node->data = data; new_node->timer_id = PopFreeTimerId(); new_node->interval_time = interval; new_node->expire_time = ExpireTime(TimeValue(time(NULL)), delay); if (cur_size_ + 2 >= heap_size_) GrowHeap(); RotateUp(new_node, cur_size_, GetParentPos(cur_size_)); cur_size_++; LOG(INFO) << "RegisterTimer TimerSize[" << GetTimerSize() << "] TimerId[" << new_node->timer_id <<"]"; return new_node->timer_id; }
void makeBalance(AVLNode* cur) { AVLNode* prev = NULL; while (cur != NULL) { fixHeight(cur); fixSize(cur); int leftHeight = getHeight(cur->left); int rightHeight = getHeight(cur->right); if (leftHeight - rightHeight == 2) { int leftLeftHeight = getHeight(cur->left->left); int leftRightHeight = getHeight(cur->left->right); if (leftLeftHeight >= leftRightHeight) { cur = cur->left; RotateUp(cur); } else { cur = cur->left->right; RotateUp(cur); RotateUp(cur); } } else if (rightHeight - leftHeight == 2) { int rightLeftHeight = getHeight(cur->right->left); int rightRightHeight = getHeight(cur->right->right); if (rightRightHeight >= rightLeftHeight) { cur = cur->right; RotateUp(cur); } else { cur = cur->right->left; RotateUp(cur); RotateUp(cur); } } prev = cur; cur = cur->parent; } root_ = prev; }
int CRoWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: ZoomIn(); break; case 1: ZoomOut(); break; case 2: RotateUp(); break; case 3: RotateDown(); break; default: ; } _id -= 4; } return _id; }
bool OGLObjsCamera::HandleKeystroke( const unsigned char in_c, const bool in_bShift, const bool in_bCntrl ) { switch ( in_c ) { case 'r' : if ( in_bShift == TRUE ) SpinClockwise( s_dDeltaRot ); else SpinCounterClockwise( s_dDeltaRot ); break; case 'x': if ( in_bShift == TRUE ) PosXAxis( ); else NegXAxis( ); break; case 'y': if ( in_bShift == TRUE ) PosYAxis( ); else NegYAxis( ); break; case 'z': if ( in_bShift == TRUE ) PosZAxis( ); else NegZAxis( ); break; case '1': RotateSelf(0, ((in_bShift == TRUE) ? -1.0 : 1.0) * s_dDeltaRot); break; case '2': RotateSelf(1, ((in_bShift == TRUE) ? -1.0 : 1.0) * s_dDeltaRot); break; case '3': RotateSelf(2, ((in_bShift == TRUE) ? -1.0 : 1.0) * s_dDeltaRot); break; case FL_Home: // up arrow Reset(); break; case 'h': // up arrow case FL_Page_Up : if ( in_bShift == TRUE ) { PanIn( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaTrans *= 2.0; } else { SpinClockwise( s_dDeltaRot ); } break; case 'l': // up arrow case FL_Page_Down : if ( in_bShift == TRUE ) { PanOut( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaTrans *= 2.0; } else { SpinCounterClockwise( s_dDeltaRot ); } break; case 'i': // up arrow case FL_Up : if ( in_bShift == TRUE ) { PanUp( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaTrans *= 2.0; } else { RotateUp( s_dDeltaRot ); } break; case 'm': // down arrow case FL_Down : if ( in_bShift == TRUE ) { PanDown( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaTrans *= 0.5; } else { RotateDown( s_dDeltaRot ); } break; case 'j': // left arrow case FL_Left : if ( in_bShift == TRUE ) { PanLeft( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaRot *= 0.5; } else { RotateLeft( s_dDeltaRot ); } break; case 'k': // right arrow case FL_Right : if ( in_bShift == TRUE ) { PanRight( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaRot *= 2.0; } else { RotateRight( s_dDeltaRot ); } break; case 'p' : // zoom if ( in_bShift == TRUE ) { PanIn( s_dDeltaTrans ); } else if ( in_bCntrl == TRUE ) { s_dDeltaZoom *= 1.1; } else { SetZoom( s_dDeltaZoom * GetZoom() ); } break; case 'n' : if ( in_bShift == TRUE ) { PanOut( s_dDeltaZoom ); } else if ( in_bCntrl == TRUE ) { s_dDeltaZoom *= 0.9; } else { SetZoom( GetZoom() / s_dDeltaZoom ); } break; default: //TRACE("Unknown char %d\n", Key); return FALSE; } return TRUE; }
void Cube::DoMethod(CubeRotateMethod method) { switch (method) { case ROTATE_NONE: case ROTATE_NONEi: break; case ROTATE_FRONT: F(); break; case ROTATE_BACK: B(); break; case ROTATE_LEFT: L(); break; case ROTATE_RIGHT: R(); break; case ROTATE_UP: U(); break; case ROTATE_DOWN: D(); break; case ROTATE_FRONTi: Fi(); break; case ROTATE_BACKi: Bi(); break; case ROTATE_LEFTi: Li(); break; case ROTATE_RIGHTi: Ri(); break; case ROTATE_UPi: Ui(); break; case ROTATE_DOWNi: Di(); break; case ROTATE_WHOLEX: RotateUp(); break; case ROTATE_WHOLEY: RotateLeft(); break; case ROTATE_WHOLEZ: RotateClockwise(); break; case ROTATE_WHOLEXi: RotateDown(); break; case ROTATE_WHOLEYi: RotateRight(); break; case ROTATE_WHOLEZi: RotateCounterClockwise(); break; default: break; } }
void CameraController::Update() { if ( m_ZoomDirection == ZOOM_DIRECTION_NONE ) { return; } float targetY = 0; float targetViewY = 0; switch ( m_ZoomStatus ) { case ZOOM_STATUS_NEAREST: targetY = NEAREST_Y; targetViewY = NEAREST_VIEW_Y; break; case ZOOM_STATUS_DEGREE_1: targetY = DEGREE_1_Y; targetViewY = DEGREE_1_VIEW_Y; break; case ZOOM_STATUS_DEGREE_2: targetY = DEGREE_2_Y; targetViewY = DEGREE_2_VIEW_Y; break; case ZOOM_STATUS_DEGREE_3: targetY = DEGREE_3_Y; targetViewY = DEGREE_3_VIEW_Y; break; case ZOOM_STATUS_FARTHEST: default: targetY = FARTHEST_Y; targetViewY = FARTHEST_VIEW_Y; break; } float time = static_cast<float>( Timer::GetInstance()->GetElapsedTime() ) / 1000; float delta = time * 10.0f; D3DXVECTOR3 view = m_LookAtPoint - m_EyePoint; D3DXVec3Normalize( &view, &view ); float dotView = D3DXVec3Dot( &view, &( -m_UpVector ) ); // Log( "%-8f도!!! %-8f \n", dotView, targetViewY ); // Log( "목표 = %f, 현위치 = %f \n", targetY, m_EyePoint.y ); // 카메라 업 if ( m_ZoomDirection == ZOOM_DIRECTION_BACK ) { if ( dotView < targetViewY ) { RotateUp( delta * dotView / ( m_EyePoint.y / 10 ) ); } MoveElevate( delta * 10 ); MoveForward( -delta * 10, true ); if ( targetY < m_EyePoint.y ) { m_ZoomDirection = ZOOM_DIRECTION_NONE; return; } } // 카메라 다운 else if ( m_ZoomDirection == ZOOM_DIRECTION_FOWARD ) { if ( dotView > targetViewY ) { RotateUp( -delta * dotView / ( m_EyePoint.y / 10 ) ); } MoveElevate( -delta * 10 ); MoveForward( delta * 10, true ); if ( targetY > m_EyePoint.y ) { m_ZoomDirection = ZOOM_DIRECTION_NONE; return; } } if ( m_ZoomPointX > 0 ) { m_ZoomPointX = __min( m_ZoomPointX, 50 ); m_ZoomPointX -= delta; MoveSide( delta ); } else if ( m_ZoomPointX < 0 ) { m_ZoomPointX = __max( m_ZoomPointX, -50 ); m_ZoomPointX += delta; MoveSide( -delta ); } if ( m_ZoomPointY > 0 ) { m_ZoomPointY = __min( m_ZoomPointY, 50 ); m_ZoomPointY -= delta; MoveForward( -delta ); } else if ( m_ZoomPointY < 0 ) { m_ZoomPointY = __max( m_ZoomPointY, -50 ); m_ZoomPointY += delta; MoveForward( delta ); } }