forked from 0ad/0ad
Matei
2261231ffa
Jan and I implemented a number of changes: - Converted SClassSet to vector. - Refactored get/set ClassSet from string into methods in CClassSet. - Turned pass-by-value string params in getCollisionObject, CEntity constructor and CEntityManager into pointers. - Simplified processChooseMovement. - Merged CalculateRun and CalculateHealth into a single, simpler CalculateRegen + helper functions. - Changed the way regen works so the rates read in the XML act as rates (before, they were the number of seconds until the entity will be fully regenned, which is a bit counterintuitive). This was SVN commit r4167.
124 lines
2.0 KiB
C++
124 lines
2.0 KiB
C++
#include "precompiled.h"
|
|
|
|
#include "EntitySupport.h"
|
|
|
|
bool CClassSet::IsMember( const CStrW& Test )
|
|
{
|
|
for(size_t i = 0; i < m_Members.size(); i++)
|
|
{
|
|
if(m_Members[i] == Test)
|
|
{
|
|
// Move to Front algo (currently disabled)
|
|
//std::swap(m_Members[0], m_Members[i]);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void CClassSet::Rebuild()
|
|
{
|
|
if( m_Parent )
|
|
m_Members = m_Parent->m_Members;
|
|
else
|
|
m_Members.clear();
|
|
|
|
Set newMembers;
|
|
|
|
for( size_t i=0; i<m_Members.size(); ++i )
|
|
{
|
|
const CStrW& member = m_Members[i];
|
|
|
|
for(size_t j=0; j<m_RemovedMembers.size(); j++)
|
|
{
|
|
if(m_RemovedMembers[j] == member)
|
|
goto end;
|
|
}
|
|
|
|
for(size_t j=0; j<m_AddedMembers.size(); j++)
|
|
{
|
|
if(m_AddedMembers[j] == member)
|
|
goto end;
|
|
}
|
|
|
|
newMembers.push_back(member);
|
|
|
|
end:;
|
|
}
|
|
|
|
for(size_t j=0; j<m_AddedMembers.size(); j++)
|
|
{
|
|
newMembers.push_back(m_AddedMembers[j]);
|
|
}
|
|
|
|
m_Members = newMembers;
|
|
}
|
|
|
|
CStrW CClassSet::getMemberList()
|
|
{
|
|
Set::iterator it = m_Members.begin();
|
|
CStrW result = L"";
|
|
if( it != m_Members.end() )
|
|
{
|
|
result = *( it++ );
|
|
for( ; it != m_Members.end(); ++it )
|
|
result += L" " + *it;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void CClassSet::setFromMemberList(const CStrW& list)
|
|
{
|
|
CStr entry;
|
|
CStr temp = list;
|
|
|
|
m_AddedMembers.clear();
|
|
m_RemovedMembers.clear();
|
|
|
|
while( true )
|
|
{
|
|
// Find the first ' ' or ',' in the string
|
|
int brk = temp.Find(' ');
|
|
int comma = temp.Find(',');
|
|
if( comma != -1 && ( brk == -1 || comma < brk ) )
|
|
{
|
|
brk = comma;
|
|
}
|
|
|
|
if( brk == -1 )
|
|
{
|
|
entry = temp;
|
|
}
|
|
else
|
|
{
|
|
entry = temp.GetSubstring( 0, brk );
|
|
temp = temp.GetSubstring( brk + 1, temp.Length() );
|
|
}
|
|
|
|
if( brk != 0 )
|
|
{
|
|
if( entry[0] == '-' )
|
|
{
|
|
entry = entry.GetSubstring( 1, entry.Length() );
|
|
if( entry.Length() )
|
|
m_RemovedMembers.push_back( entry );
|
|
}
|
|
else
|
|
{
|
|
if( entry[0] == '+' )
|
|
entry = entry.GetSubstring( 1, entry.Length() );
|
|
if( entry.Length() )
|
|
m_AddedMembers.push_back( entry );
|
|
}
|
|
}
|
|
if( brk == -1 )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|