Exemple #1
0
/**
 @brief 효과 시전
 pEffect의 효과를 기준타겟(pBaseTarget)을 기준으로 시전대상을 선정하여 시전한다.
 현재 _vPos는 사용하지 않는다
*/
xtError XSkillUser::UseEffect( const XSkillDat *pDat,
															 EFFECT *pEffect,
															 int level,
															 XSkillReceiver *pBaseTarget,
															 const XE::VEC2& vBaseTarget,		// 기준타겟이 좌표형일경우.
															 ID idCallerSkill )
{
	// 좌표에 값이 있으면 타겟은 널이어야 한다.,
	XBREAK( vBaseTarget.IsNotZero() && pBaseTarget != nullptr );
	XVector<XSkillReceiver*> aryCastTargets;		// 시전대상
	// 기준타겟이나 기준좌표로 시전대상을 얻는다.
	XBREAK( pBaseTarget == nullptr && vBaseTarget.IsZero() );
	//
	XE::VEC2 vCastTarget;
	GetCastingTargetList( &aryCastTargets,
												&vCastTarget,
												pEffect->castTarget,
												pDat,
												pEffect,
												level,
												pBaseTarget,
												vBaseTarget );
	//
	if( vCastTarget.IsZero() && aryCastTargets.empty() ) {
		return xERR_NOT_FOUND_CASTING_TARGET;		// 시전대상을 찾지 못함
	}
	if( aryCastTargets.size() ) {
		// 캐스팅 대상들에게 효과를 시전한다.
		for( auto pCastingTarget : aryCastTargets ) {
			// 즉시시전 or 버프방식
			const XE::VEC2 vZero;
			CastEffToCastTarget( pDat,
													 pEffect,
													 level,
//												 pBaseTarget,
													 pCastingTarget,
													 vZero,
													 idCallerSkill );
		}
	} else 
	if( vCastTarget.IsNotZero() ) {
		// 시전대상이 좌표형
		CastEffToCastTarget( pDat,
												 pEffect,
												 level,
												 nullptr,
												 vCastTarget,
												 idCallerSkill );
	} else {
		XBREAK(1);
	}
	return xOK;
}