Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 27, 2008, 4:08:51 AM (16 years ago)
Author:
landauf
Message:

many changes, most important: BaseObject takes now a pointer to it's creator which is needed to build a level hierarchy (with different scenes)

Location:
code/branches/objecthierarchy/src/core
Files:
14 edited

Legend:

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

    r2010 r2019  
    4747        @brief Constructor: Registers the object in the BaseObject-list.
    4848    */
    49     BaseObject::BaseObject() : bInitialized_(false)
     49    BaseObject::BaseObject(BaseObject* creator) : bInitialized_(false)
    5050    {
    5151        RegisterRootObject(BaseObject);
     
    5555        this->bActive_ = true;
    5656        this->bVisible_ = true;
     57        this->oldGametype_ = 0;
    5758
    58         this->file_ = 0;
    59         this->namespace_ = 0;
     59        this->setCreator(creator);
     60        if (this->creator_)
     61        {
     62            this->setFile(this->creator_->getFile());
     63            this->setNamespace(this->creator_->getNamespace());
     64            this->setScene(this->creator_->getScene());
     65            this->setGametype(this->creator_->getGametype());
     66        }
     67        else
     68        {
     69            this->file_ = 0;
     70            this->namespace_ = 0;
     71            this->scene_ = 0;
     72            this->gametype_ = 0;
     73        }
    6074    }
    6175
     
    7993        XMLPortParam(BaseObject, "active", setActive, isActive, xmlelement, mode);
    8094
    81         XMLPortObjectTemplate(BaseObject, Template, "templates", addTemplate, getTemplate, xmlelement, mode, const std::string&);
     95        XMLPortObjectTemplate(BaseObject, Template, "templates", addTemplate, getTemplate, xmlelement, mode, Template*);
    8296    }
    8397
     
    91105            return this->file_->getFilename();
    92106        else
    93             return blankString;
     107            return BLANKSTRING;
    94108    }
    95109
  • code/branches/objecthierarchy/src/core/BaseObject.h

    r2010 r2019  
    4545namespace orxonox
    4646{
     47    class Scene;
     48    class Gametype;
     49
    4750    //! The BaseObject is the parent of all classes representing an instance in the game.
    4851    class _CoreExport BaseObject : virtual public OrxonoxClass
     
    5154
    5255        public:
    53             BaseObject();
     56            BaseObject(BaseObject* creator);
    5457            virtual ~BaseObject();
    5558            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     
    9699            inline Namespace* getNamespace() const { return this->namespace_; }
    97100
     101            inline void setCreator(BaseObject* creator) { this->creator_ = creator; }
     102            inline BaseObject* getCreator() const { return this->creator_; }
     103
     104            inline void setScene(Scene* scene) { this->scene_ = scene; }
     105            inline Scene* getScene() const { return this->scene_; }
     106
     107            inline void setGametype(Gametype* gametype) { this->oldGametype_ = this->gametype_; this->gametype_ = gametype; this->changedGametype(); }
     108            inline Gametype* getGametype() const { return this->gametype_; }
     109            inline Gametype* getOldGametype() const { return this->oldGametype_; }
     110            virtual inline void changedGametype() {}
     111
    98112            /** @brief Sets the indentation of the debug output in the Loader. @param indentation The indentation */
    99113            inline void setLoaderIndentation(const std::string& indentation) { this->loaderIndentation_ = indentation; }
     
    110124            Template* getTemplate(unsigned int index) const;
    111125
    112             bool bInitialized_;                         //!< True if the object was initialized (passed the object registration)
    113             const XMLFile* file_;                       //!< The XMLFile that loaded this object
    114             std::string loaderIndentation_;             //!< Indentation of the debug output in the Loader
    115             Namespace* namespace_;
     126            bool                bInitialized_;         //!< True if the object was initialized (passed the object registration)
     127            const XMLFile*      file_;                 //!< The XMLFile that loaded this object
     128            std::string         loaderIndentation_;    //!< Indentation of the debug output in the Loader
     129            Namespace*          namespace_;
     130            BaseObject*         creator_;
     131            Scene*              scene_;
     132            Gametype*           gametype_;
     133            Gametype*           oldGametype_;
    116134            std::set<Template*> templates_;
    117135    };
  • code/branches/objecthierarchy/src/core/ClassFactory.h

    r1940 r2019  
    5656        public:
    5757            static bool create(const std::string& name, bool bLoadable = true);
    58             BaseObject* fabricate();
     58            BaseObject* fabricate(BaseObject* creator);
    5959
    6060        private:
     
    6363            virtual ~ClassFactory() {}                      // Don't delete
    6464
    65             static T* createNewObject();
     65            static T* createNewObject(BaseObject* creator);
    6666    };
    6767
     
    8888    */
    8989    template <class T>
    90     BaseObject* ClassFactory<T>::fabricate()
     90    BaseObject* ClassFactory<T>::fabricate(BaseObject* creator)
    9191    {
    92         return ClassFactory<T>::createNewObject();
     92        return ClassFactory<T>::createNewObject(creator);
    9393    }
    9494
     
    9898    */
    9999    template <class T>
    100     T* ClassFactory<T>::createNewObject()
     100    T* ClassFactory<T>::createNewObject(BaseObject* creator)
    101101    {
    102         return new T;
     102        return new T(creator);
    103103    }
    104104}
  • code/branches/objecthierarchy/src/core/Factory.cc

    r1940 r2019  
    104104        {
    105105            // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards.
    106             BaseObject* temp = (*it).second->fabricate();
     106            BaseObject* temp = (*it).second->fabricate(0);
    107107            delete temp;
    108108        }
  • code/branches/objecthierarchy/src/core/Factory.h

    r1856 r2019  
    9393    {
    9494        public:
    95             virtual BaseObject* fabricate() = 0;
     95            virtual BaseObject* fabricate(BaseObject* creator) = 0;
    9696            virtual ~BaseFactory() {};
    9797    };
  • code/branches/objecthierarchy/src/core/Functor.h

    r1889 r2019  
    106106            inline const MultiType& getReturnvalue() const { return this->returnedValue_; }
    107107
    108             const std::string& getTypenameParam(unsigned int param) const { return (param < 5) ? this->typeParam_[param] : blankString; }
     108            const std::string& getTypenameParam(unsigned int param) const { return (param < 5) ? this->typeParam_[param] : BLANKSTRING; }
    109109            const std::string& getTypenameReturnvalue() const { return this->typeReturnvalue_; }
    110110
  • code/branches/objecthierarchy/src/core/Identifier.cc

    r1940 r2019  
    214214        @return The new object
    215215    */
    216     BaseObject* Identifier::fabricate()
     216    BaseObject* Identifier::fabricate(BaseObject* creator)
    217217    {
    218218        if (this->factory_)
    219219        {
    220             return this->factory_->fabricate(); // We have to return a BaseObject, because we don't know the exact type.
     220            return this->factory_->fabricate(creator); // We have to return a BaseObject, because we don't know the exact type.
    221221        }
    222222        else
  • code/branches/objecthierarchy/src/core/Identifier.h

    r1952 r2019  
    100100            inline void addFactory(BaseFactory* factory) { this->factory_ = factory; }
    101101
    102             BaseObject* fabricate();
     102            BaseObject* fabricate(BaseObject* creator);
    103103            bool isA(const Identifier* identifier) const;
    104104            bool isExactlyA(const Identifier* identifier) const;
     
    502502                @brief Overloading of the * operator: returns the assigned identifier.
    503503            */
    504             inline Identifier* operator*()
     504            inline Identifier* operator*() const
    505505            {
    506506                return this->identifier_;
     
    527527                @return The new object
    528528            */
    529             T* fabricate()
    530             {
    531                 BaseObject* newObject = this->identifier_->fabricate();
     529            T* fabricate(BaseObject* creator) const
     530            {
     531                BaseObject* newObject = this->identifier_->fabricate(creator);
    532532
    533533                // Check if the creation was successful
  • code/branches/objecthierarchy/src/core/Loader.cc

    r2010 r2019  
    144144
    145145            COUT(4) << "  creating root-namespace..." << std::endl;
    146             Namespace* rootNamespace = new Namespace();
     146            Namespace* rootNamespace = new Namespace(0);
    147147            rootNamespace->setLoaderIndentation("    ");
    148148            rootNamespace->setFile(file);
  • code/branches/objecthierarchy/src/core/Namespace.cc

    r1889 r2019  
    3737    CreateFactory(Namespace);
    3838
    39     Namespace::Namespace() :
     39    Namespace::Namespace(BaseObject* creator) : BaseObject(creator),
    4040      bAutogeneratedFileRootNamespace_(false),
    4141      bRoot_(false),
  • code/branches/objecthierarchy/src/core/Namespace.h

    r1841 r2019  
    4242    {
    4343        public:
    44             Namespace();
     44            Namespace(BaseObject* creator);
    4545            virtual ~Namespace();
    4646
  • code/branches/objecthierarchy/src/core/Template.cc

    r2013 r2019  
    3838    CreateFactory(Template);
    3939
    40     Template::Template() : xmlelement_("")
     40    Template::Template(BaseObject* creator) : BaseObject(creator), xmlelement_("")
    4141    {
    4242        RegisterObject(Template);
     
    5959        XMLPortParam(Template, "baseclass", setBaseclass, getBaseclass, xmlelement, mode);
    6060
    61         this->setXMLElement(*dynamic_cast<TiXmlElement*>(xmlelement.FirstChildElement(false)->GetTiXmlPointer()));
     61        Element* element = xmlelement.FirstChildElement(false);
     62        if (element)
     63        {
     64            TiXmlElement* tixmlelement = dynamic_cast<TiXmlElement*>(element->GetTiXmlPointer());
     65            if (tixmlelement)
     66                this->setXMLElement(*tixmlelement);
     67        }
    6268    }
    6369
  • code/branches/objecthierarchy/src/core/Template.h

    r1993 r2019  
    4242    {
    4343        public:
    44             Template();
     44            Template(BaseObject* creator);
    4545            virtual ~Template();
    4646
  • code/branches/objecthierarchy/src/core/XMLPort.h

    r2010 r2019  
    479479                                                COUT(4) << ((BaseObject*)object)->getLoaderIndentation() << "fabricating " << child->Value() << "..." << std::endl;
    480480
    481                                                 BaseObject* newObject = identifier->fabricate();
     481                                                BaseObject* newObject = identifier->fabricate((BaseObject*)object);
    482482                                                newObject->setLoaderIndentation(((BaseObject*)object)->getLoaderIndentation() + "  ");
    483                                                 newObject->setFile(((BaseObject*)object)->getFile());
    484                                                 newObject->setNamespace(((BaseObject*)object)->getNamespace());
     483//                                                newObject->setFile(((BaseObject*)object)->getFile());
     484//                                                newObject->setNamespace(((BaseObject*)object)->getNamespace());
    485485
    486486                                                if (this->bLoadBefore_)
     
    515515                                else
    516516                                {
    517                                     COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not a valid classname." << std::endl;
     517                                    if (this->sectionname_ != "")
     518                                    {
     519                                        COUT(2) << object->getLoaderIndentation() << "Warning: '" << child->Value() << "' is not a valid classname." << std::endl;
     520                                    }
     521                                    else
     522                                    {
     523                                        // It's probably just another subsection
     524                                    }
    518525                                }
    519526                            }
Note: See TracChangeset for help on using the changeset viewer.