//------------------------------------------------------------------------ void CItem::UpdateFPCharacter(float frameTime) { if (IsClient()) { ICharacterInstance *pCharacter = GetEntity()->GetCharacter(eIGS_FirstPerson); if (pCharacter && !m_idleAnimation[eIGS_FirstPerson].empty() && pCharacter->GetISkeletonAnim()->GetNumAnimsInFIFO(0)<1) PlayAction(m_idleAnimation[eIGS_FirstPerson], 0, true); } // need to explicitly update characters at this point // cause the entity system update occered earlier, with the last position for (int i=0; i<eIGS_Last; i++) { if (GetEntity()->GetSlotFlags(i)&ENTITY_SLOT_RENDER) { ICharacterInstance *pCharacter = GetEntity()->GetCharacter(i); if (pCharacter) { Matrix34 mloc = GetEntity()->GetSlotLocalTM(i,false); Matrix34 m34=GetEntity()->GetWorldTM()*mloc; QuatT renderLocation = QuatT(m34); pCharacter->GetISkeletonPose()->SetForceSkeletonUpdate(8); pCharacter->SkeletonPreProcess(renderLocation, renderLocation, GetISystem()->GetViewCamera(),0x55 ); pCharacter->SetPostProcessParameter(renderLocation, renderLocation, 0, 1.0f, 0x55 ); } } } IEntityRenderProxy *pProxy=GetRenderProxy(); if (pProxy) pProxy->InvalidateLocalBounds(); }
//------------------------------------------------------------------------ void CItem::CopyRenderFlags(IEntity *pOwner) { if (!pOwner || !GetRenderProxy()) return; IRenderNode *pRenderNode = GetRenderProxy()->GetRenderNode(); if (pRenderNode) { IEntityRenderProxy *pOwnerRenderProxy = (IEntityRenderProxy *)pOwner->GetProxy(ENTITY_PROXY_RENDER); IRenderNode *pOwnerRenderNode = pOwnerRenderProxy?pOwnerRenderProxy->GetRenderNode():NULL; if (pOwnerRenderNode) { pRenderNode->SetViewDistRatio(pOwnerRenderNode->GetViewDistRatio()); pRenderNode->SetLodRatio(pOwnerRenderNode->GetLodRatio()); uint32 flags = pOwner->GetFlags()&(ENTITY_FLAG_CASTSHADOW); uint32 mflags = GetEntity()->GetFlags()&(~(ENTITY_FLAG_CASTSHADOW)); GetEntity()->SetFlags(mflags|flags); } } }