Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ppspickups1/src/modules/pickup/PickupRepresentation.cc @ 6525

Last change on this file since 6525 was 6524, checked in by dafrick, 15 years ago

Merged pickup branch into trunk. Yay. Persisting bugs will be fixed, very soon.

File size: 5.9 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Damian 'Mozork' Frick
24 *   Co-authors:
25 *      ...
26 *
27*/
28
29#include "PickupRepresentation.h"
30
31#include "core/CoreIncludes.h"
32#include "graphics/Billboard.h"
33#include "util/StringUtils.h"
34#include "PickupManager.h"
35
36namespace orxonox
37{
38   
39    CreateFactory(PickupRepresentation);
40   
41    /**
42    @brief
43        Constructor. Registers the object and initializes its member variables.
44        This is primarily for use of the PickupManager in creating a default PickupRepresentation.
45    */
46    //TODO: Not this as creator!!!
47    PickupRepresentation::PickupRepresentation() : BaseObject(this)
48    {
49        this->spawnerRepresentation_ = NULL;
50       
51        RegisterObject(PickupRepresentation);
52       
53        this->initialize();
54    }
55   
56    /**
57    @brief
58        Default Constructor. Registers the object and initializes its member variables.
59    */
60    PickupRepresentation::PickupRepresentation(BaseObject* creator) : BaseObject(creator)
61    {
62        this->spawnerRepresentation_ = NULL;
63       
64        RegisterObject(PickupRepresentation);
65       
66        this->initialize();
67    }
68   
69    /**
70    @brief
71        Destructor.
72    */
73    PickupRepresentation::~PickupRepresentation()
74    {
75        if(this->spawnerRepresentation_ != NULL)
76            this->spawnerRepresentation_->destroy();
77    }
78   
79    /**
80    @brief
81        Initializes the member variables of this PickupRepresentation.
82    */
83    void PickupRepresentation::initialize(void)
84    {
85        this->description_ = "This is a pickup.";
86        this->name_ = "Pickup";
87        this->spawnerTemplate_ = "";
88        this->pickup_ = NULL;
89    }
90   
91    /**
92    @brief
93        Method for creating a PickupRepresentation object through XML.
94    */
95    void PickupRepresentation::XMLPort(Element& xmlelement, XMLPort::Mode mode)
96    {
97        SUPER(PickupRepresentation, XMLPort, xmlelement, mode);
98       
99        XMLPortParam(PickupRepresentation, "name", setName, getName, xmlelement, mode);
100        XMLPortParam(PickupRepresentation, "description", setDescription, getDescription, xmlelement, mode);
101        XMLPortParam(PickupRepresentation, "spawnerTemplate", setSpawnerTemplate, getSpawnerTemplate, xmlelement, mode);
102        XMLPortObject(PickupRepresentation, Pickupable, "pickup", setPickup, getPickup, xmlelement, mode);
103        XMLPortObject(PickupRepresentation, StaticEntity, "spawner-representation", setSpawnerRepresentation, getSpawnerRepresentationIndex, xmlelement, mode);
104       
105        PickupManager::getInstance().registerRepresentation(this->pickup_->getPickupIdentifier(), this); //!< Registers the PickupRepresentation with the PickupManager through the PickupIdentifier of the Pickupable it represents.
106       
107        if(this->spawnerRepresentation_ != NULL)
108            this->spawnerRepresentation_->setVisible(false);
109       
110        COUT(4) << "PickupRepresentation created: name: '" << this->name_ << "', description: '" << this->description_ << "', spawnerTemplate: '" << this->spawnerTemplate_ << "'." << std::endl;
111    }
112   
113    /**
114    @brief
115        Get a spawnerRepresentation for a specific PickupSpawner.
116    @param spawner
117        A pointer to the PickupSpawner.
118    @return
119        Returns a pointer to the StaticEntity.
120    */
121    StaticEntity* PickupRepresentation::getSpawnerRepresentation(PickupSpawner* spawner)
122    {
123        if(this->spawnerRepresentation_ == NULL)
124        {
125            COUT(4) << "PickupRepresentation: No spawner representation found." << std::endl;
126            if(this->spawnerTemplate_ == BLANKSTRING)
127            {
128                COUT(4) << "PickupRepresentation: Spawner template is empty." << std::endl;
129                //!< If neither spawnerRepresentation nor spawnerTemplate was specified
130                return this->getDefaultSpawnerRepresentation(spawner);
131            }
132            this->addTemplate(this->spawnerTemplate_);
133        }
134       
135        StaticEntity* representation = this->spawnerRepresentation_;
136        representation->setVisible(true);
137       
138        this->addTemplate(this->spawnerTemplate_);
139        this->spawnerRepresentation_->setVisible(false);
140       
141        return representation;
142    }
143   
144    /**
145    @brief
146        Get the default spawnerRepresentation for a specific PickupSpawner.
147        Helper method of internal use.
148    @param spawner
149        A pointer to the PickupSpawner.
150    @return
151        Returns a pointer to the StaticEntity.
152    */
153    //TODO: Think of more elegant solution.
154    StaticEntity* PickupRepresentation::getDefaultSpawnerRepresentation(PickupSpawner* spawner)
155    {
156        StaticEntity* representation = new StaticEntity(spawner);
157        Billboard* sphere = new Billboard(spawner);
158        sphere->setColour(ColourValue(0.95, 0.85, 0.27));
159        sphere->setMaterial("Sphere2");
160        sphere->setScale(0.1);
161        Billboard* icon = new Billboard(spawner);
162        icon->setColour(ColourValue(0.89, 0.79, 0.08));
163        icon->setMaterial("Asterix");
164        icon->setScale(0.5);
165        sphere->attach(icon);
166        representation->attach(sphere);
167        return representation;
168    }
169   
170}
Note: See TracBrowser for help on using the repository browser.