Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Aug 31, 2008, 4:32:31 AM (16 years ago)
Author:
landauf
Message:
  • packed all super-function-related code into a bunch of macros and commented the code.
  • added tick, XMLPort, changedActivity and changedVisibility as super-functions
Location:
code/branches/core3/src/orxonox/objects
Files:
16 edited

Legend:

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

    r1594 r1684  
    8989    void Ambient::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    9090    {
    91         BaseObject::XMLPort(xmlelement, mode);
     91//        BaseObject::XMLPort(xmlelement, mode);
     92        SUPER(Ambient, XMLPort, xmlelement, mode);
    9293
    9394        XMLPortParam(Ambient, "colourvalue", setAmbientLight, getAmbienetLight, xmlelement, mode);
  • code/branches/core3/src/orxonox/objects/BillboardProjectile.cc

    r1676 r1684  
    6767    void BillboardProjectile::changedVisibility()
    6868    {
    69         Projectile::changedVisibility();
     69//        Projectile::changedVisibility();
     70        SUPER(BillboardProjectile, changedVisibility);
    7071        this->billboard_.setVisible(this->isVisible());
    7172    }
  • code/branches/core3/src/orxonox/objects/BillboardProjectile.h

    r1676 r1684  
    3838namespace orxonox
    3939{
    40     class _OrxonoxExport BillboardProjectile : public Projectile
     40    class TESTTESTTEST1
     41    {
     42        public:
     43            TESTTESTTEST1() { this->setMyValue(10); }
     44
     45        private:
     46            void setMyValue(int value) { this->value1_ = value; }
     47
     48            int value1_;
     49            int value2_;
     50            Identifier* identifier_;
     51    };
     52
     53    class TESTTESTTEST2
     54    {
     55        public:
     56            TESTTESTTEST2() { this->setMyValue(10); }
     57
     58        private:
     59            void setMyValue(int value) { this->value1_ = value; }
     60
     61            int value1_;
     62            int value2_;
     63            double value3_;
     64            char value4_;
     65            bool value5_;
     66            Identifier* identifier1_;
     67            Identifier* identifier2_;
     68    };
     69
     70    class TESTTESTTEST3 : virtual public TESTTESTTEST1
     71    {
     72        public:
     73            TESTTESTTEST3() { this->setMyOtherValue(10); }
     74
     75        private:
     76            void setMyOtherValue(int value) { this->value3_ = value; }
     77
     78            int value3_;
     79            TESTTESTTEST2* test_;
     80    };
     81
     82    class _OrxonoxExport BillboardProjectile : public Projectile, public TESTTESTTEST3, public TESTTESTTEST2, virtual public TESTTESTTEST1
    4183    {
    4284        public:
  • code/branches/core3/src/orxonox/objects/Model.cc

    r1592 r1684  
    6666    void Model::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    6767    {
    68         WorldEntity::XMLPort(xmlelement, mode);
     68//        WorldEntity::XMLPort(xmlelement, mode);
     69        SUPER(Model, XMLPort, xmlelement, mode);
    6970
    7071        XMLPortParam(Model, "mesh", setMesh, getMesh, xmlelement, mode);
     
    7273        Model::create();
    7374    }
     75/*
     76    void Model::tick(float dt)
     77    {
     78        float i = dt * rnd(-100, 100);
     79        float j = dt * rnd(-100, 100);
     80        float k = dt * rnd(-100, 100);
    7481
     82//        WorldEntity::tick(dt);
     83        SUPER(Model, tick, dt);
     84
     85        this->setPosition(this->getPosition().x + i, this->getPosition().y + j, this->getPosition().z + k);
     86    }
     87*/
    7588    bool Model::create(){
    7689      if(!WorldEntity::create())
     
    94107    void Model::changedVisibility()
    95108    {
    96         WorldEntity::changedVisibility();
     109//        WorldEntity::changedVisibility();
     110        SUPER(Model, changedVisibility);
    97111        this->mesh_.setVisible(this->isVisible());
    98112    }
  • code/branches/core3/src/orxonox/objects/Model.h

    r1592 r1684  
    4444            virtual ~Model();
    4545            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     46//            virtual void tick(float dt);
    4647            virtual void changedVisibility();
    4748            inline void setMesh(const std::string& meshname)
  • code/branches/core3/src/orxonox/objects/ParticleProjectile.cc

    r1676 r1684  
    3333#include "core/CoreIncludes.h"
    3434#include "core/ConfigValueIncludes.h"
    35 //#include "util/FastDelegate.h"
    36 //using namespace fastdelegate;
    3735
    3836namespace orxonox
    3937{
    4038    CreateFactory(ParticleProjectile);
    41 
    42     struct FunctionPointerViewer
    43     {
    44         void* ptr1_;
    45         void* ptr2_;
    46 
    47         void view()
    48         {
    49             std::cout << ptr1_ << "." << ptr2_ << std::endl;
    50         }
    51     };
    52 
    53     union FunctionPointerViewer1
    54     {
    55         FunctionPointerViewer viewer_;
    56         void (Projectile::*function_) ();
    57     };
    58 
    59     union FunctionPointerViewer2
    60     {
    61         FunctionPointerViewer viewer_;
    62         void (BillboardProjectile::*function_) ();
    63     };
    64 
    65     union FunctionPointerViewer3
    66     {
    67         FunctionPointerViewer viewer_;
    68         void (ParticleProjectile::*function_) ();
    69     };
    7039
    7140    ParticleProjectile::ParticleProjectile(SpaceShip* owner) : BillboardProjectile(owner)
     
    8655
    8756        this->setConfigValues();
    88 /*
    89         FunctionPointerViewer1 fpw1;
    90         fpw1.function_ = &Projectile::testfunction;
    91         FunctionPointerViewer2 fpw2;
    92         fpw2.function_ = &BillboardProjectile::testfunction;
    93         FunctionPointerViewer3 fpw3;
    94         fpw3.function_ = &ParticleProjectile::testfunction;
    9557
    96         std::cout << sizeof(void (Projectile::*) ()) << std::endl;
    97         fpw1.viewer_.view();
    98         fpw2.viewer_.view();
    99         fpw3.viewer_.view();
    100 
    101         {
    102             std::cout << "1:" << std::endl;
    103             FastDelegate0<> delegate1(this, &ParticleProjectile::testfunction);
    104             delegate1();
    105             FastDelegate0<> delegate2((BillboardProjectile*)this, &BillboardProjectile::testfunction);
    106             delegate2();
    107             FastDelegate0<> delegate3(this, &Projectile::testfunction);
    108             delegate3();
    109         }
    110         {
    111             std::cout << "2:" << std::endl;
    112             BillboardProjectile temp;
    113 //            FastDelegate0<> delegate1(&temp, &ParticleProjectile::testfunction);
    114 //            delegate1();
    115             FastDelegate0<> delegate2(&temp, &BillboardProjectile::testfunction);
    116             delegate2();
    117             FastDelegate0<> delegate3(&temp, &Projectile::testfunction);
    118             delegate3();
    119         }
    120         std::cout << "done" << std::endl;
    121 
    122         std::cout << "0:" << std::endl;
    123         this->Projectile::testfunction();
    124         this->BillboardProjectile::testfunction();
    125         this->ParticleProjectile::testfunction();
    126         this->testfunction();
    127 
    128         std::cout << "1:" << std::endl;
    129         (this->*fpw1.function_)();
    130         std::cout << "2:" << std::endl;
    131         (this->*fpw2.function_)();
    132         std::cout << "3:" << std::endl;
    133         (this->*fpw3.function_)();
    134         std::cout << "done" << std::endl;
    135 */
    13658        std::cout << "c:\n";
    13759        SUPER(ParticleProjectile, testfunction);
     
    14163        this->testfunction();
    14264        std::cout << "f:\n";
    143 
    144 //        (*((ClassIdentifier<SuperDummy>*)this->getIdentifier())->superFunctionCaller_testfunction_)(this);
    14565    }
    14666
     
    15878    void ParticleProjectile::changedVisibility()
    15979    {
    160         BillboardProjectile::changedVisibility();
     80//        BillboardProjectile::changedVisibility();
     81        SUPER(ParticleProjectile, changedVisibility);
    16182        this->particles_->setEnabled(this->isVisible());
    16283    }
  • code/branches/core3/src/orxonox/objects/ParticleProjectile.h

    r1676 r1684  
    3838namespace orxonox
    3939{
    40     class _OrxonoxExport ParticleProjectile : public BillboardProjectile
     40    class TESTTESTTEST13
     41    {
     42        public:
     43            TESTTESTTEST13() { this->setMyValue(10); }
     44
     45        private:
     46            void setMyValue(int value) { this->value1_ = value; }
     47
     48            int value1_;
     49            int value2_;
     50            Identifier* identifier_;
     51    };
     52
     53    class TESTTESTTEST23
     54    {
     55        public:
     56            TESTTESTTEST23() { this->setMyValue(10); }
     57
     58        private:
     59            void setMyValue(int value) { this->value1_ = value; }
     60
     61            int value1_;
     62            int value2_;
     63            double value3_;
     64            char value4_;
     65            bool value5_;
     66            Identifier* identifier1_;
     67            Identifier* identifier2_;
     68    };
     69
     70    class TESTTESTTEST33 : virtual public TESTTESTTEST13
     71    {
     72        public:
     73            TESTTESTTEST33() { this->setMyOtherValue(10); }
     74
     75        private:
     76            void setMyOtherValue(int value) { this->value3_ = value; }
     77
     78            int value3_;
     79            TESTTESTTEST23* test_;
     80    };
     81
     82    class _OrxonoxExport ParticleProjectile : public TESTTESTTEST33, public BillboardProjectile, virtual public TESTTESTTEST13
    4183    {
    4284        public:
  • code/branches/core3/src/orxonox/objects/Projectile.cc

    r1676 r1684  
    8686    void Projectile::tick(float dt)
    8787    {
    88         WorldEntity::tick(dt);
     88//        WorldEntity::tick(dt);
     89        SUPER(Projectile, tick, dt);
    8990
    9091        if (!this->isActive())
  • code/branches/core3/src/orxonox/objects/Projectile.h

    r1683 r1684  
    3232#include "OrxonoxPrereqs.h"
    3333
     34#include "core/Super.h"
    3435#include "WorldEntity.h"
    3536#include "tools/Timer.h"
    36 #undef SUPER_INTRUSIVE
    37 #include "core/Super.h"
    3837
    3938namespace orxonox
    4039{
    41     class _OrxonoxExport Projectile : public WorldEntity
     40    class TESTTESTTEST12
     41    {
     42        public:
     43            TESTTESTTEST12() { this->setMyValue(10); }
     44
     45        private:
     46            void setMyValue(int value) { this->value1_ = value; }
     47
     48            int value1_;
     49            int value2_;
     50            Identifier* identifier_;
     51    };
     52
     53    class TESTTESTTEST22
     54    {
     55        public:
     56            TESTTESTTEST22() { this->setMyValue(10); }
     57
     58        private:
     59            void setMyValue(int value) { this->value1_ = value; }
     60
     61            int value1_;
     62            int value2_;
     63            double value3_;
     64            char value4_;
     65            bool value5_;
     66            Identifier* identifier1_;
     67            Identifier* identifier2_;
     68    };
     69
     70    class TESTTESTTEST32 : virtual public TESTTESTTEST12
     71    {
     72        public:
     73            TESTTESTTEST32() { this->setMyOtherValue(10); }
     74
     75        private:
     76            void setMyOtherValue(int value) { this->value3_ = value; }
     77
     78            int value3_;
     79            TESTTESTTEST22* test_;
     80    };
     81
     82    class _OrxonoxExport Projectile : public TESTTESTTEST22, public TESTTESTTEST32, virtual public TESTTESTTEST12, public WorldEntity
    4283    {
    4384        public:
     
    68109    };
    69110
    70     // Partially specialized template (templatehack is now specialized too)
    71     template <class T>
    72     struct SuperFunctionCondition<0, 0, T>
    73     {
    74         // Checks if class U isA baseclass and sets the functionpointer if the check returned true
    75         static void check()
    76         {
    77             std::cout << "check superfunction \"testfunction\" in " << ClassIdentifier<T>::getIdentifier()->getName() << std::endl;
    78 
    79             T* temp = 0;
    80             SuperFunctionCondition<0, 0, T>::apply(temp);
    81 
    82             std::cout << "done" << std::endl;
    83 
    84             // Calls the condition of the next super-function
    85             SuperFunctionCondition<0 + 1, 0, T>::check();
    86         }
    87 
    88         static void apply(void* temp)
    89         {
    90             std::cout << ClassIdentifier<T>::getIdentifier()->getName() << " is not a Projectile" << std::endl;
    91             // nop
    92         }
    93 
    94         static void apply(Projectile* temp)
    95         {
    96             std::cout << ClassIdentifier<T>::getIdentifier()->getName() << " is a Projectile" << std::endl;
    97             ClassIdentifier<T>* identifier = ClassIdentifier<T>::getIdentifier();
    98 
    99             // Iterate through all children and assign the caller
    100             for (std::set<const Identifier*>::iterator it = identifier->getDirectChildrenIntern().begin(); it != identifier->getDirectChildrenIntern().end(); ++it)
    101             {
    102                 if (!((ClassIdentifier<T>*)(*it))->superFunctionCaller_testfunction_)
    103                 {
    104                     std::cout << "adding functionpointer to " << ((ClassIdentifier<T>*)(*it))->getName() << std::endl;
    105                     ((ClassIdentifier<T>*)(*it))->superFunctionCaller_testfunction_ = new SuperFunctionClassCaller_testfunction<T>;
    106                 }
    107             }
    108         }
    109     };
     111    SUPER_FUNCTION(0, Projectile, testfunction, false);
    110112}
    111113
  • code/branches/core3/src/orxonox/objects/RotatingProjectile.cc

    r1610 r1684  
    8888
    8989        Projectile::tick(dt);
     90//        SUPER(RotatingProjectile, tick, dt);
    9091    }
    9192
    9293    void RotatingProjectile::changedVisibility()
    9394    {
    94         BillboardProjectile::changedVisibility();
     95//        BillboardProjectile::changedVisibility();
     96        SUPER(RotatingProjectile, changedVisibility);
    9597        this->rotatingBillboard1_.setVisible(this->isVisible());
    9698        this->rotatingBillboard2_.setVisible(this->isVisible());
  • code/branches/core3/src/orxonox/objects/Skybox.cc

    r1592 r1684  
    6767    void Skybox::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    6868    {
    69         BaseObject::XMLPort(xmlelement, mode);
     69//        BaseObject::XMLPort(xmlelement, mode);
     70        SUPER(Skybox, XMLPort, xmlelement, mode);
    7071
    7172        XMLPortParam(Skybox, "src", setSkyboxSrc, getSkyboxSrc, xmlelement, mode);
     
    8687    void Skybox::changedVisibility()
    8788    {
    88         BaseObject::changedVisibility();
     89//        BaseObject::changedVisibility();
     90        SUPER(Skybox, changedVisibility);
    8991        GraphicsEngine::getSingleton().getSceneManager()->setSkyBox(this->isVisible(), this->skyboxSrc_);
    9092    }
  • code/branches/core3/src/orxonox/objects/SpaceShip.cc

    r1594 r1684  
    259259    void SpaceShip::changedVisibility()
    260260    {
    261         Model::changedVisibility();
     261//        Model::changedVisibility();
     262        SUPER(SpaceShip, changedVisibility);
    262263
    263264        this->tt1_->setEnabled(this->isVisible());
     
    271272    void SpaceShip::changedActivity()
    272273    {
    273         Model::changedActivity();
     274//        Model::changedActivity();
     275        SUPER(SpaceShip, changedActivity);
    274276
    275277        this->tt1_->setEnabled(this->isVisible());
     
    345347    void SpaceShip::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    346348    {
    347         Model::XMLPort(xmlelement, mode);
     349//        Model::XMLPort(xmlelement, mode);
     350        SUPER(SpaceShip, XMLPort, xmlelement, mode);
    348351
    349352        XMLPortParam(SpaceShip, "camera", setCamera, getCamera, xmlelement, mode);
     
    482485
    483486
    484         WorldEntity::tick(dt);
     487//        WorldEntity::tick(dt);
     488        SUPER(SpaceShip, tick, dt);
    485489
    486490        this->roll(this->mouseXRotation_ * dt);
  • code/branches/core3/src/orxonox/objects/SpaceShipAI.cc

    r1594 r1684  
    7878    void SpaceShipAI::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    7979    {
    80         SpaceShip::XMLPort(xmlelement, mode);
     80//        SpaceShip::XMLPort(xmlelement, mode);
     81        SUPER(SpaceShipAI, XMLPort, xmlelement, mode);
    8182
    8283        this->actionTimer_.setTimer(ACTION_INTERVAL, true, this, createExecutor(createFunctor(&SpaceShipAI::action)));
     
    229230            this->doFire();
    230231
    231         SpaceShip::tick(dt);
     232//        SpaceShip::tick(dt);
     233        SUPER(SpaceShipAI, tick, dt);
    232234    }
    233235
  • code/branches/core3/src/orxonox/objects/SpaceShipAI.h

    r1552 r1684  
    4747
    4848            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     49            virtual void tick(float dt);
    4950            static void createEnemy(int num);
    5051            static void killEnemies(int num);
     
    5455
    5556        private:
    56             virtual void tick(float dt);
    5757            virtual ColourValue getProjectileColour() const;
    5858
  • code/branches/core3/src/orxonox/objects/Tickable.h

    r1535 r1684  
    4545
    4646#include "core/OrxonoxClass.h"
     47#include "core/Super.h"
    4748
    4849namespace orxonox
     
    6162            Tickable();
    6263    };
     64
     65    SUPER_FUNCTION(2, Tickable, tick, true);
    6366
    6467    //! The Tickable interface provides a tick(dt) function, that gets called every frame.
  • code/branches/core3/src/orxonox/objects/WorldEntity.cc

    r1611 r1684  
    110110    void WorldEntity::XMLPort(Element& xmlelement, XMLPort::Mode mode)
    111111    {
    112         BaseObject::XMLPort(xmlelement, mode);
     112//        BaseObject::XMLPort(xmlelement, mode);
     113        SUPER(WorldEntity, XMLPort, xmlelement, mode);
    113114
    114115        XMLPortParamExternTemplate(WorldEntity, Ogre::Node, this->node_, "position", setPosition, getPosition, xmlelement, mode, Ogre::Node, const Vector3&);
Note: See TracChangeset for help on using the changeset viewer.