Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 2161


Ignore:
Timestamp:
Nov 9, 2008, 4:28:42 AM (15 years ago)
Author:
landauf
Message:
  • added more exceptions to handle problems while loading a level or single objects
  • dedicated server runs and clients may join, but there are still some heavy problems
Location:
code/branches/objecthierarchy/src
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy/src/core/Loader.cc

    r2019 r2161  
    3737#include "Namespace.h"
    3838#include "util/Debug.h"
     39#include "util/Exception.h"
    3940
    4041#include "tinyxml/ticpp.h"
     
    157158            return true;
    158159        }
    159         catch(ticpp::Exception& ex)
     160        catch (ticpp::Exception& ex)
     161        {
     162            COUT(1) << std::endl;
     163            COUT(1) << "An XML-error occurred in Loader.cc while loading " << file->getFilename() << ":" << std::endl;
     164            COUT(1) << ex.what() << std::endl;
     165            COUT(1) << "Loading aborted." << std::endl;
     166            return false;
     167        }
     168        catch (Exception& ex)
     169        {
     170            COUT(1) << std::endl;
     171            COUT(1) << "A loading-error occurred in Loader.cc while loading " << file->getFilename() << ":" << std::endl;
     172            COUT(1) << ex.what() << std::endl;
     173            COUT(1) << "Loading aborted." << std::endl;
     174            return false;
     175        }
     176        catch (std::exception& ex)
    160177        {
    161178            COUT(1) << std::endl;
    162179            COUT(1) << "An error occurred in Loader.cc while loading " << file->getFilename() << ":" << std::endl;
    163180            COUT(1) << ex.what() << std::endl;
     181            COUT(1) << "Loading aborted." << std::endl;
     182            return false;
     183        }
     184        catch (...)
     185        {
     186            COUT(1) << std::endl;
     187            COUT(1) << "An unknown error occurred in Loader.cc while loading " << file->getFilename() << ":" << std::endl;
    164188            COUT(1) << "Loading aborted." << std::endl;
    165189            return false;
  • code/branches/objecthierarchy/src/core/XMLPort.h

    r2114 r2161  
    4444
    4545#include "util/Debug.h"
     46#include "util/Exception.h"
    4647#include "util/MultiType.h"
    4748#include "tinyxml/ticpp.h"
     
    495496                                            if (this->identifierIsIncludedInLoaderMask(identifier))
    496497                                            {
    497                                                 COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;
    498 
    499                                                 BaseObject* newObject = identifier->fabricate((BaseObject*)object);
    500                                                 assert(newObject);
    501                                                 newObject->setLoaderIndentation(((BaseObject*)object)->getLoaderIndentation() + "  ");
    502 
    503                                                 O* castedObject = dynamic_cast<O*>(newObject);
    504                                                 assert(castedObject);
    505 
    506                                                 if (this->bLoadBefore_)
     498                                                try
    507499                                                {
    508                                                     newObject->XMLPort(*child, XMLPort::LoadObject);
    509                                                     COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     500                                                    COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;
     501
     502                                                    BaseObject* newObject = identifier->fabricate((BaseObject*)object);
     503                                                    assert(newObject);
     504                                                    newObject->setLoaderIndentation(((BaseObject*)object)->getLoaderIndentation() + "  ");
     505
     506                                                    O* castedObject = dynamic_cast<O*>(newObject);
     507                                                    assert(castedObject);
     508
     509                                                    if (this->bLoadBefore_)
     510                                                    {
     511                                                        newObject->XMLPort(*child, XMLPort::LoadObject);
     512                                                        COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (objectname " << newObject->getName() << ") to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     513                                                    }
     514                                                    else
     515                                                    {
     516                                                        COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     517                                                    }
     518
     519                                                    COUT(5) << ((BaseObject*)object)->getLoaderIndentation();
     520                                                    (*this->loadexecutor_)(object, castedObject);
     521
     522                                                    if (!this->bLoadBefore_)
     523                                                        newObject->XMLPort(*child, XMLPort::LoadObject);
     524
     525                                                    COUT(5) << ((BaseObject*)object)->getLoaderIndentation() << "...fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << std::endl;
    510526                                                }
    511                                                 else
     527                                                catch (AbortLoadingException& ex)
    512528                                                {
    513                                                     COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "assigning " << child->Value() << " (object not yet loaded) to " << this->identifier_->getName() << " (objectname " << ((BaseObject*)object)->getName() << ")" << std::endl;
     529                                                    COUT(1) << "An error occurred while loading object, abort loading..." << std::endl;
     530                                                    throw ex;
    514531                                                }
    515 
    516                                                 COUT(5) << ((BaseObject*)object)->getLoaderIndentation();
    517                                                 (*this->loadexecutor_)(object, castedObject);
    518 
    519                                                 if (!this->bLoadBefore_)
    520                                                     newObject->XMLPort(*child, XMLPort::LoadObject);
    521 
    522                                                 COUT(5) << ((BaseObject*)object)->getLoaderIndentation() << "...fabricated " << child->Value() << " (objectname " << newObject->getName() << ")." << std::endl;
     532                                                catch (std::exception& ex)
     533                                                {
     534                                                    COUT(1) << "An error occurred while loading object:" << std::endl;
     535                                                    COUT(1) << ex.what() << std::endl;
     536                                                }
     537                                                catch (...)
     538                                                {
     539                                                    COUT(1) << "An unknown error occurred while loading object." << std::endl;
     540                                                }
    523541                                            }
    524542                                        }
  • code/branches/objecthierarchy/src/orxonox/gamestates/GSDedicated.cc

    r2112 r2161  
    3232#include "core/CommandLine.h"
    3333#include "core/Core.h"
     34#include "core/Iterator.h"
    3435#include "network/Server.h"
     36#include "objects/Tickable.h"
    3537
    3638namespace orxonox
     
    7375        server_->tick(time.getDeltaTime());
    7476        this->tickChild(time);
     77
     78        /*** HACK *** HACK ***/
     79        // Call the Tickable objects
     80        for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; ++it)
     81            it->tick(time.getDeltaTime());
     82        /*** HACK *** HACK ***/
    7583    }
    7684}
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/Billboard.cc

    r2112 r2161  
    7575            {
    7676                this->billboard_.setBillboardSet(this->getScene()->getSceneManager(), this->material_, this->colour_, 1);
    77                 this->getNode()->attachObject(this->billboard_.getBillboardSet());
     77                if (this->billboard_.getBillboardSet())
     78                    this->getNode()->attachObject(this->billboard_.getBillboardSet());
    7879                this->billboard_.setVisible(this->isVisible());
    7980            }
     
    9091            {
    9192                this->billboard_.setBillboardSet(this->getScene()->getSceneManager(), this->material_, this->colour_, 1);
    92                 this->getNode()->attachObject(this->billboard_.getBillboardSet());
     93                if (this->billboard_.getBillboardSet())
     94                    this->getNode()->attachObject(this->billboard_.getBillboardSet());
    9395                this->billboard_.setVisible(this->isVisible());
    9496            }
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/Camera.cc

    r2073 r2161  
    3838#include <OgreViewport.h>
    3939
     40#include "util/Exception.h"
    4041#include "core/CoreIncludes.h"
    4142#include "core/ConfigValueIncludes.h"
     
    5152        RegisterObject(Camera);
    5253
    53         assert(this->getScene());
    54         assert(this->getScene()->getSceneManager());
     54        if (!this->getScene() || !this->getScene()->getSceneManager())
     55            throw AbortLoadingException("Can't create Camera, no scene or no scene manager given.");
    5556
    5657        this->camera_ = this->getScene()->getSceneManager()->createCamera(getUniqueNumberString());
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/ParticleEmitter.cc

    r2114 r2161  
    3737
    3838#include "tools/ParticleInterface.h"
     39#include "util/Exception.h"
    3940#include "core/CoreIncludes.h"
    4041#include "core/XMLPort.h"
     
    4950        RegisterObject(ParticleEmitter);
    5051
    51         assert(this->getScene());
    52         assert(this->getScene()->getSceneManager());
     52        if (!this->getScene() || !this->getScene()->getSceneManager())
     53            throw AbortLoadingException("Can't create Camera, no scene or no scene manager given.");
    5354
    5455        this->particles_ = 0;
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/WorldEntity.cc

    r2112 r2161  
    3636#include "core/XMLPort.h"
    3737#include "util/Convert.h"
     38#include "util/Exception.h"
    3839
    3940#include "objects/Scene.h"
     
    5253        RegisterObject(WorldEntity);
    5354
    54         assert(this->getScene());
    55         assert(this->getScene()->getRootSceneNode());
     55        if (!this->getScene() || !this->getScene()->getRootSceneNode())
     56            throw AbortLoadingException("Can't create WorldEntity, no scene or no root-scenenode given.");
    5657
    5758        this->node_ = this->getScene()->getRootSceneNode()->createChildSceneNode();
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/pawns/Spectator.cc

    r2155 r2161  
    6262        this->greetingFlare_ = new BillboardSet();
    6363        this->greetingFlare_->setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(1.0, 1.0, 0.8), Vector3(0, 20, 0), 1);
    64         this->getNode()->attachObject(this->greetingFlare_->getBillboardSet());
     64        if (this->greetingFlare_->getBillboardSet())
     65            this->getNode()->attachObject(this->greetingFlare_->getBillboardSet());
    6566        this->greetingFlare_->setVisible(false);
    6667        this->bGreetingFlareVisible_ = false;
     
    7677            if (this->greetingFlare_)
    7778            {
    78                 this->getNode()->detachObject(this->greetingFlare_->getBillboardSet());
     79                if (this->greetingFlare_->getBillboardSet())
     80                    this->getNode()->detachObject(this->greetingFlare_->getBillboardSet());
    7981                delete this->greetingFlare_;
    8082            }
  • code/branches/objecthierarchy/src/orxonox/objects/worldentities/triggers/Trigger.cc

    r2078 r2161  
    6969      this->debugBillboard_.setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(1.0, 0.0, 0.0), 1);
    7070      this->debugBillboard_.setVisible(false);
    71     }
    72 
    73     this->getNode()->attachObject(this->debugBillboard_.getBillboardSet());
     71
     72      if (this->debugBillboard_.getBillboardSet())
     73        this->getNode()->attachObject(this->debugBillboard_.getBillboardSet());
     74    }
     75
    7476    this->setObjectMode(0x0);
    7577  }
     
    310312  void Trigger::setBillboardColour(const ColourValue& colour)
    311313  {
    312     this->debugBillboard_.getBillboardSet()->getBillboard(0)->setColour(colour);
     314    this->debugBillboard_.setColour(colour);
    313315  }
    314316
  • code/branches/objecthierarchy/src/orxonox/overlays/OrxonoxOverlay.cc

    r2084 r2161  
    4040#include <OgrePanelOverlayElement.h>
    4141#include "util/Convert.h"
     42#include "util/Exception.h"
    4243#include "util/String.h"
     44#include "core/Core.h"
    4345#include "core/CoreIncludes.h"
    4446#include "core/XMLPort.h"
     
    5860    {
    5961        RegisterObject(OrxonoxOverlay);
     62
     63        if (!Core::showsGraphics())
     64            throw NoGraphicsException("Can't create OrxonoxOverlay, graphics engine not initialized");
    6065
    6166        // add this overlay to the static map of OrxonoxOverlays
  • code/branches/objecthierarchy/src/orxonox/tools/BillboardSet.cc

    r2044 r2161  
    3636#include <OgreBillboard.h>
    3737
     38#include "core/Core.h"
    3839#include "util/Convert.h"
    3940#include "util/String.h"
     
    7071        try
    7172        {
    72             this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + convertToString(BillboardSet::billboardSetCounter_s++), count);
    73             this->billboardSet_->createBillboard(position);
    74             this->billboardSet_->setMaterialName(file);
     73            if (Core::showsGraphics())
     74            {
     75                this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + convertToString(BillboardSet::billboardSetCounter_s++), count);
     76                this->billboardSet_->createBillboard(position);
     77                this->billboardSet_->setMaterialName(file);
     78            }
    7579        }
    7680        catch (...)
    7781        {
    7882            COUT(1) << "Error: Couln't load billboard \"" << file << "\"" << std::endl;
     83            this->billboardSet_ = 0;
    7984        }
    8085
     
    8994        try
    9095        {
    91             this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + convertToString(BillboardSet::billboardSetCounter_s++), count);
    92             this->billboardSet_->createBillboard(position, colour);
    93             this->billboardSet_->setMaterialName(file);
     96            if (Core::showsGraphics())
     97            {
     98                this->billboardSet_ = scenemanager->createBillboardSet("Billboard" + convertToString(BillboardSet::billboardSetCounter_s++), count);
     99                this->billboardSet_->createBillboard(position, colour);
     100                this->billboardSet_->setMaterialName(file);
     101            }
    94102        }
    95103        catch (...)
    96104        {
    97105            COUT(1) << "Error: Couln't load billboard \"" << file << "\"" << std::endl;
     106            this->billboardSet_ = 0;
    98107        }
    99108
     
    105114        if (this->billboardSet_ && this->scenemanager_)
    106115            this->scenemanager_->destroyBillboardSet(this->billboardSet_);
     116        this->billboardSet_ = 0;
    107117    }
    108118
  • code/branches/objecthierarchy/src/orxonox/tools/Mesh.cc

    r2023 r2161  
    7373            {
    7474                COUT(1) << "Error: Couln't load mesh \"" << meshsource << "\"" << std::endl;
     75                this->entity_ = 0;
    7576            }
    7677        }
  • code/branches/objecthierarchy/src/orxonox/tools/ParticleInterface.cc

    r2114 r2161  
    4141
    4242#include "GraphicsEngine.h"
     43#include "core/Core.h"
    4344#include "core/CoreIncludes.h"
    4445#include "util/Convert.h"
     
    5758        this->scenemanager_ = scenemanager;
    5859        this->sceneNode_ = 0;
     60        this->particleSystem_ = 0;
    5961
    6062        this->bEnabled_ = true;
     
    6264        this->bAllowedByLOD_ = true;
    6365
    64         this->particleSystem_ = this->scenemanager_->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
    65         this->particleSystem_->setSpeedFactor(1.0f);
    66         //this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor());
     66        if (Core::showsGraphics())
     67        {
     68            try
     69            {
     70                this->particleSystem_ = this->scenemanager_->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName);
     71                this->particleSystem_->setSpeedFactor(1.0f);
     72//                this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor());
     73            }
     74            catch (...)
     75            {
     76                COUT(1) << "Error: Couln't load particle system \"" << templateName << "\"" << std::endl;
     77                this->particleSystem_ = 0;
     78            }
     79        }
    6780
    6881        this->setDetailLevel((unsigned int)detaillevel);
     
    7184    ParticleInterface::~ParticleInterface()
    7285    {
    73         this->particleSystem_->removeAllEmitters();
    74         this->detachFromSceneNode();
    75         this->scenemanager_->destroyParticleSystem(particleSystem_);
     86        if (this->particleSystem_)
     87        {
     88            this->particleSystem_->removeAllEmitters();
     89            this->detachFromSceneNode();
     90            this->scenemanager_->destroyParticleSystem(this->particleSystem_);
     91        }
    7692    }
    7793
     
    8197            this->detachFromSceneNode();
    8298
    83         this->sceneNode_ = sceneNode;
    84         this->sceneNode_->attachObject(this->particleSystem_);
     99        if (this->particleSystem_)
     100        {
     101            this->sceneNode_ = sceneNode;
     102            this->sceneNode_->attachObject(this->particleSystem_);
     103        }
    85104    }
    86105
     
    89108        if (this->sceneNode_)
    90109        {
    91             this->sceneNode_->detachObject(this->particleSystem_);
     110            if (this->particleSystem_)
     111                this->sceneNode_->detachObject(this->particleSystem_);
    92112            this->sceneNode_ = 0;
    93113        }
     
    96116    Ogre::ParticleEmitter* ParticleInterface::createNewEmitter()
    97117    {
    98         if (this->particleSystem_->getNumEmitters() > 0)
     118        if (this->particleSystem_ && this->particleSystem_->getNumEmitters() > 0)
    99119        {
    100120            Ogre::ParticleEmitter* newemitter = this->particleSystem_->addEmitter(this->particleSystem_->getEmitter(0)->getType());
     
    107127    Ogre::ParticleEmitter* ParticleInterface::getEmitter(unsigned int emitterNr) const
    108128    {
    109         if (emitterNr < this->particleSystem_->getNumEmitters())
     129        if (this->particleSystem_ && (emitterNr < this->particleSystem_->getNumEmitters()))
    110130            return this->particleSystem_->getEmitter(emitterNr);
    111131        else
     
    114134    void ParticleInterface::removeEmitter(unsigned int emitterNr)
    115135    {
    116         if (emitterNr < this->particleSystem_->getNumEmitters())
     136        if (this->particleSystem_ && (emitterNr < this->particleSystem_->getNumEmitters()))
    117137            this->particleSystem_->removeEmitter(emitterNr);
    118138    }
    119139    void ParticleInterface::removeAllEmitters()
    120140    {
    121         this->particleSystem_->removeAllEmitters();
     141        if (this->particleSystem_)
     142            this->particleSystem_->removeAllEmitters();
    122143    }
    123144    unsigned int ParticleInterface::getNumEmitters() const
    124145    {
    125         return this->particleSystem_->getNumEmitters();
     146        if (this->particleSystem_)
     147            return this->particleSystem_->getNumEmitters();
     148        else
     149            return 0;
    126150    }
    127151
    128152    Ogre::ParticleAffector* ParticleInterface::addAffector(const std::string& name)
    129153    {
    130         return this->particleSystem_->addAffector(name);
     154        if (this->particleSystem_)
     155            return this->particleSystem_->addAffector(name);
     156        else
     157            return 0;
    131158    }
    132159    Ogre::ParticleAffector* ParticleInterface::getAffector(unsigned int affectorNr) const
    133160    {
    134         if (affectorNr < this->particleSystem_->getNumAffectors())
     161        if (this->particleSystem_ && (affectorNr < this->particleSystem_->getNumAffectors()))
    135162            return this->particleSystem_->getAffector(affectorNr);
    136163        else
     
    139166    void ParticleInterface::removeAffector(unsigned int affectorNr)
    140167    {
    141         if (affectorNr < this->particleSystem_->getNumAffectors())
     168        if (this->particleSystem_ && (affectorNr < this->particleSystem_->getNumAffectors()))
    142169            this->particleSystem_->removeAffector(affectorNr);
    143170    }
    144171    void ParticleInterface::removeAllAffectors()
    145172    {
    146         this->particleSystem_->removeAllAffectors();
     173        if (this->particleSystem_)
     174            this->particleSystem_->removeAllAffectors();
    147175    }
    148176    unsigned int ParticleInterface::getNumAffectors() const
    149177    {
    150         return this->particleSystem_->getNumAffectors();
     178        if (this->particleSystem_)
     179            return this->particleSystem_->getNumAffectors();
     180        else
     181            return 0;
    151182    }
    152183
     
    155186        this->bEnabled_ = enable;
    156187
    157         for (unsigned int i = 0; i < this->particleSystem_->getNumEmitters(); i++)
    158             this->particleSystem_->getEmitter(i)->setEnabled(this->bEnabled_ && this->bAllowedByLOD_);
     188        if (this->particleSystem_)
     189            for (unsigned int i = 0; i < this->particleSystem_->getNumEmitters(); i++)
     190                this->particleSystem_->getEmitter(i)->setEnabled(this->bEnabled_ && this->bAllowedByLOD_);
    159191    }
    160192
     
    163195        this->bVisible_ = visible;
    164196
    165         this->particleSystem_->setVisible(this->bVisible_ && this->bAllowedByLOD_);
     197        if (this->particleSystem_)
     198            this->particleSystem_->setVisible(this->bVisible_ && this->bAllowedByLOD_);
    166199    }
    167200
     
    169202    {
    170203        this->detaillevel_ = level;
    171         this->detailLevelChanged(GraphicsEngine::getInstance().getDetailLevelParticle());
     204        if (GraphicsEngine::getInstancePtr())
     205            this->detailLevelChanged(GraphicsEngine::getInstance().getDetailLevelParticle());
    172206    }
    173207
     
    190224    void ParticleInterface::setSpeedFactor(float factor)
    191225    {
    192         //this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor() * factor);
    193         this->particleSystem_->setSpeedFactor(1.0f * factor);
     226        if (this->particleSystem_)
     227        {
     228//            this->particleSystem_->setSpeedFactor(Orxonox::getInstance().getTimeFactor() * factor);
     229            this->particleSystem_->setSpeedFactor(1.0f * factor);
     230        }
    194231    }
    195232    float ParticleInterface::getSpeedFactor() const
    196233    {
    197         //return (this->particleSystem_->getSpeedFactor() / Orxonox::getInstance().getTimeFactor());
    198         return (this->particleSystem_->getSpeedFactor() / 1.0f);
     234        if (this->particleSystem_)
     235        {
     236//            return (this->particleSystem_->getSpeedFactor() / Orxonox::getInstance().getTimeFactor());
     237            return (this->particleSystem_->getSpeedFactor() / 1.0f);
     238        }
     239        else
     240            return 1.0f;
    199241    }
    200242
    201243    bool ParticleInterface::getKeepParticlesInLocalSpace() const
    202244    {
    203         return this->particleSystem_->getKeepParticlesInLocalSpace();
     245        if (this->particleSystem_)
     246            return this->particleSystem_->getKeepParticlesInLocalSpace();
     247        else
     248            return false;
    204249    }
    205250    void ParticleInterface::setKeepParticlesInLocalSpace(bool keep)
    206251    {
    207         this->particleSystem_->setKeepParticlesInLocalSpace(keep);
     252        if (this->particleSystem_)
     253            this->particleSystem_->setKeepParticlesInLocalSpace(keep);
    208254    }
    209255}
  • code/branches/objecthierarchy/src/util/Exception.h

    r2111 r2161  
    6363            InitialisationFailed,
    6464            NotImplemented,
    65             GameState
     65            GameState,
     66            NoGraphics,
     67            AbortLoading
    6668        };
    6769
     
    127129            RETURN_EXCEPTION_CODE(NotImplemented);
    128130            RETURN_EXCEPTION_CODE(GameState);
     131            RETURN_EXCEPTION_CODE(NoGraphics);
     132            RETURN_EXCEPTION_CODE(AbortLoading);
    129133            default:
    130134                return "";
     
    141145    CREATE_ORXONOX_EXCEPTION(NotImplemented);
    142146    CREATE_ORXONOX_EXCEPTION(GameState);
     147    CREATE_ORXONOX_EXCEPTION(NoGraphics);
     148    CREATE_ORXONOX_EXCEPTION(AbortLoading);
    143149}
    144150
Note: See TracChangeset for help on using the changeset viewer.