本文整理汇总了C++中CEntityAlive::Visual方法的典型用法代码示例。如果您正苦于以下问题:C++ CEntityAlive::Visual方法的具体用法?C++ CEntityAlive::Visual怎么用?C++ CEntityAlive::Visual使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CEntityAlive
的用法示例。
在下文中一共展示了CEntityAlive::Visual方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: todo
void CInventoryItem::UpdateXForm ()
{
if (0==object().H_Parent()) return;
// Get access to entity and its visual
CEntityAlive* E = smart_cast<CEntityAlive*>(object().H_Parent());
if (!E) return;
if (E->cast_base_monster()) return;
const CInventoryOwner *parent = smart_cast<const CInventoryOwner*>(E);
if (parent && parent->use_simplified_visual())
return;
if (parent->attached(this))
return;
R_ASSERT (E);
IKinematics* V = smart_cast<IKinematics*> (E->Visual());
VERIFY (V);
// Get matrices
int boneL = -1, boneR = -1, boneR2 = -1;
E->g_WeaponBones(boneL,boneR,boneR2);
if (boneR == -1) return;
// if ((HandDependence() == hd1Hand) || (STATE == eReload) || (!E->g_Alive()))
// boneL = boneR2;
#pragma todo("TO ALL: serious performance problem")
V->CalculateBones ();
Fmatrix& mL = V->LL_GetTransform(u16(boneL));
Fmatrix& mR = V->LL_GetTransform(u16(boneR));
// Calculate
Fmatrix mRes;
Fvector R,D,N;
D.sub (mL.c,mR.c); D.normalize_safe();
if(fis_zero(D.magnitude()))
{
mRes.set(E->XFORM());
mRes.c.set(mR.c);
}
else
{
D.normalize();
R.crossproduct (mR.j,D);
N.crossproduct (D,R);
N.normalize();
mRes.set (R,N,D,mR.c);
mRes.mulA_43 (E->XFORM());
}
// UpdatePosition (mRes);
object().Position().set(mRes.c);
}
示例2: predicate
bool predicate( CEntityAlive& ea, const SHit& H, MotionID &m, float &angle ) const
{
if( H.initiator() != Level().CurrentControlEntity())
return false;
m = MotionID();
VERIFY( ea.Visual( ) );
IKinematics *K = ea.Visual()->dcast_PKinematics();
VERIFY( K );
if( !is_bone_head( *K, H.bone() ) )
return false;
if( is_snipper( H.weaponID ) )
{
edirection dr = dir( ea, H, angle );
m = motion( dr );
type_motion_diagnostic( " type_motion4: 5. —найперка в голову", dr, ea, H, m );
return true;
}
return false;
}
示例3: type_motion_diagnostic
void type_motion_diagnostic( LPCSTR message, type_motion::edirection dr, const CEntityAlive& ea, const SHit& H, const MotionID &m )
{
#ifdef DEBUG
if(! death_anim_debug )
return;
IKinematicsAnimated *KA = smart_cast<IKinematicsAnimated*>( ea.Visual() );
VERIFY( KA );
IKinematics *K = smart_cast<IKinematics*>( ea.Visual() );
LPCSTR bone_name = "not_definite";
if( H.bone() != BI_NONE )
{
CBoneData& bd = K->LL_GetData( H.bone() );
bone_name = bd.name.c_str();
}
LPCSTR motion_name = "not_set";
if( m.valid() )
motion_name = KA->LL_MotionDefName_dbg( m ).first;
Msg( "death anims: %s, dir: %s, motion: %s, obj: %s, model: %s, bone: %s " ,message ,motion_dirs[ dr ].name, motion_name, ea.cName().c_str(), ea.cNameVisual().c_str(), bone_name );
#endif
}
示例4: UpdateXForm
void CArtefact::UpdateXForm()
{
if (Device.dwFrame!=dwXF_Frame)
{
dwXF_Frame = Device.dwFrame;
if (0==H_Parent()) return;
// Get access to entity and its visual
CEntityAlive* E = smart_cast<CEntityAlive*>(H_Parent());
if(!E) return ;
const CInventoryOwner *parent = smart_cast<const CInventoryOwner*>(E);
if (parent && parent->use_simplified_visual())
return;
VERIFY (E);
IKinematics* V = smart_cast<IKinematics*> (E->Visual());
VERIFY (V);
if(CAttachableItem::enabled())
return;
// Get matrices
int boneL = -1, boneR = -1, boneR2 = -1;
E->g_WeaponBones (boneL,boneR,boneR2);
if (boneR == -1) return;
boneL = boneR2;
V->CalculateBones ();
Fmatrix& mL = V->LL_GetTransform(u16(boneL));
Fmatrix& mR = V->LL_GetTransform(u16(boneR));
// Calculate
Fmatrix mRes;
Fvector R,D,N;
D.sub (mL.c,mR.c); D.normalize_safe();
R.crossproduct (mR.j,D); R.normalize_safe();
N.crossproduct (D,R); N.normalize_safe();
mRes.set (R,N,D,mR.c);
mRes.mulA_43 (E->XFORM());
// UpdatePosition (mRes);
XFORM().mul (mRes,offset());
}
}
示例5:
void CWeapon::UpdateXForm ()
{
if (Device.dwFrame == dwXF_Frame)
return;
dwXF_Frame = Device.dwFrame;
if (!H_Parent())
return;
// Get access to entity and its visual
CEntityAlive* E = smart_cast<CEntityAlive*>(H_Parent());
if (!E) {
if (!IsGameTypeSingle())
UpdatePosition (H_Parent()->XFORM());
return;
}
const CInventoryOwner *parent = smart_cast<const CInventoryOwner*>(E);
if (parent && parent->use_simplified_visual())
return;
if (parent->attached(this))
return;
IKinematics* V = smart_cast<IKinematics*> (E->Visual());
VERIFY (V);
// Get matrices
int boneL = -1, boneR = -1, boneR2 = -1;
// this ugly case is possible in case of a CustomMonster, not a Stalker, nor an Actor
E->g_WeaponBones (boneL,boneR,boneR2);
if (boneR == -1) return;
if ((HandDependence() == hd1Hand) || (GetState() == eReload) || (!E->g_Alive()))
boneL = boneR2;
V->CalculateBones ();
Fmatrix& mL = V->LL_GetTransform(u16(boneL));
Fmatrix& mR = V->LL_GetTransform(u16(boneR));
// Calculate
Fmatrix mRes;
Fvector R,D,N;
D.sub (mL.c,mR.c);
if(fis_zero(D.magnitude())) {
mRes.set (E->XFORM());
mRes.c.set (mR.c);
}
else {
D.normalize ();
R.crossproduct (mR.j,D);
N.crossproduct (D,R);
N.normalize ();
mRes.set (R,N,D,mR.c);
mRes.mulA_43 (E->XFORM());
}
UpdatePosition (mRes);
}
示例6: PlayHitMotion
void character_hit_animation_controller::PlayHitMotion( const Fvector &dir, const Fvector &bone_pos, u16 bi, CEntityAlive &ea )const
{
IRenderVisual *pV = ea.Visual( );
IKinematicsAnimated* CA = smart_cast<IKinematicsAnimated*>( pV );
IKinematics* K = smart_cast<IKinematics*>( pV );
//play_cycle(CA,all_shift_down,1,block_times[6],1) ;
if( !( K->LL_BoneCount( ) > bi ) )
return;
Fvector dr = dir;
Fmatrix m;
GetBaseMatrix( m, ea );
#ifdef DEBUG
if( ph_dbg_draw_mask1.test( phDbgHitAnims ) )
{
DBG_OpenCashedDraw();
DBG_DrawLine( m.c, Fvector( ).sub( m.c, Fvector( ).mul( dir, 1.5 ) ), D3DCOLOR_XRGB( 255, 0, 255 ) );
DBG_ClosedCashedDraw( 1000 );
}
#endif
m.invert( );
m.transform_dir( dr );
//
Fvector hit_point;
K->LL_GetTransform( bi ).transform_tiny( hit_point, bone_pos );
ea.XFORM( ).transform_tiny( hit_point );
m.transform_tiny( hit_point );
Fvector torqu;
torqu.crossproduct( dr, hit_point );
hit_point.x = 0;
float rotational_ammount = hit_point.magnitude( ) * g_params.power_factor * g_params.rotational_power_factor;//_abs(torqu.x)
if( torqu.x < 0 )
play_cycle( CA, hit_downr, 3, block_blends[7], 1 ) ;
else
play_cycle( CA, hit_downl, 3, block_blends[6], 1 ) ;
if( !IsEffected( bi, *K ) )
return;
if( torqu.x<0 )
play_cycle( CA, turn_right, 2, block_blends[4], rotational_ammount ) ;
else
play_cycle( CA, turn_left, 2, block_blends[5], rotational_ammount ) ;
//CA->LL_SetChannelFactor(3,rotational_ammount);
dr.x = 0;
dr.normalize_safe();
dr.mul(g_params.power_factor);
if( dr.y > g_params.side_sensitivity_threshold )
play_cycle( CA, rthit_motion, 2, block_blends[0], _abs( dr.y ) ) ;
else if( dr.y < -g_params.side_sensitivity_threshold )
play_cycle( CA, lthit_motion, 2, block_blends[1], _abs( dr.y ) ) ;
if( dr.z<0.f )
play_cycle( CA, fvhit_motion, 2, block_blends[2], _abs(dr.z) ) ;
else
play_cycle( CA, bkhit_motion, 2, block_blends[3], _abs( dr.z ) ) ;
CA->LL_SetChannelFactor( 2, g_params.anim_channel_factor );
}
示例7: GetBaseMatrix
void character_hit_animation_controller::GetBaseMatrix( Fmatrix &m,CEntityAlive &ea)const
{
IKinematics* CA = smart_cast<IKinematics*>(ea.Visual());
m.mul_43(ea.XFORM(),CA->LL_GetTransform(base_bone));
}