Exemplo n.º 1
0
//------------------------------------------------------------------------
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();
}
Exemplo n.º 2
0
//------------------------------------------------------------------------
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);
		}
	}
}