# improve robustness of simulation and EntityManager code
also const-correctness fixes in EntityFormation +build This was SVN commit r6502.
This commit is contained in:
parent
343fa4fea5
commit
213743b73d
@ -40,11 +40,6 @@ CEntityFormation::~CEntityFormation()
|
||||
}
|
||||
}
|
||||
|
||||
size_t CEntityFormation::GetSlotCount()
|
||||
{
|
||||
return m_base->m_numSlots;
|
||||
}
|
||||
|
||||
void CEntityFormation::SwitchBase( CFormation*& base )
|
||||
{
|
||||
std::vector<CEntity*> copy;
|
||||
@ -186,7 +181,7 @@ void CEntityFormation::ResetAngleDivs()
|
||||
m_angleDivs[i] = false;
|
||||
}
|
||||
|
||||
void CEntityFormation::SelectAllUnits()
|
||||
void CEntityFormation::SelectAllUnits() const
|
||||
{
|
||||
for ( size_t i=0; i<m_base->m_numSlots; ++i )
|
||||
{
|
||||
@ -195,7 +190,13 @@ void CEntityFormation::SelectAllUnits()
|
||||
}
|
||||
}
|
||||
|
||||
CEntityList CEntityFormation::GetEntityList()
|
||||
// (cannot be declared inline in the header due to use of CFormation (m_base)
|
||||
size_t CEntityFormation::GetSlotCount() const
|
||||
{
|
||||
return m_base->m_numSlots;
|
||||
}
|
||||
|
||||
CEntityList CEntityFormation::GetEntityList() const
|
||||
{
|
||||
CEntityList ret;
|
||||
for ( size_t i=0; i<m_base->m_numSlots; i++ )
|
||||
@ -206,7 +207,7 @@ CEntityList CEntityFormation::GetEntityList()
|
||||
return ret;
|
||||
}
|
||||
|
||||
CVector2D CEntityFormation::GetSlotPosition( size_t order )
|
||||
CVector2D CEntityFormation::GetSlotPosition( size_t order ) const
|
||||
{
|
||||
if ( IsValidOrder(order) )
|
||||
return CVector2D ( m_base->m_slots[order].rankOff, m_base->m_slots[order].fileOff );
|
||||
|
@ -20,23 +20,50 @@ public:
|
||||
CEntityFormation( CFormation*& base, size_t index );
|
||||
~CEntityFormation();
|
||||
|
||||
size_t GetEntityCount() { return m_numEntities; }
|
||||
float GetSpeed() { return m_speed; }
|
||||
size_t GetSlotCount();
|
||||
size_t GetEntityCount() const
|
||||
{
|
||||
return m_numEntities;
|
||||
}
|
||||
float GetSpeed() const
|
||||
{
|
||||
return m_speed;
|
||||
}
|
||||
size_t GetSlotCount() const;
|
||||
|
||||
CEntityList GetEntityList();
|
||||
CVector2D GetSlotPosition( size_t order );
|
||||
CVector2D GetPosition() { return m_position; }
|
||||
CFormation* GetBase() { return m_base; }
|
||||
CEntityList GetEntityList() const;
|
||||
CVector2D GetSlotPosition( size_t order ) const;
|
||||
CVector2D GetPosition() const
|
||||
{
|
||||
return m_position;
|
||||
}
|
||||
CFormation* GetBase()
|
||||
{
|
||||
return m_base;
|
||||
}
|
||||
void BaseToMovement();
|
||||
|
||||
void SelectAllUnits();
|
||||
void SelectAllUnits() const;
|
||||
|
||||
inline void SetDuplication( bool duplicate ) { m_duplication=duplicate; }
|
||||
inline bool IsDuplication() { return m_duplication; }
|
||||
inline void SetLock( bool lock ){ m_locked=lock; }
|
||||
inline bool IsLocked() { return m_locked; }
|
||||
inline bool IsValidOrder(size_t order) { return ( order < GetSlotCount() ); }
|
||||
inline void SetDuplication( bool duplicate )
|
||||
{
|
||||
m_duplication=duplicate;
|
||||
}
|
||||
inline bool IsDuplication() const
|
||||
{
|
||||
return m_duplication;
|
||||
}
|
||||
inline void SetLock( bool lock )
|
||||
{
|
||||
m_locked=lock;
|
||||
}
|
||||
inline bool IsLocked() const
|
||||
{
|
||||
return m_locked;
|
||||
}
|
||||
inline bool IsValidOrder(size_t order) const
|
||||
{
|
||||
return ( order < GetSlotCount() );
|
||||
}
|
||||
|
||||
private:
|
||||
size_t m_numEntities;
|
||||
|
@ -208,6 +208,7 @@ HEntity CEntityManager::Create(CEntityTemplate* base, CVector3D position, float
|
||||
pos = m_nextalloc;
|
||||
m_nextalloc++;
|
||||
|
||||
debug_assert(m_entities[pos].m_entity == 0);
|
||||
m_entities[pos].m_entity = new CEntity( base, position, orientation, actorSelections, building );
|
||||
if( m_collisionPatches)
|
||||
m_entities[pos].m_entity->UpdateCollisionPatch();
|
||||
|
@ -195,13 +195,15 @@ void CSimulation::Simulate()
|
||||
|
||||
void RandomizeLocations(const CEntityOrder& order, const std::vector<HEntity> &entities, bool isQueued)
|
||||
{
|
||||
std::vector<HEntity>::const_iterator it;
|
||||
float radius = 2.0f * sqrt( (float)entities.size() - 1 );
|
||||
|
||||
CSimulation* sim = g_Game->GetSimulation();
|
||||
|
||||
for (it = entities.begin(); it < entities.end(); it++)
|
||||
for (std::vector<HEntity>::const_iterator it = entities.begin(); it < entities.end(); it++)
|
||||
{
|
||||
if(!*it)
|
||||
continue;
|
||||
|
||||
float _x, _y;
|
||||
CEntityOrder randomizedOrder = order;
|
||||
|
||||
@ -229,13 +231,14 @@ void RandomizeLocations(const CEntityOrder& order, const std::vector<HEntity> &e
|
||||
|
||||
void FormationLocations(const CEntityOrder& order, const std::vector<HEntity> &entities, bool isQueued)
|
||||
{
|
||||
CVector2D upvec(0.0f, 1.0f);
|
||||
std::vector<HEntity>::const_iterator it = entities.begin();
|
||||
CEntityFormation* formation = (*it)->GetFormation();
|
||||
const CVector2D upvec(0.0f, 1.0f);
|
||||
const CEntityFormation* formation = entities.front()->GetFormation();
|
||||
|
||||
|
||||
for (; it != entities.end(); it++)
|
||||
for (std::vector<HEntity>::const_iterator it = entities.begin(); it != entities.end(); it++)
|
||||
{
|
||||
if(!*it)
|
||||
continue;
|
||||
|
||||
CEntityOrder orderCopy = order;
|
||||
CVector2D posDelta = orderCopy.m_target_location - formation->GetPosition();
|
||||
CVector2D formDelta = formation->GetSlotPosition( (*it)->m_formationSlot );
|
||||
@ -264,18 +267,15 @@ void FormationLocations(const CEntityOrder& order, const std::vector<HEntity> &e
|
||||
|
||||
void QueueOrder(const CEntityOrder& order, const std::vector<HEntity> &entities, bool isQueued)
|
||||
{
|
||||
std::vector<HEntity>::const_iterator it;
|
||||
|
||||
for (it = entities.begin(); it < entities.end(); it++)
|
||||
for (std::vector<HEntity>::const_iterator it = entities.begin(); it < entities.end(); it++)
|
||||
{
|
||||
if (*it)
|
||||
{
|
||||
if( !isQueued ) {
|
||||
(*it)->ClearOrders();
|
||||
}
|
||||
if (!*it)
|
||||
continue;
|
||||
|
||||
(*it)->PushOrder( order );
|
||||
}
|
||||
if( !isQueued )
|
||||
(*it)->ClearOrders();
|
||||
|
||||
(*it)->PushOrder( order );
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user