Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 23, 2009, 7:28:48 PM (16 years ago)
Author:
rgrieder
Message:

Add a new core-feature: orxonox_cast<T>()
The functions casts objects like dynamic_cast, but uses the identifier instead for MSVC (much faster) and is just a redirection to dynamic_cast for GCC.
Also replaced almost all dynamic_casts (of course only those related to the class hierarchy).

Location:
code/branches/core4/src/orxonox/objects
Files:
26 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core4/src/orxonox/objects/Level.cc

    r3196 r3223  
    121121std::cout << "Load Gametype: " << this->gametype_ << std::endl;
    122122
    123         Gametype* rootgametype = dynamic_cast<Gametype*>(identifier->fabricate(this));
     123        Gametype* rootgametype = orxonox_cast<Gametype>(identifier->fabricate(this));
    124124        this->setGametype(rootgametype);
    125125
  • code/branches/core4/src/orxonox/objects/Scene.cc

    r3196 r3223  
    326326        // get the WorldEntity pointers
    327327        WorldEntity* object0 = (WorldEntity*)colObj0->getUserPointer();
    328         assert(dynamic_cast<WorldEntity*>(object0));
     328        assert(orxonox_cast<WorldEntity>(object0));
    329329        WorldEntity* object1 = (WorldEntity*)colObj1->getUserPointer();
    330         assert(dynamic_cast<WorldEntity*>(object1));
     330        assert(orxonox_cast<WorldEntity>(object1));
    331331
    332332        // false means that bullet will assume we didn't modify the contact
  • code/branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc

    r3196 r3223  
    8585        // Parent can either be a WorldEntity or a CompoundCollisionShape. The reason is that the
    8686        // internal collision shape (which is compound) of a WE doesn't get synchronised.
    87         CompoundCollisionShape* parentCCS = dynamic_cast<CompoundCollisionShape*>(parent);
     87        CompoundCollisionShape* parentCCS = orxonox_cast<CompoundCollisionShape>(parent);
    8888        if (parentCCS)
    8989            parentCCS->attach(this);
    9090        else
    9191        {
    92             WorldEntity* parentWE = dynamic_cast<WorldEntity*>(parent);
     92            WorldEntity* parentWE = orxonox_cast<WorldEntity>(parent);
    9393            if (parentWE)
    9494                parentWE->attachCollisionShape(this);
     
    103103        this->parent_ = newParent;
    104104
    105         WorldEntityCollisionShape* parentWECCS = dynamic_cast<WorldEntityCollisionShape*>(newParent);
     105        WorldEntityCollisionShape* parentWECCS = orxonox_cast<WorldEntityCollisionShape>(newParent);
    106106        if (parentWECCS)
    107107            this->parentID_ = parentWECCS->getWorldEntityOwner()->getObjectID();
  • code/branches/core4/src/orxonox/objects/controllers/ArtificialController.cc

    r3196 r3223  
    181181        if (entity1->getXMLController())
    182182        {
    183             WaypointPatrolController* wpc = dynamic_cast<WaypointPatrolController*>(entity1->getXMLController());
     183            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController>(entity1->getXMLController());
    184184            if (wpc)
    185185                team1 = wpc->getTeam();
     
    187187        if (entity2->getXMLController())
    188188        {
    189             WaypointPatrolController* wpc = dynamic_cast<WaypointPatrolController*>(entity2->getXMLController());
     189            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController>(entity2->getXMLController());
    190190            if (wpc)
    191191                team2 = wpc->getTeam();
    192192        }
    193193
    194         TeamDeathmatch* tdm = dynamic_cast<TeamDeathmatch*>(gametype);
     194        TeamDeathmatch* tdm = orxonox_cast<TeamDeathmatch>(gametype);
    195195        if (tdm)
    196196        {
     
    203203
    204204        TeamBaseMatchBase* base = 0;
    205         base = dynamic_cast<TeamBaseMatchBase*>(entity1);
     205        base = orxonox_cast<TeamBaseMatchBase>(entity1);
    206206        if (base)
    207207        {
     
    219219            }
    220220        }
    221         base = dynamic_cast<TeamBaseMatchBase*>(entity2);
     221        base = orxonox_cast<TeamBaseMatchBase>(entity2);
    222222        if (base)
    223223        {
  • code/branches/core4/src/orxonox/objects/controllers/HumanController.cc

    r3196 r3223  
    161161        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
    162162        {
    163             Pawn* pawn = dynamic_cast<Pawn*>(HumanController::localController_s->controllableEntity_);
     163            Pawn* pawn = orxonox_cast<Pawn>(HumanController::localController_s->controllableEntity_);
    164164            if (pawn)
    165165                pawn->kill();
     
    196196    {
    197197        if (HumanController::localController_s)
    198             return dynamic_cast<Pawn*>(HumanController::localController_s->getControllableEntity());
     198            return orxonox_cast<Pawn>(HumanController::localController_s->getControllableEntity());
    199199        else
    200200            return NULL;
  • code/branches/core4/src/orxonox/objects/gametypes/Pong.cc

    r3196 r3223  
    144144        if (player && player->getController() && player->getController()->isA(Class(PongAI)))
    145145        {
    146             PongAI* ai = dynamic_cast<PongAI*>(player->getController());
     146            PongAI* ai = orxonox_cast<PongAI>(player->getController());
    147147            ai->setPongBall(this->ball_);
    148148        }
  • code/branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc

    r3196 r3223  
    5454    bool TeamBaseMatch::allowPawnDeath(Pawn* victim, Pawn* originator)
    5555    {
    56         TeamBaseMatchBase* base = dynamic_cast<TeamBaseMatchBase*>(victim);
     56        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase>(victim);
    5757        if (base)
    5858        {
     
    8787    bool TeamBaseMatch::allowPawnDamage(Pawn* victim, Pawn* originator)
    8888    {
    89         TeamBaseMatchBase* base = dynamic_cast<TeamBaseMatchBase*>(victim);
     89        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase>(victim);
    9090        if (base)
    9191        {
  • code/branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc

    r3196 r3223  
    126126            if ((*it)->isA(Class(TeamSpawnPoint)))
    127127            {
    128                 TeamSpawnPoint* tsp = dynamic_cast<TeamSpawnPoint*>(*it);
     128                TeamSpawnPoint* tsp = orxonox_cast<TeamSpawnPoint>(*it);
    129129                if (tsp && (int)tsp->getTeamNumber() != desiredTeamNr)
    130130                {
     
    171171                    if ((*it)->isA(Class(TeamColourable)))
    172172                    {
    173                         TeamColourable* tc = dynamic_cast<TeamColourable*>(*it);
     173                        TeamColourable* tc = orxonox_cast<TeamColourable>(*it);
    174174                        tc->setTeamColour(this->teamcolours_[it_player->second]);
    175175                    }
  • code/branches/core4/src/orxonox/objects/infos/PlayerInfo.cc

    r3196 r3223  
    186186        {
    187187            Synchronisable* temp = Synchronisable::getSynchronisable(this->controllableEntityID_);
    188             ControllableEntity* entity = dynamic_cast<ControllableEntity*>(temp);
     188            ControllableEntity* entity = orxonox_cast<ControllableEntity>(temp);
    189189            this->startControl(entity);
    190190        }
     
    199199        if (this->gtinfoID_ != OBJECTID_UNKNOWN)
    200200        {
    201             this->gtinfo_ = dynamic_cast<GametypeInfo*>(Synchronisable::getSynchronisable(this->gtinfoID_));
     201            this->gtinfo_ = orxonox_cast<GametypeInfo>(Synchronisable::getSynchronisable(this->gtinfoID_));
    202202
    203203            if (!this->gtinfo_)
  • code/branches/core4/src/orxonox/objects/items/Engine.cc

    r3196 r3223  
    138138            Synchronisable* object = Synchronisable::getSynchronisable(this->shipID_);
    139139            if (object)
    140                 this->addToSpaceShip(dynamic_cast<SpaceShip*>(object));
     140                this->addToSpaceShip(orxonox_cast<SpaceShip>(object));
    141141        }
    142142    }
  • code/branches/core4/src/orxonox/objects/pickup/PickupCollection.cc

    r3196 r3223  
    6666            Identifier* ident = Class(UsableItem);
    6767            if(this->currentUsable_ == NULL && item->isA(ident))
    68                 this->currentUsable_ = dynamic_cast<UsableItem*>(item);
     68                this->currentUsable_ = orxonox_cast<UsableItem>(item);
    6969
    7070            this->items_.insert( std::pair<std::string, BaseItem*> (item->getPickupIdentifier(), item) );
     
    336336        {
    337337            if ((*it).second->isA(ident))
    338                 ret.push_back(dynamic_cast<EquipmentItem*>((*it).second));
     338                ret.push_back(orxonox_cast<EquipmentItem>((*it).second));
    339339        }
    340340
     
    353353        {
    354354            if ((*it).second->isA(ident))
    355                 ret.push_back(dynamic_cast<PassiveItem*>((*it).second));
     355                ret.push_back(orxonox_cast<PassiveItem>((*it).second));
    356356        }
    357357
     
    370370        {
    371371            if ((*it).second->isA(ident))
    372                 ret.push_back(dynamic_cast<UsableItem*>((*it).second));
     372                ret.push_back(orxonox_cast<UsableItem>((*it).second));
    373373        }
    374374
  • code/branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc

    r3196 r3223  
    8686        //  = less delays while running
    8787        BaseObject* newObject = this->itemTemplate_->getBaseclassIdentifier()->fabricate(this);
    88         BaseItem* asItem = dynamic_cast<BaseItem*>(newObject);
     88        BaseItem* asItem = orxonox_cast<BaseItem>(newObject);
    8989        if (asItem)
    9090        {
     
    154154        {
    155155            BaseObject* newObject = this->itemTemplate_->getBaseclassIdentifier()->fabricate(this);
    156             BaseItem* asItem = dynamic_cast<BaseItem*>(newObject);
     156            BaseItem* asItem = orxonox_cast<BaseItem>(newObject);
    157157            if (asItem)
    158158            {
  • code/branches/core4/src/orxonox/objects/quest/QuestManager.cc

    r3196 r3223  
    239239            return NULL;
    240240        }
    241         player = dynamic_cast<PlayerInfo*>(obj);
     241        player = orxonox_cast<PlayerInfo>(obj);
    242242   
    243243        QuestContainer* root = NULL;
  • code/branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc

    r3196 r3223  
    126126                dmg = this->owner_->getPickups().processModifiers(ModifierType::Damage, dmg, false);
    127127
    128             Pawn* victim = dynamic_cast<Pawn*>(otherObject);
     128            Pawn* victim = orxonox_cast<Pawn>(otherObject);
    129129            if (victim)
    130130                victim->damage(dmg, this->owner_);
  • code/branches/core4/src/orxonox/objects/worldentities/Attacher.cc

    r3110 r3223  
    111111            return;
    112112
    113         WorldEntity* entity = dynamic_cast<WorldEntity*>(object);
     113        WorldEntity* entity = orxonox_cast<WorldEntity>(object);
    114114        if (entity && entity->getName() == this->targetname_)
    115115        {
  • code/branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc

    r3196 r3223  
    9999        Identifier* idDE1 = Class(MovableEntity);
    100100        BaseObject* oDE1 = idDE1->fabricate(this);
    101         this->debrisEntity1_ = dynamic_cast<MovableEntity*>(oDE1);
     101        this->debrisEntity1_ = orxonox_cast<MovableEntity>(oDE1);
    102102
    103103        Identifier* idDE2 = Class(MovableEntity);
    104104        BaseObject* oDE2 = idDE2->fabricate(this);
    105         this->debrisEntity2_ = dynamic_cast<MovableEntity*>(oDE2);
     105        this->debrisEntity2_ = orxonox_cast<MovableEntity>(oDE2);
    106106
    107107        Identifier* idDE3 = Class(MovableEntity);
    108108        BaseObject* oDE3 = idDE3 ->fabricate(this);
    109         this->debrisEntity3_ = dynamic_cast<MovableEntity*>(oDE3);
     109        this->debrisEntity3_ = orxonox_cast<MovableEntity>(oDE3);
    110110
    111111        Identifier* idDE4 = Class(MovableEntity);
    112112        BaseObject* oDE4 = idDE4->fabricate(this);
    113         this->debrisEntity4_ = dynamic_cast<MovableEntity*>(oDE4);
     113        this->debrisEntity4_ = orxonox_cast<MovableEntity>(oDE4);
    114114
    115115        Identifier* idD1 = Class(Model);
    116116        BaseObject* oD1 = idD1->fabricate(this);
    117         this->debris1_ = dynamic_cast<Model*>(oD1);
     117        this->debris1_ = orxonox_cast<Model>(oD1);
    118118
    119119        Identifier* idD2 = Class(Model);
    120120        BaseObject* oD2 = idD2->fabricate(this);
    121         this->debris2_ = dynamic_cast<Model*>(oD2);
     121        this->debris2_ = orxonox_cast<Model>(oD2);
    122122
    123123        Identifier* idD3 = Class(Model);
    124124        BaseObject* oD3 = idD3->fabricate(this);
    125         this->debris3_ = dynamic_cast<Model*>(oD3);
     125        this->debris3_ = orxonox_cast<Model>(oD3);
    126126
    127127        Identifier* idD4 = Class(Model);
    128128        BaseObject* oD4 = idD4->fabricate(this);
    129         this->debris4_ = dynamic_cast<Model*>(oD4);
     129        this->debris4_ = orxonox_cast<Model>(oD4);
    130130
    131131        Identifier* id6 = Class(StaticEntity);
    132132        BaseObject* object4 = id6->fabricate(this);
    133         this->explosion_ = dynamic_cast<StaticEntity*>(object4);
     133        this->explosion_ = orxonox_cast<StaticEntity>(object4);
    134134
    135135        this->debrisSmoke1_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/smoke7", this->LOD_);
     
    202202            Identifier* idf1 = Class(Model);
    203203            BaseObject* obj1 = idf1->fabricate(this);
    204             Model* part1 = dynamic_cast<Model*>(obj1);
     204            Model* part1 = orxonox_cast<Model>(obj1);
    205205
    206206
    207207            Identifier* idf2 = Class(Model);
    208208            BaseObject* obj2 = idf2->fabricate(this);
    209             Model* part2 = dynamic_cast<Model*>(obj2);
     209            Model* part2 = orxonox_cast<Model>(obj2);
    210210
    211211            Identifier* idf3 = Class(MovableEntity);
    212212            BaseObject* obj3 = idf3->fabricate(this);
    213             MovableEntity* partEntity1 = dynamic_cast<MovableEntity*>(obj3);
     213            MovableEntity* partEntity1 = orxonox_cast<MovableEntity>(obj3);
    214214
    215215            Identifier* idf4 = Class(MovableEntity);
    216216            BaseObject* obj4 = idf4->fabricate(this);
    217             MovableEntity* partEntity2 = dynamic_cast<MovableEntity*>(obj4);
     217            MovableEntity* partEntity2 = orxonox_cast<MovableEntity>(obj4);
    218218
    219219            partEntity1->setVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1))*rnd(10,100));
  • code/branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc

    r3196 r3223  
    267267        if (this->playerID_ != OBJECTID_UNKNOWN)
    268268        {
    269             this->player_ = dynamic_cast<PlayerInfo*>(Synchronisable::getSynchronisable(this->playerID_));
     269            this->player_ = orxonox_cast<PlayerInfo>(Synchronisable::getSynchronisable(this->playerID_));
    270270            if (this->player_ && (this->player_->getControllableEntity() != this))
    271271                this->player_->startControl(this);
  • code/branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc

    r3196 r3223  
    7676        if (GameMode::isMaster() && enableCollisionDamage_)
    7777        {
    78             Pawn* victim = dynamic_cast<Pawn*>(otherObject);
     78            Pawn* victim = orxonox_cast<Pawn>(otherObject);
    7979            if (victim)
    8080            {
  • code/branches/core4/src/orxonox/objects/worldentities/PongBall.cc

    r3196 r3223  
    231231            this->bat_ = new PongBat*[2];
    232232        if (this->batID_[0] != OBJECTID_UNKNOWN)
    233             this->bat_[0] = dynamic_cast<PongBat*>(Synchronisable::getSynchronisable(this->batID_[0]));
     233            this->bat_[0] = orxonox_cast<PongBat>(Synchronisable::getSynchronisable(this->batID_[0]));
    234234        if (this->batID_[1] != OBJECTID_UNKNOWN)
    235             this->bat_[1] = dynamic_cast<PongBat*>(Synchronisable::getSynchronisable(this->batID_[1]));
     235            this->bat_[1] = orxonox_cast<PongBat>(Synchronisable::getSynchronisable(this->batID_[1]));
    236236    }
    237237}
  • code/branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc

    r3110 r3223  
    7373        if (this->getGametype() && this->getGametype()->isA(Class(Pong)))
    7474        {
    75             Pong* pong_gametype = dynamic_cast<Pong*>(this->getGametype());
     75            Pong* pong_gametype = orxonox_cast<Pong>(this->getGametype());
    7676            pong_gametype->setCenterpoint(this);
    7777        }
  • code/branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc

    r3196 r3223  
    210210        if (this->parentID_ != OBJECTID_UNKNOWN)
    211211        {
    212             WorldEntity* parent = dynamic_cast<WorldEntity*>(Synchronisable::getSynchronisable(this->parentID_));
     212            WorldEntity* parent = orxonox_cast<WorldEntity>(Synchronisable::getSynchronisable(this->parentID_));
    213213            if (parent)
    214214                this->attachToParent(parent);
  • code/branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc

    r3110 r3223  
    4040        RegisterObject(Destroyer);
    4141
    42         UnderAttack* gametype = dynamic_cast<UnderAttack*>(this->getGametype());
     42        UnderAttack* gametype = orxonox_cast<UnderAttack>(this->getGametype());
    4343        if (gametype)
    4444        {
  • code/branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc

    r3196 r3223  
    198198                {
    199199                    BaseObject* object = identifier->fabricate(this);
    200                     this->engine_ = dynamic_cast<Engine*>(object);
     200                    this->engine_ = orxonox_cast<Engine>(object);
    201201
    202202                    if (this->engine_)
  • code/branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc

    r3196 r3223  
    4545        this->state_ = BaseState::uncontrolled;
    4646
    47         TeamBaseMatch* gametype = dynamic_cast<TeamBaseMatch*>(this->getGametype());
     47        TeamBaseMatch* gametype = orxonox_cast<TeamBaseMatch>(this->getGametype());
    4848        if (gametype)
    4949        {
     
    5858        this->fireEvent();
    5959
    60         TeamDeathmatch* gametype = dynamic_cast<TeamDeathmatch*>(this->getGametype());
     60        TeamDeathmatch* gametype = orxonox_cast<TeamDeathmatch>(this->getGametype());
    6161        if (!gametype)
    6262            return;
     
    8484            if ((*it)->isA(Class(TeamColourable)))
    8585            {
    86                 TeamColourable* tc = dynamic_cast<TeamColourable*>(*it);
     86                TeamColourable* tc = orxonox_cast<TeamColourable>(*it);
    8787                tc->setTeamColour(colour);
    8888            }
  • code/branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc

    r3196 r3223  
    8585        DistanceTrigger::triggered(bIsTriggered);
    8686
    87         Asteroids* gametype = dynamic_cast<Asteroids*>(this->getGametype());
     87        Asteroids* gametype = orxonox_cast<Asteroids>(this->getGametype());
    8888        if (gametype)
    8989        {
  • code/branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc

    r3196 r3223  
    120120    for (ClassTreeMaskObjectIterator it = this->targetMask_.begin(); it != this->targetMask_.end(); ++it)
    121121    {
    122       WorldEntity* entity = dynamic_cast<WorldEntity*>(*it);
     122      WorldEntity* entity = orxonox_cast<WorldEntity>(*it);
    123123      if (!entity)
    124124        continue;
     
    131131        if(this->isForPlayer())
    132132        {
    133           Pawn* player = dynamic_cast<Pawn*>(entity);
     133          Pawn* player = orxonox_cast<Pawn>(entity);
    134134          this->setTriggeringPlayer(player);
    135135        }
Note: See TracChangeset for help on using the changeset viewer.