void KMovableObject::ProcessMove()
{
    if (m_eMoveType == mosFree)
    {
        MoveXY(m_nVelocityX, m_nVelocityY);

        MoveZ(m_nVelocityZ);
        AfterProcessMoveZ();

        CheckCollisionObj();

        ProcessRebounds();
        assert(!m_bXYRebound && !m_bXZRebound && !m_bYZRebound);
    }
}
示例#2
0
void	vrObject::Move( )
{
/*
if ( v_speed.x > v_maxspeed.x ) v_speed.x = v_maxspeed.x;
if ( v_speed.y > v_maxspeed.y ) v_speed.y = v_maxspeed.y;
if ( v_speed.z > v_maxspeed.z ) v_speed.z = v_maxspeed.z;
*/

//v_speed.x = ( v_speed.x > v_maxspeed.x ) ? v_maxspeed.x : v_speed.x;
if ( v_speed.x !=0 ) MoveX( );
if ( v_speed.y !=0 ) MoveY( );
if ( v_speed.z !=0 ) MoveZ( ); 


}
void KMovableObject::OnTrackMove(int nCurLoop)
{   
    BOOL        bMoveFinished   = false;
    KPOSITION   cCur = GetPosition();
    KPOSITION   cDst;

    assert(m_pPath);
    assert(m_eMoveType == mosTrackMove);
    
    KGLOG_PROCESS_ERROR(nCurLoop >= m_pPath->GetStartFrame());

    cDst = m_pPath->GetPosAtFrame(nCurLoop);

    m_pPath->GetVelocity(nCurLoop, m_nVelocityX, m_nVelocityY, m_nVelocityZ);
   
    MoveXY(cDst.nX - cCur.nX, cDst.nY - cCur.nY);
    MoveZ(cDst.nZ - cCur.nZ);

    if (m_bXZRebound || m_bYZRebound || m_bXYRebound)
    {
        ProcessRebounds();
        TurnToMoveType(mosFree);
        goto Exit0;
    }

    CheckCollisionObj();

    bMoveFinished = m_pPath->IsFinished(nCurLoop);
    if (bMoveFinished)
    {
        m_eTrackMoveState = tmsFinished;
        TurnToMoveType(mosFree);
    }

Exit0:
    return;
}