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; } } }