当前位置: 首页>>代码示例>>C++>>正文


C++ EHANDLE::EntityToWorldTransform方法代码示例

本文整理汇总了C++中EHANDLE::EntityToWorldTransform方法的典型用法代码示例。如果您正苦于以下问题:C++ EHANDLE::EntityToWorldTransform方法的具体用法?C++ EHANDLE::EntityToWorldTransform怎么用?C++ EHANDLE::EntityToWorldTransform使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在EHANDLE的用法示例。


在下文中一共展示了EHANDLE::EntityToWorldTransform方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: MeasureThink

//-----------------------------------------------------------------------------
// Apply movement
//-----------------------------------------------------------------------------
void CLogicMeasureMovement::MeasureThink( )
{
    // FIXME: This is a hack to make measuring !player simpler. The player isn't
    // created at Activate time, so m_hMeasureTarget may be NULL because of that.
    if ( !m_hMeasureTarget.Get() && !Q_strnicmp( STRING(m_strMeasureTarget), "!player", 8 ) )
    {
        SetMeasureTarget( STRING(m_strMeasureTarget) );
    }

    // Make sure all entities are valid
    if ( m_hMeasureTarget.Get() && m_hMeasureReference.Get() && m_hTarget.Get() && m_hTargetReference.Get() )
    {
        matrix3x4_t matRefToMeasure, matWorldToMeasure;
        switch( m_nMeasureType )
        {
        case MEASURE_POSITION:
            MatrixInvert( m_hMeasureTarget->EntityToWorldTransform(), matWorldToMeasure );
            break;

        case MEASURE_EYE_POSITION:
            AngleIMatrix( m_hMeasureTarget->EyeAngles(), m_hMeasureTarget->EyePosition(), matWorldToMeasure );
            break;

            // FIXME: Could add attachment point measurement here easily
        }

        ConcatTransforms( matWorldToMeasure, m_hMeasureReference->EntityToWorldTransform(), matRefToMeasure );

        // Apply the scale factor
        if ( ( m_flScale != 0.0f ) && ( m_flScale != 1.0f ) )
        {
            Vector vecTranslation;
            MatrixGetColumn( matRefToMeasure, 3, vecTranslation );
            vecTranslation /= m_flScale;
            MatrixSetColumn( vecTranslation, 3, matRefToMeasure );
        }

        // Now apply the new matrix to the new reference point
        matrix3x4_t matMeasureToRef, matNewTargetToWorld;
        MatrixInvert( matRefToMeasure, matMeasureToRef );

        ConcatTransforms( m_hTargetReference->EntityToWorldTransform(), matMeasureToRef, matNewTargetToWorld );

        Vector vecNewOrigin;
        QAngle vecNewAngles;
        MatrixAngles( matNewTargetToWorld, vecNewAngles, vecNewOrigin );
        m_hTarget->SetAbsOrigin( vecNewOrigin );
        m_hTarget->SetAbsAngles( vecNewAngles );
    }

    SetNextThink( gpGlobals->curtime + TICK_INTERVAL );
}
开发者ID:BenLubar,项目名称:SwarmDirector2,代码行数:55,代码来源:logic_measure_movement.cpp

示例2: Think

void CLogicMirrorMovement::Think()
{
    // Attempt to get the player's handle because it didn't exist at Activate time
    if ( !m_hMirrorTarget.Get() )
    {
        // If we will never find a target, we don't have a use... shutdown
        if ( m_strMirrorTarget == NULL_STRING )
            SetNextThink ( NULL );

        //BUGBUG: If m_strSetMirrorTarget doesn't exist in ent list, we get per-think searches with no results ever...
        SetMirrorTarget ( STRING(m_strMirrorTarget) );
    }

    // Make sure all entities are valid
    if ( m_hMirrorTarget.Get() && m_hMovementTarget.Get() && m_hRemoteTarget.Get() && m_hMirrorRelative.Get() )
    {
        // Get our two portal's world transforms transforms
        VMatrix matPortal1ToWorldInv, matPortal2ToWorld;
        MatrixInverseGeneral( m_hMirrorRelative->EntityToWorldTransform(), matPortal1ToWorldInv );
        matPortal2ToWorld = m_hRemoteTarget->EntityToWorldTransform();

        VMatrix matTransformToRemotePortal = matPortal1ToWorldInv * matPortal2ToWorld;

        // Get our scene camera's current orientation
        Vector ptCameraPosition, vCameraLook, vCameraRight, vCameraUp;
        ptCameraPosition		= m_hMirrorTarget->EyePosition();
        m_hMirrorTarget->GetVectors ( &vCameraLook, &vCameraRight, &vCameraUp );

        // map this position and orientation to the remote portal, mirrored (invert the result)
        Vector ptNewPosition, vNewLook;
        ptNewPosition	= matPortal1ToWorldInv * ptCameraPosition;
        ptNewPosition	= matPortal2ToWorld*( Vector( -ptNewPosition.x, -ptNewPosition.y, ptNewPosition.z ) );

        vNewLook		= matPortal1ToWorldInv.ApplyRotation( vCameraLook );
        vNewLook		= matPortal2ToWorld.ApplyRotation( Vector( -vNewLook.x, -vNewLook.y, vNewLook.z) );

        // Set the point camera to the new location/orientation
        QAngle qNewAngles;
        VectorAngles( vNewLook, qNewAngles );
        m_hMovementTarget->Teleport( &ptNewPosition, &qNewAngles, NULL );
    }

    SetNextThink( gpGlobals->curtime + TICK_INTERVAL );
}
开发者ID:BenLubar,项目名称:SwarmDirector2,代码行数:44,代码来源:logic_mirror_movement.cpp


注:本文中的EHANDLE::EntityToWorldTransform方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。