本文整理汇总了C++中CEntityAlive::g_WeaponBones方法的典型用法代码示例。如果您正苦于以下问题:C++ CEntityAlive::g_WeaponBones方法的具体用法?C++ CEntityAlive::g_WeaponBones怎么用?C++ CEntityAlive::g_WeaponBones使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CEntityAlive
的用法示例。
在下文中一共展示了CEntityAlive::g_WeaponBones方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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: 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());
}
}
示例3:
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);
}