Simplify code by using PtrVector instead of vector + manual delete

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@8688 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria
2011-05-24 00:04:43 +00:00
parent f83492ef3d
commit 8a00579b2a
2 changed files with 23 additions and 26 deletions

View File

@@ -34,10 +34,6 @@ TrackObjectManager::TrackObjectManager()
// ----------------------------------------------------------------------------
TrackObjectManager::~TrackObjectManager()
{
for(unsigned int i=0; i<m_all_objects.size(); i++)
{
delete m_all_objects[i];
}
} // ~TrackObjectManager
// ----------------------------------------------------------------------------
@@ -72,10 +68,10 @@ void TrackObjectManager::add(const XMLNode &xml_node)
*/
void TrackObjectManager::init()
{
std::vector<TrackObject*>::iterator i;
for(i=m_all_objects.begin(); i!=m_all_objects.end(); i++)
TrackObject* curr;
for_in (curr, m_all_objects)
{
(*i)->init();
curr->init();
}
} // reset
// ----------------------------------------------------------------------------
@@ -83,10 +79,10 @@ void TrackObjectManager::init()
*/
void TrackObjectManager::reset()
{
std::vector<TrackObject*>::iterator i;
for(i=m_all_objects.begin(); i!=m_all_objects.end(); i++)
TrackObject* curr;
for_in (curr, m_all_objects)
{
(*i)->reset();
curr->reset();
}
} // reset
@@ -98,12 +94,12 @@ void TrackObjectManager::reset()
* more. Otherwise this is NULL.
*/
void TrackObjectManager::handleExplosion(const Vec3 &pos, const PhysicalObject *mp) const
void TrackObjectManager::handleExplosion(const Vec3 &pos, const PhysicalObject *mp)
{
for(std::vector<TrackObject*>::const_iterator i=m_all_objects.begin();
i!=m_all_objects.end(); i++)
TrackObject* curr;
for_in (curr, m_all_objects)
{
(*i)->handleExplosion(pos, mp==(*i));
curr->handleExplosion(pos, mp == curr);
}
} // handleExplosion
@@ -112,10 +108,10 @@ void TrackObjectManager::update(float dt)
{
if ( UserConfigParams::m_graphical_effects )
{
for(std::vector<TrackObject*>::const_iterator i=m_all_objects.begin();
i!=m_all_objects.end(); i++)
TrackObject* curr;
for_in (curr, m_all_objects)
{
(*i)->update(dt);
curr->update(dt);
}
}
} // update
@@ -124,14 +120,14 @@ void TrackObjectManager::update(float dt)
void TrackObjectManager::enableFog(bool enable)
{
const unsigned int count = m_all_objects.size();
for(unsigned int i=0; i<count; i++)
TrackObject* curr;
for_in (curr, m_all_objects)
{
m_all_objects[i]->getNode()->setMaterialFlag(video::EMF_FOG_ENABLE, enable);
curr->getNode()->setMaterialFlag(video::EMF_FOG_ENABLE, enable);
if (m_all_objects[i]->getNode()->getType() == scene::ESNT_LOD_NODE)
if (curr->getNode()->getType() == scene::ESNT_LOD_NODE)
{
std::vector<scene::ISceneNode*>& nodes = ((LODNode*)m_all_objects[i]->getNode())->getAllNodes();
std::vector<scene::ISceneNode*>& nodes = ((LODNode*)curr->getNode())->getAllNodes();
for (unsigned int n=0; n<nodes.size(); n++)
{
nodes[n]->setMaterialFlag(video::EMF_FOG_ENABLE, enable);

View File

@@ -20,11 +20,11 @@
#ifndef HEADER_TRACK_OBJECT_MANAGER_HPP
#define HEADER_TRACK_OBJECT_MANAGER_HPP
#include <vector>
#include "tracks/track_object.hpp"
#include "utils/ptr_vector.hpp"
class PhysicalObject;
class Track;
class TrackObject;
class Vec3;
class XMLNode;
@@ -40,13 +40,14 @@ public:
* eye candy (to reduce work for physics), ...
*/
enum TrackObjectType {TO_PHYSICAL, TO_GRAPHICAL};
std::vector<TrackObject*> m_all_objects;
PtrVector<TrackObject> m_all_objects;
public:
TrackObjectManager();
~TrackObjectManager();
void add(const XMLNode &xml_node);
void update(float dt);
void handleExplosion(const Vec3 &pos, const PhysicalObject *mp) const;
void handleExplosion(const Vec3 &pos, const PhysicalObject *mp);
void reset();
void init();