本文整理汇总了C++中CKinematics::CalculateBones方法的典型用法代码示例。如果您正苦于以下问题:C++ CKinematics::CalculateBones方法的具体用法?C++ CKinematics::CalculateBones怎么用?C++ CKinematics::CalculateBones使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CKinematics
的用法示例。
在下文中一共展示了CKinematics::CalculateBones方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateCL
void CCarWeapon::UpdateCL()
{
if(!m_bActive) return;
UpdateBarrelDir ();
CKinematics* K = smart_cast<CKinematics*>(m_object->Visual());
K->CalculateBones_Invalidate();
K->CalculateBones ();
UpdateFire ();
}
示例2: RespawnInit
void CHangingLamp::RespawnInit()
{
Init();
if(Visual()){
CKinematics* K = smart_cast<CKinematics*>(Visual());
K->LL_SetBonesVisible(u64(-1));
K->CalculateBones_Invalidate();
K->CalculateBones ();
}
}
示例3: 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);
CKinematics* V = smart_cast<CKinematics*> (E->Visual());
VERIFY (V);
// Get matrices
int boneL,boneR,boneR2;
E->g_WeaponBones(boneL,boneR,boneR2);
// 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);
}
示例4:
void CHangingLamp::TurnOn ()
{
light_render->set_active (true);
if (glow_render) glow_render->set_active (true);
if (light_ambient) light_ambient->set_active (true);
if (Visual()){
CKinematics* K = smart_cast<CKinematics*>(Visual());
K->LL_SetBoneVisible (light_bone, TRUE, TRUE);
K->CalculateBones_Invalidate();
K->CalculateBones ();
}
processing_activate ();
}
示例5: UpdateXFORM
void CPhysicsShellHolder::UpdateXFORM(const Fmatrix &upd)
{
inherited::UpdateXFORM(upd);
static int method = 1 + 4 + 8; // alpet: набор флагов для отладки, можно менять значение во время выполнения из Watches
if (PPhysicsShell())
{
// m_pPhysicsShell->SetTransform(upd);
if (method & 1)
{
PPhysicsShell()->mXFORM.set(upd);
PPhysicsShell()->SetGlTransformDynamic(upd);
}
if (method & 2)
{ // стянуто из Car.cpp и как-то не так работает
bool enable = PPhysicsShell()->isEnabled();
Fmatrix inv, replace;
Fmatrix restored_form;
PPhysicsShell()->GetGlobalTransformDynamic(&restored_form);
inv.set(restored_form);
inv.invert();
replace.mul(upd, inv);
PPhysicsShell()->SetTransform (replace);
if (enable) PPhysicsShell()->Enable();
else PPhysicsShell()->Disable();
// PPhysicsShell()->GetGlobalTransformDynamic(&XFORM());
}
// пересчет костей
CKinematics *K = PKinematics(Visual());
if (K)
{
K->CalculateBones_Invalidate();
K->CalculateBones();
}
if (method & 4)
PPhysicsShell()->Update();
if (method & 8)
PPhysicsShell()->GetGlobalTransformDynamic(&XFORM());
}
}
示例6: DieHelicopter
void CHelicopter::DieHelicopter()
{
if ( state() == CHelicopter::eDead )
return;
CEntity::Die(NULL);
m_engineSound.stop ();
m_brokenSound.create (pSettings->r_string(*cNameSect(), "broken_snd"),st_Effect,sg_SourceType);
m_brokenSound.play_at_pos (0,XFORM().c,sm_Looped);
CKinematics* K = smart_cast<CKinematics*>(Visual());
if(true /*!PPhysicsShell()*/){
string256 I;
LPCSTR bone;
u16 bone_id;
for (u32 i=0, n=_GetItemCount(*m_death_bones_to_hide); i<n; ++i){
bone = _GetItem(*m_death_bones_to_hide,i,I);
bone_id = K->LL_BoneID (bone);
K->LL_SetBoneVisible(bone_id,FALSE,TRUE);
}
///PPhysicsShell()=P_build_Shell (this,false);
PPhysicsShell()->EnabledCallbacks(TRUE);
PPhysicsShell()->set_ObjectContactCallback(CollisionCallbackDead);
PPhysicsShell()->set_ContactCallback(ContactShotMark);
}
Fvector lin_vel;
Fvector prev_pos = PositionStack.front().vPosition;
lin_vel.sub (XFORM().c,prev_pos);
if(Device.dwTimeGlobal != PositionStack.front().dwTime)
lin_vel.div((Device.dwTimeGlobal-PositionStack.front().dwTime)/1000.0f);
lin_vel.mul (m_death_lin_vel_k);
PPhysicsShell()->set_LinearVel (lin_vel);
PPhysicsShell()->set_AngularVel (m_death_ang_vel);
PPhysicsShell()->Enable ();
K->CalculateBones_Invalidate ();
K->CalculateBones ();
setState (CHelicopter::eDead);
m_engineSound.stop ();
processing_deactivate ();
m_dead = true;
}
示例7: 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);
CKinematics* V = smart_cast<CKinematics*> (E->Visual());
VERIFY (V);
// Get matrices
int boneL,boneR,boneR2;
E->g_WeaponBones (boneL,boneR,boneR2);
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());
}
}
示例8: UpdateCLChild
void CGraviArtefact::UpdateCLChild()
{
VERIFY(!ph_world->Processing());
if (getVisible() && m_pPhysicsShell) {
if (m_fJumpHeight) {
Fvector dir;
dir.set(0, -1.f, 0);
collide::rq_result RQ;
//проверить высоту артифакта
if(Level().ObjectSpace.RayPick(Position(), dir, m_fJumpHeight, collide::rqtBoth, RQ, this))
{
dir.y = 1.f;
m_pPhysicsShell->applyImpulse(dir,
30.f * Device.fTimeDelta *
m_pPhysicsShell->getMass());
}
}
} else
if(H_Parent())
{
XFORM().set(H_Parent()->XFORM());
if (GameID() == GAME_ARTEFACTHUNT && m_CarringBoneID != u16(-1))
{
CKinematics* K = smart_cast<CKinematics*>(H_Parent()->Visual());
if (K)
{
K->CalculateBones ();
Fmatrix Ruck_MTX = K->LL_GetTransform(m_CarringBoneID);
Fvector x;
x.set(-0.1f, 0.f, -0.3f);
Ruck_MTX.translate_add(x);
Ruck_MTX.mulA_43 (XFORM());
XFORM().set(Ruck_MTX);
};
};
};
}
示例9:
void R_dsgraph_structure::r_dsgraph_render_R1_box (IRender_Sector* _S, Fbox& BB, int sh)
{
CSector* S = (CSector*)_S;
lstVisuals.clear ();
lstVisuals.push_back (S->root());
for (u32 test=0; test<lstVisuals.size(); test++)
{
IRender_Visual* V = lstVisuals[test];
// Visual is 100% visible - simply add it
xr_vector<IRender_Visual*>::iterator I,E; // it may be usefull for 'hierrarhy' visuals
switch (V->Type) {
case MT_HIERRARHY:
{
// Add all children
FHierrarhyVisual* pV = (FHierrarhyVisual*)V;
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) {
IRender_Visual* T = *I;
if (BB.intersect(T->vis.box)) lstVisuals.push_back(T);
}
}
break;
case MT_SKELETON_ANIM:
case MT_SKELETON_RIGID:
{
// Add all children (s)
CKinematics * pV = (CKinematics*)V;
pV->CalculateBones (TRUE);
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) {
IRender_Visual* T = *I;
if (BB.intersect(T->vis.box)) lstVisuals.push_back(T);
}
}
break;
case MT_LOD:
{
FLOD * pV = (FLOD*) V;
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) {
IRender_Visual* T = *I;
if (BB.intersect(T->vis.box)) lstVisuals.push_back(T);
}
}
break;
default:
{
// Renderable visual
ShaderElement* E = V->shader->E[sh]._get();
if (E) {
for (u32 pass=0; pass<E->passes.size(); pass++)
{
RCache.set_Element (E,pass);
V->Render (-1.f);
}
}
}
break;
}
}
}
示例10: add_Static
void CRender::add_Static(IRender_Visual *pVisual, u32 planes)
{
// Check frustum visibility and calculate distance to visual's center
EFC_Visible VIS;
vis_data& vis = pVisual->vis;
VIS = View->testSAABB (vis.sphere.P,vis.sphere.R,vis.box.data(),planes);
if (fcvNone==VIS) return;
if (!HOM.visible(vis)) return;
// If we get here visual is visible or partially visible
xr_vector<IRender_Visual*>::iterator I,E; // it may be usefull for 'hierrarhy' visuals
switch (pVisual->Type) {
case MT_PARTICLE_GROUP:
{
// Add all children, doesn't perform any tests
PS::CParticleGroup* pG = (PS::CParticleGroup*)pVisual;
for (PS::CParticleGroup::SItemVecIt i_it=pG->items.begin(); i_it!=pG->items.end(); i_it++){
PS::CParticleGroup::SItem& I = *i_it;
if (fcvPartial==VIS) {
if (I._effect) add_Dynamic (I._effect,planes);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_related.begin(); pit!=I._children_related.end(); pit++) add_Dynamic(*pit,planes);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_free.begin(); pit!=I._children_free.end(); pit++) add_Dynamic(*pit,planes);
} else {
if (I._effect) add_leafs_Dynamic (I._effect);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_related.begin(); pit!=I._children_related.end(); pit++) add_leafs_Dynamic(*pit);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_free.begin(); pit!=I._children_free.end(); pit++) add_leafs_Dynamic(*pit);
}
}
}
break;
case MT_HIERRARHY:
{
// Add all children
FHierrarhyVisual* pV = (FHierrarhyVisual*)pVisual;
I = pV->children.begin ();
E = pV->children.end ();
if (fcvPartial==VIS) {
for (; I!=E; I++) add_Static (*I,planes);
} else {
for (; I!=E; I++) add_leafs_Static (*I);
}
}
break;
case MT_SKELETON_ANIM:
case MT_SKELETON_RIGID:
{
// Add all children, doesn't perform any tests
CKinematics * pV = (CKinematics*)pVisual;
pV->CalculateBones (TRUE);
I = pV->children.begin ();
E = pV->children.end ();
if (fcvPartial==VIS) {
for (; I!=E; I++) add_Static (*I,planes);
} else {
for (; I!=E; I++) add_leafs_Static (*I);
}
}
break;
case MT_LOD:
{
FLOD * pV = (FLOD*) pVisual;
float D;
float ssa = CalcSSA (D,pV->vis.sphere.P,pV);
ssa *= pV->lod_factor;
if (ssa<r_ssaLOD_A)
{
if (ssa<r_ssaDISCARD) return;
mapLOD_Node* N = mapLOD.insertInAnyWay(D);
N->val.ssa = ssa;
N->val.pVisual = pVisual;
}
if (ssa>r_ssaLOD_B)
{
// Add all children, perform tests
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Static (*I);
}
}
break;
case MT_TREE_ST:
case MT_TREE_PM:
{
// General type of visual
r_dsgraph_insert_static (pVisual);
}
return;
default:
{
// General type of visual
r_dsgraph_insert_static (pVisual);
}
break;
}
}
示例11: add_Dynamic
BOOL CRender::add_Dynamic(IRender_Visual *pVisual, u32 planes)
{
// Check frustum visibility and calculate distance to visual's center
Fvector Tpos; // transformed position
EFC_Visible VIS;
val_pTransform->transform_tiny (Tpos, pVisual->vis.sphere.P);
VIS = View->testSphere (Tpos, pVisual->vis.sphere.R,planes);
if (fcvNone==VIS) return FALSE ;
// If we get here visual is visible or partially visible
xr_vector<IRender_Visual*>::iterator I,E; // it may be usefull for 'hierrarhy' visuals
switch (pVisual->Type) {
case MT_PARTICLE_GROUP:
{
// Add all children, doesn't perform any tests
PS::CParticleGroup* pG = (PS::CParticleGroup*)pVisual;
for (PS::CParticleGroup::SItemVecIt i_it=pG->items.begin(); i_it!=pG->items.end(); i_it++)
{
PS::CParticleGroup::SItem& I = *i_it;
if (fcvPartial==VIS)
{
if (I._effect) add_Dynamic (I._effect,planes);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_related.begin(); pit!=I._children_related.end(); pit++) add_Dynamic(*pit,planes);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_free.begin(); pit!=I._children_free.end(); pit++) add_Dynamic(*pit,planes);
} else
{
if (I._effect) add_leafs_Dynamic (I._effect);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_related.begin(); pit!=I._children_related.end(); pit++) add_leafs_Dynamic(*pit);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_free.begin(); pit!=I._children_free.end(); pit++) add_leafs_Dynamic(*pit);
}
}
}
break;
case MT_HIERRARHY:
{
// Add all children
FHierrarhyVisual* pV = (FHierrarhyVisual*)pVisual;
I = pV->children.begin ();
E = pV->children.end ();
if (fcvPartial==VIS)
{
for (; I!=E; I++) add_Dynamic (*I,planes);
} else {
for (; I!=E; I++) add_leafs_Dynamic (*I);
}
}
break;
case MT_SKELETON_ANIM:
case MT_SKELETON_RIGID:
{
// Add all children, doesn't perform any tests
CKinematics * pV = (CKinematics*)pVisual;
BOOL _use_lod = FALSE ;
if (pV->m_lod)
{
Fvector Tpos; float D;
val_pTransform->transform_tiny (Tpos, pV->vis.sphere.P);
float ssa = CalcSSA (D,Tpos,pV->vis.sphere.R/2.f); // assume dynamics never consume full sphere
if (ssa<r_ssaLOD_A) _use_lod = TRUE ;
}
if (_use_lod)
{
add_leafs_Dynamic (pV->m_lod) ;
} else
{
pV->CalculateBones (TRUE);
pV->CalculateWallmarks (); //. bug?
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Dynamic (*I);
}
/*
I = pV->children.begin ();
E = pV->children.end ();
if (fcvPartial==VIS) {
for (; I!=E; I++) add_Dynamic (*I,planes);
} else {
for (; I!=E; I++) add_leafs_Dynamic (*I);
}
*/
}
break;
default:
{
// General type of visual
r_dsgraph_insert_dynamic(pVisual,Tpos);
}
break;
}
return TRUE;
}
示例12: add_leafs_Static
void CRender::add_leafs_Static(IRender_Visual *pVisual)
{
if (!HOM.visible(pVisual->vis)) return;
// Visual is 100% visible - simply add it
xr_vector<IRender_Visual*>::iterator I,E; // it may be usefull for 'hierrarhy' visuals
switch (pVisual->Type) {
case MT_PARTICLE_GROUP:
{
// Add all children, doesn't perform any tests
PS::CParticleGroup* pG = (PS::CParticleGroup*)pVisual;
for (PS::CParticleGroup::SItemVecIt i_it=pG->items.begin(); i_it!=pG->items.end(); i_it++){
PS::CParticleGroup::SItem& I = *i_it;
if (I._effect) add_leafs_Dynamic (I._effect);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_related.begin(); pit!=I._children_related.end(); pit++) add_leafs_Dynamic(*pit);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_free.begin(); pit!=I._children_free.end(); pit++) add_leafs_Dynamic(*pit);
}
}
return;
case MT_HIERRARHY:
{
// Add all children, doesn't perform any tests
FHierrarhyVisual* pV = (FHierrarhyVisual*)pVisual;
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Static (*I);
}
return;
case MT_SKELETON_ANIM:
case MT_SKELETON_RIGID:
{
// Add all children, doesn't perform any tests
CKinematics * pV = (CKinematics*)pVisual;
pV->CalculateBones (TRUE);
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Static (*I);
}
return;
case MT_LOD:
{
FLOD * pV = (FLOD*) pVisual;
float D;
float ssa = CalcSSA(D,pV->vis.sphere.P,pV);
ssa *= pV->lod_factor;
if (ssa<r_ssaLOD_A)
{
if (ssa<r_ssaDISCARD) return;
mapLOD_Node* N = mapLOD.insertInAnyWay(D);
N->val.ssa = ssa;
N->val.pVisual = pVisual;
}
if (ssa>r_ssaLOD_B)
{
// Add all children, doesn't perform any tests
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Static (*I);
}
}
return;
case MT_TREE_PM:
case MT_TREE_ST:
{
// General type of visual
r_dsgraph_insert_static (pVisual);
}
return;
default:
{
// General type of visual
r_dsgraph_insert_static (pVisual);
}
return;
}
}
示例13:
void CRender::add_leafs_Dynamic (IRender_Visual *pVisual)
{
if (0==pVisual) return;
// Visual is 100% visible - simply add it
xr_vector<IRender_Visual*>::iterator I,E; // it may be useful for 'hierrarhy' visual
switch (pVisual->Type) {
case MT_PARTICLE_GROUP:
{
// Add all children, doesn't perform any tests
PS::CParticleGroup* pG = (PS::CParticleGroup*)pVisual;
for (PS::CParticleGroup::SItemVecIt i_it=pG->items.begin(); i_it!=pG->items.end(); i_it++) {
PS::CParticleGroup::SItem& I = *i_it;
if (I._effect) add_leafs_Dynamic (I._effect);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_related.begin(); pit!=I._children_related.end(); pit++) add_leafs_Dynamic(*pit);
for (xr_vector<IRender_Visual*>::iterator pit = I._children_free.begin(); pit!=I._children_free.end(); pit++) add_leafs_Dynamic(*pit);
}
}
return;
case MT_HIERRARHY:
{
// Add all children, doesn't perform any tests
FHierrarhyVisual* pV = (FHierrarhyVisual*)pVisual;
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Dynamic (*I);
}
return;
case MT_SKELETON_ANIM:
case MT_SKELETON_RIGID:
{
// Add all children, doesn't perform any tests
CKinematics * pV = (CKinematics*)pVisual;
BOOL _use_lod = FALSE ;
if (pV->m_lod)
{
Fvector Tpos; float D;
val_pTransform->transform_tiny (Tpos, pV->vis.sphere.P);
float ssa = CalcSSA (D,Tpos,pV->vis.sphere.R/2.f); // assume dynamics never consume full sphere
if (ssa<r_ssaLOD_A) _use_lod = TRUE;
}
if (_use_lod)
{
add_leafs_Dynamic (pV->m_lod) ;
} else {
pV->CalculateBones (TRUE);
pV->CalculateWallmarks (); //. bug?
I = pV->children.begin ();
E = pV->children.end ();
for (; I!=E; I++) add_leafs_Dynamic (*I);
}
}
return;
default:
{
// General type of visual
// Calculate distance to it's center
Fvector Tpos;
val_pTransform->transform_tiny (Tpos, pVisual->vis.sphere.P);
r_dsgraph_insert_dynamic (pVisual,Tpos);
}
return;
}
}
示例14: draw_adjust_mode
void CUIMainIngameWnd::draw_adjust_mode()
{
if (g_bHudAdjustMode&&m_pWeapon) //draw firePoint,ShellPoint etc
{
CActor* pActor = smart_cast<CActor*>(Level().CurrentEntity());
if(!pActor)
return;
bool bCamFirstEye = !!m_pWeapon->GetHUDmode();
string32 hud_view="HUD view";
string32 _3rd_person_view="3-rd person view";
CGameFont* F = UI()->Font()->pFontDI;
F->SetAligment (CGameFont::alCenter);
//. F->SetSizeI (0.02f);
F->OutSetI (0.f,-0.8f);
F->SetColor (0xffffffff);
F->OutNext ("Hud_adjust_mode=%d",g_bHudAdjustMode);
if(g_bHudAdjustMode==1)
F->OutNext ("adjusting zoom offset");
else if(g_bHudAdjustMode==2)
F->OutNext ("adjusting fire point for %s",bCamFirstEye?hud_view:_3rd_person_view);
else if(g_bHudAdjustMode==3)
F->OutNext ("adjusting missile offset");
else if(g_bHudAdjustMode==4)
F->OutNext ("adjusting shell point for %s",bCamFirstEye?hud_view:_3rd_person_view);
else if(g_bHudAdjustMode == 5)
F->OutNext ("adjusting fire point 2 for %s",bCamFirstEye?hud_view:_3rd_person_view);
if(bCamFirstEye)
{
CWeaponHUD *pWpnHud = NULL;
pWpnHud = m_pWeapon->GetHUD();
Fvector FP,SP,FP2;
CKinematics* V = smart_cast<CKinematics*>(pWpnHud->Visual());
VERIFY (V);
V->CalculateBones ();
// fire point&direction
Fmatrix& fire_mat = V->LL_GetTransform(u16(pWpnHud->FireBone()));
Fmatrix& parent = pWpnHud->Transform ();
const Fvector& fp = pWpnHud->FirePoint();
const Fvector& fp2 = pWpnHud->FirePoint2();
const Fvector& sp = pWpnHud->ShellPoint();
fire_mat.transform_tiny (FP,fp);
parent.transform_tiny (FP);
fire_mat.transform_tiny (FP2,fp2);
parent.transform_tiny (FP2);
fire_mat.transform_tiny (SP,sp);
parent.transform_tiny (SP);
RCache.dbg_DrawAABB(FP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(255,0,0));
RCache.dbg_DrawAABB(FP2,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,0,255));
RCache.dbg_DrawAABB(SP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(0,255,0));
}else{
Fvector FP = m_pWeapon->get_CurrentFirePoint();
Fvector FP2 = m_pWeapon->get_CurrentFirePoint2();
Fvector SP = m_pWeapon->get_LastSP();
RCache.dbg_DrawAABB(FP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(255,0,0));
RCache.dbg_DrawAABB(FP2,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,0,255));
RCache.dbg_DrawAABB(SP,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,255,0));
}
}
}