Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 12, 2008, 2:00:15 AM (16 years ago)
Author:
landauf
Message:

Again some heavy changes in ObjectList and Iterator:
there are now two types of iterators:

Iterator<ClassName> can iterate through any objectlist, either given by ObjectList<AnyClassName>::begin() or anyidentifier→getObjects()→begin(). Important note Iterator<ClassName> uses dynamic_cast.
And yes, it's possible to do this: Iterator<WorldEntity> it = ObjectList<SpaceShip>::begin()

ObjectList<ClassName>::iterator is the second iterator - it uses the ObjectList in a templated manner and therefore doesn't need dynamic_cast. But the only thing you can do is iterating through exactly the right ObjectList: ObjectList<ClassName>::iterator it = ObjectList<ClassName>::begin(). Anything else fails.

Those changes bring, at my system, something around +12% FPS compared with trunk and +25% FPS compared with the last revision of core3. Although I have to admit the FPS gain is only that high because iterating through objects is the main thing we're doing ingame right now. It would look totally different with physics, sound, AI, scripts, triggers and so on.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core3/src/orxonox/Orxonox.cc

    r1586 r1591  
    5454// core
    5555#include "core/ConfigFileManager.h"
     56#include "core/Iterator.h"
    5657#include "core/ConsoleCommand.h"
    5758#include "core/Loader.h"
     
    7576#include "GraphicsEngine.h"
    7677#include "Settings.h"
     78
    7779
    7880// FIXME: is this really file scope?
     
    169171    Orxonox::getSingleton()->timefactor_ = factor;
    170172
    171     for (Iterator<ParticleInterface> it = ObjectList<ParticleInterface>::begin(); it; ++it)
     173    for (ObjectList<ParticleInterface>::iterator it = ObjectList<ParticleInterface>::begin(); it; ++it)
    172174        it->setSpeedFactor(it->getSpeedFactor() * change);
    173175  }
     
    462464      Core::tick((float)evt.timeSinceLastFrame);
    463465      // Call those objects that need the real time
    464       for (Iterator<TickableReal> it = ObjectList<TickableReal>::begin(); it; ++it)
     466      for (ObjectList<TickableReal>::iterator it = ObjectList<TickableReal>::begin(); it; ++it)
    465467        it->tick((float)evt.timeSinceLastFrame);
    466468      // Call the scene objects
    467       for (Iterator<Tickable> it = ObjectList<Tickable>::begin(); it; ++it)
     469      for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; ++it)
    468470        it->tick((float)evt.timeSinceLastFrame * this->timefactor_);
    469471      //AudioManager::tick();
Note: See TracChangeset for help on using the changeset viewer.