Exemplo n.º 1
0
unsigned int EffRect::GetEffectObjs( list<CMoveShape*> &listObjs )
{

    if ( m_strNum!="" )
    {
        /// by:expter 2010/08/31 技能增加一个参数
        m_nNum = m_pParam->pFirer->GetSkillValue(m_pParam->nID,m_pParam->nLvl,m_strNum);
    }
    if( m_nNum < 0 )
        m_nNum = 0;

    uint nNum = 0;

    // 取得作用点
    Graph::PosPair poss = GetOperPos();

    // 取得可能影响的SHAPE
    std::vector<CShape*> shapes;
    if( GetAroundShapes( poss, shapes ) == 0 )
    {
        return 0;
    }

    // 取得矩形4条边
    Graph::Line l1, l2, l3, l4;
    GetRectLines( poss, l1, l2, l3, l4 );

    if ( m_pExcept )
    {
#ifdef _SKILL_INFO_D_    
        Log4c::Trace(SKILL_MODULE, "EffRect:作用于对象外的玩家\n");    
#endif
    }
    // 判定每个SHAPE是否确实在矩形内
    for( std::vector<CShape*>::iterator it = shapes.begin();
        it != shapes.end(); ++ it )
    {
        CShape *shape = *it;
        if( shape == m_pParam->pUser ) continue;
        if( Graph::IsInLineRange( shape->GetPosX(), shape->GetPosY(), l1, l2 ) &&
            Graph::IsInLineRange( shape->GetPosX(), shape->GetPosY(), l3, l4 ) )
        {
            ++nNum;		
            if (m_nNum>0)
            {      
                if (m_nNum<(int)nNum)
                {
                    break;
                }
            }
            
            CMoveShape *moveShape = (CMoveShape*) shape;
            /// 除去范围内对象
            if( m_pExcept && m_pExcept == moveShape )
            {
                continue;                       
            }

            listObjs.push_back( moveShape );
        }
    }
    return nNum;
}
/*
* 功能: 渲染列表中的对象
* 摘要: -
* 参数: -
* 返回值: -
* 作者: lpf
* 创建日期: 2008.10.13
* 修改日志:
*	2008.10.21 - lpf
*		增加了在渲染特效时,对其进行纹理动画,可见动画,UV流动等等的处理;
*	2008.10.23 - lpf
*		增加了对坐骑显示的处理;
*	2008.10.31 - lpf
*		增加了处理渐出效果时,对投影纹理的渐出;
*	2008.12.12 - lpf
*		取消了渐出时的阴影渲染;
*	2008.12.30 - lpf
*		增加了对渐出模型列表中,显示模型是否读取完毕的判断,避免由此带来的当机问题;
*	2009.04.24 - lpf
*		玩家显示时,传入对象指针采用了dynamic_cast形式,检查错误的转换;
*/
void CAlphaFadeObjectList::Render()
{
	CClientRegion * pRegion = GetGame()->GetRegion();
	if (pRegion == NULL)
		return;

	for (size_t st = 0; st < m_vecObjectList.size(); ++st)
	{
		CShape * pTmp = m_vecObjectList[st];

		if (pTmp->GetDisplayModel() == NULL || pTmp->GetDisplayModel()->GetLoadState() != Load_Did)
			continue;
		pTmp->GetDisplayModel()->SetDirLightEnable(GetGame()->GetSetup()->lLight>0);
		pTmp->GetAnimInfo()->SetViewMatrix(pRegion->GetCamera()->GetViewMatrix());
		pTmp->GetAnimInfo()->SetProjectedMatrix(pRegion->GetCamera()->GetProjectionMatrix());

		switch (pTmp->GetType())
		{
		case TYPE_PLAYER:
			{
				CPlayer * pPlayer = (CPlayer *)pTmp;
				if (pPlayer->IsRide())
					pPlayer->GetHorse()->Display(dynamic_cast<CMoveShape *>(pTmp), false);

				pTmp->GetDisplayModel()->ProcessAnimJoint(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessLocator(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->MultiplyModelAlpha(pTmp->GetAlphaValue());
				pTmp->GetDisplayModel()->RenderModelTransparent();

				pPlayer->GetLeftHandWeapon()->Display(dynamic_cast<CShape *>(pTmp));
				pPlayer->GetRightHandWeapon()->Display(dynamic_cast<CShape *>(pTmp));
				pPlayer->GetWing()->Display(dynamic_cast<CShape *>(pTmp));

				//RenderShadow(pTmp);			//渲染阴影
			}
			break;
		case TYPE_PET:
		case TYPE_MONSTER:
		case TYPE_COLLECTION:
			{
				pTmp->GetDisplayModel()->ProcessAnimJoint(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessLocator(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->MultiplyModelAlpha(pTmp->GetAlphaValue());
				pTmp->GetDisplayModel()->RenderModelTransparent();
				//RenderShadow(pTmp);			//渲染阴影
			}
			break;
		case TYPE_EFFECT:
			{
				float fX = pTmp->GetPosX();
				float fY = pTmp->GetPosY();
				float fH = pTmp->GetHeight();
				float fNowDir = pTmp->GetNowDir();
				CEffect * pEffect = dynamic_cast<CEffect *>(pTmp);
				if (pEffect && pEffect->GetHostType() !=0 && pEffect->GetHostID() != CGUID::GUID_INVALID)
				{
					CShape * pShape = dynamic_cast<CShape *>(pRegion->FindChildObject(pEffect->GetHostType(), pEffect->GetHostID()));
					if (pShape)
					{
						pShape->GetLocatorPos(pEffect->GetHostLocator(), fX, fY, fH);
						fNowDir = pShape->GetNowDir();
					}
				}

				pTmp->GetAnimInfo()->SetupAnimInfo(fX, fY, fH, fNowDir, pRegion->GetCamera());
				pTmp->GetAnimInfo()->SetTextureProjectiveAlpha(pTmp->GetAlphaValue());
				pTmp->GetDisplayModel()->ProcessAnimJoint(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessLocator(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessVisibility(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessAnimUV(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessAnimTexture(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->ProcessTextureProjective(pTmp->GetAnimInfo());
				pTmp->GetDisplayModel()->MultiplyModelAlpha(pTmp->GetAlphaValue());
				pTmp->GetDisplayModel()->RenderModelTransparent();
			}
			break;
		}
	}
}