1
0
forked from 0ad/0ad
0ad/source/simulation/EntitySupport.cpp
Matei 2261231ffa # Housekeeping.
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.
2006-07-24 01:33:26 +00:00

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