本文整理汇总了C++中XVector::Size方法的典型用法代码示例。如果您正苦于以下问题:C++ XVector::Size方法的具体用法?C++ XVector::Size怎么用?C++ XVector::Size使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XVector
的用法示例。
在下文中一共展示了XVector::Size方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoExtract
/**
full_list.txt를 만든다.
core_list.txt를 만든다.(apk50메가선을 유지하도록)
*/
void XMain::DoExtract( void )
{
// 일단 모든 리소스 파일의 목록을 뽑는다.
// XArrayLinear<XSYSTEM::XFILE_INFO> aryAll;
XVector<XSYSTEM::XFILE_INFO> aryAll;
// XSYSTEM::CreateFileList( XE::_GetPathPackageRoot(), _T("*.*"), &aryAll );
XSYSTEM::GetFileList( XE::_GetPathPackageRoot(), _T("*.*"), &aryAll, _T("") );
if( aryAll.Size() > 1500 ) {
}
// full_list.txt를 만든다.
{
// XArrayLinear<XPatch::XRES_INFO> ary;
// ary.Create( aryAll.size() );
XVector<XPatch::XRES_INFO> ary;
int cnt = 1;
// 파일별로 체크섬을 뽑아 둔다.
// XARRAYLINEAR_LOOP( aryAll, XSYSTEM::XFILE_INFO, info )
for( auto& info : aryAll ) {
XPatch::XRES_INFO resInfo;
resInfo.strFile = info.strFile;
resInfo.size = info.size;
resInfo.llChecksum = XE::CalcCheckSum( info.strFile.c_str() );
_tstring strFilename = XE::GetFileName( resInfo.strFile.c_str() );
int idxDuplicate = GetResIdxByCheckSum( ary, resInfo.llChecksum );
if( idxDuplicate != -1 ) {
XALERT( "duplicate checksum file: idx=%d,%d", idxDuplicate, cnt );
}
ary.Add( resInfo );
CONSOLE( "%d:%s.... %d byte ....checksum=0x%I64x",
cnt++,
strFilename.c_str(),
resInfo.size,
resInfo.llChecksum );
}
// full_list.txt를 생성한다.
WriteFullList( ary );
}
// core_list.txt를 뽑아낸다.
{
// XArrayLinear<_tstring> aryCore;
// aryCore.Create( aryAll.size() );
XVector<_tstring> aryCore;
int i = 0;
// XARRAYLINEAR_LOOP( aryAll, XSYSTEM::XFILE_INFO, info )
for( auto& info : aryAll ) {
// TCHAR szFlename[ 256 ];
// _tcscpy_s( szFlename, XE::GetFileName( info.strFile.c_str() ) );
const _tstring strFileName = XE::GetFileName( info.strFile );
// 테마에 속하지 않는 몬스터중에 mob_ 으로 시작하는 몬스터는
// 제작은 되었으나 아직 테마에 반영이 안된 몬스터이므로 제외시킨다.
BOOL bCore = TRUE;
// TCHAR szExt[ 16 ];
// _tcscpy_s( szExt, XE::GetFileExt( strFileName ) );
const _tstring strExt = XE::GetFileExt( strFileName );
// 다음 단어가 포함되어 있는 파일은 모두 제외
// if( _tcsstr( szFlename, _T( "treant" ) ) ||
// _tcsstr( szFlename, _T( "rock" ) ) )
// bCore = FALSE;
// 액셀 파일 제외
// if( XE::IsSame( szExt, _T("xlsx") ) )
if( strExt == _T("xlsx") )
bCore = FALSE;
// if( XE::IsSame( szFlename, _T("core_list.txt") ) ||
// XE::IsSame( szFlename, _T("full_list.txt") ) )
// bCore = FALSE;
if( strFileName == _T("core_list.txt")
|| strFileName == _T("full_list.txt") )
bCore = FALSE;
if( _tcsstr( strFileName.c_str(), _T("sample")) )
bCore = FALSE;
//
if( bCore )
{
aryCore.Add( info.strFile );
XTRACE( "%d: %s", i ++, info.strFile.c_str() );
} else
{
// 제외된 파일명
XTRACE( "-----------%s", info.strFile.c_str() );
}
}
// core_list.txt로 저장한다.
WriteCoreList( aryCore );
}
}
示例2: pCenter
/**
@brief pCenter(or vCenter)를 중심으로 radius범위내의 유닛들을 얻어 어레이에 담는다.
@return 얻어낸 타겟수
@param pCenter 중심타겟. null이면 vCenter를 사용한다.
@param vCenter 중심좌표. pCenter가 있다면 사용되지 않는다.
@param pixelRadius 픽셀단위 반지름.
@param bitSideFilter 검색해야할 진영
@param numCost 총 코스트값. 각 유닛은 크기 코스트가 있으며 타겟이 검색될때마다 numCost에서 차감한다. 0이되면 더이상 담지 않는다. 차감한 코스값이 마이너스가 될수는 없다.
0은 코스트에 관계없이 무조건 타겟1개만 검색. -1은 무효값.
@param bIncludeCenter 중심타겟(pCenter가 있을경우)을 대상에 포함할지 말지. pCenter가 없다면 이 옵션은 무시된다.
*/
int XEObjMngWithType::GetListUnitRadius2( XVector<XSPUnit> *pOutAry,
XEBaseWorldObj *pCenter,
const XE::VEC2& vCenter,
float pixelRadius,
BIT bitSideFilter,
int numCost,
bool bIncludeCenter,
BIT bitFlag ) const // 생존필터
{
if( numCost < 0 )
return 0;
//
XVector<XSPUnit> aryInNew; // pOutAry에 이미 타겟이 있는채로 들어왔을때 그것은 제한 리스트
XVector<XSPUnit> aryIn = *pOutAry; // 기존타겟에 반경검사타겟까지 포함.
int costSum = 0;
for( auto spUnit : m_listUnits ) {
if( spUnit->IsDestroy() )
continue;
XBREAK( spUnit == nullptr );
if( (spUnit->GetCamp() & bitSideFilter) == 0 )
continue;
if( (bitFlag & XSKILL::xTF_LIVE) == 0 && spUnit->IsLive() )
continue;
if( (bitFlag & XSKILL::xTF_DEAD) == 0 && spUnit->IsDead() )
continue;
// 시전대상을 포함하지 않는 조건일때 유닛이 시전대상이면 스킵
if( pCenter
&& pCenter->GetsnObj() == spUnit->GetsnObj() // spUnit이 중심타겟일때
&& bIncludeCenter == false ) // 중심타겟안포함 옵션이면 스킵한다.
continue;
if( bitFlag & XSKILL::xTF_DIFF_SQUAD ) {
// spUnit이 이미 찾은 유닛과 같은 부대면 스킵
bool bExisted = false;
for( auto& spFinded : aryIn ) {
if( spUnit->GetpSquadObj()->GetsnSquadObj() == spFinded->GetpSquadObj()->GetsnSquadObj() ) {
bExisted = true;
break;
}
}
if( bExisted )
continue;
}
const XE::VEC2 vDist = spUnit->GetvwPos().ToVec2() - vCenter;
const float distsq = vDist.Lengthsq();
// 코스트와 관계없이 일단 범위안에 들어가는 타겟은 모두 담은후 거기서 다시 코스트에 따라 랜덤으로 꺼낸다.
if( distsq <= pixelRadius * pixelRadius ) {
aryIn.Add( spUnit );
aryInNew.Add( spUnit );
costSum += spUnit->GetSizeCost(); // 배열에 들어간 유닛들의 토탈코스트
} // in radius
} // for
// 목표코스트를 다 채우지 못했거나 딱맞게 채웠을때는 전체 리스트에서 랜덤으로 뽑을필요가 없으므로 그냥 검색된 리스트를 모두 리턴한다.
if( costSum <= numCost ) {
*pOutAry = aryIn;
return pOutAry->Size();
}
int currCost = numCost;
// XVector<XSPUnit> ary = *pOutAry;
// pOutAry->Clear();
// 영역안에 들어온 타겟들을 대상으로 다시 코스트에 따라 실제 타겟을 선정한다.
while( aryInNew.Size() > 0 ) {
auto spUnit = aryInNew.PopFromRandom();
if( numCost == 0 ) {
if( pOutAry->Size() == 0 )
pOutAry->Add( spUnit );
return 1;
} else {
const auto costUnit = spUnit->GetSizeCost();
if( costUnit <= currCost ) {
// 유닛 코스트가 남은 코스트를 깔수 있을때만.
currCost -= costUnit;
XBREAK( currCost < 0 );
pOutAry->Add( spUnit );
if( currCost == 0 ) // 코스트를 다 채웠으면 리턴.
return pOutAry->Size();
}
}
}
return pOutAry->size();
}