Пример #1
0
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);
	}
}
Пример #2
0
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;
}
Пример #3
0
	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;
	}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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 );
	}
}