Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/pickup2012/src/modules/pickup/items/MetaPickup.cc @ 9119

Last change on this file since 9119 was 8858, checked in by landauf, 13 years ago

merged output branch back to trunk.

Changes:

  • you have to include util/Output.h instead of util/Debug.h
  • COUT(x) is now called orxout(level)
  • output levels are now defined by an enum instead of numbers. see util/Output.h for the definition
  • it's possible to use output contexts with orxout(level, context). see util/Output.h for some common contexts. you can define more contexts
  • you must use 'endl' at the end of an output message, '\n' does not flush the message

Output levels:

  • instead of COUT(0) use orxout()
  • instead of COUT(1) use orxout(user_error) or orxout(internal_error)
  • instead of COUT(2) use orxout(user_warning) or orxout(internal_warning)
  • instead of COUT(3) use orxout(user_status/user_info) or orxout(internal_status/internal_info)
  • instead of COUT(4) use orxout(verbose)
  • instead of COUT(5) use orxout(verbose_more)
  • instead of COUT(6) use orxout(verbose_ultra)

Guidelines:

  • user_* levels are for the user, visible in the console and the log-file
  • internal_* levels are for developers, visible in the log-file
  • verbose_* levels are for debugging, only visible if the context of the output is activated

Usage in C++:

  • orxout() << "message" << endl;
  • orxout(level) << "message" << endl;
  • orxout(level, context) << "message" << endl;

Usage in Lua:

  • orxout("message")
  • orxout(orxonox.level.levelname, "message")
  • orxout(orxonox.level.levelname, "context", "message")

Usage in Tcl (and in the in-game-console):

  • orxout levelname message
  • orxout_context levelname context message
  • shortcuts: log message, error message, warning message, status message, info message, debug message
  • Property svn:eol-style set to native
File size: 7.4 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/**
30    @file MetaPickup.cc
31    @brief Implementation of the MetaPickup class.
32*/
33
34#include "core/CoreIncludes.h"
35#include "core/XMLPort.h"
36
37#include "interfaces/PickupCarrier.h"
38#include "pickup/PickupIdentifier.h"
39#include "worldentities/pawns/Pawn.h"
40
41#include "MetaPickup.h"
42
43namespace orxonox {
44
45    CreateFactory(MetaPickup);
46
47    //! Setting the static variables to their values.
48    /*static*/ const std::string MetaPickup::metaTypeNone_s = "none";
49    /*static*/ const std::string MetaPickup::metaTypeUse_s = "use";
50    /*static*/ const std::string MetaPickup::metaTypeDrop_s = "drop";
51    /*static*/ const std::string MetaPickup::metaTypeDestroy_s = "destroy";
52    /*static*/ const std::string MetaPickup::metaTypeDestroyCarrier_s = "destroyCarrier";
53
54    /**
55    @brief
56        Constructor. Registers and initializes the object.
57    */
58    MetaPickup::MetaPickup(BaseObject* creator) : Pickup(creator)
59    {
60        RegisterObject(MetaPickup);
61
62        this->initialize();
63    }
64
65    /**
66    @brief
67        Destructor.
68    */
69    MetaPickup::~MetaPickup()
70    {
71
72    }
73
74    /**
75    @brief
76        Initializes the object.
77    */
78    void MetaPickup::initialize(void)
79    {
80        this->addTarget(ClassIdentifier<PickupCarrier>::getIdentifier());
81
82        this->setDurationTypeDirect(pickupDurationType::once);
83        this->metaType_ = pickupMetaType::none;
84    }
85
86    /**
87    @brief
88        Helper method to initialize the PickupIdentifier.
89    */
90    void MetaPickup::initializeIdentifier(void)
91    {
92        std::string val = this->getMetaType();
93        std::string type = "metaType";
94        this->pickupIdentifier_->addParameter(type, val);
95    }
96
97    /**
98    @brief
99        Method for creating a MetaPickup object through XML.
100    */
101    void MetaPickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode)
102    {
103        SUPER(MetaPickup, XMLPort, xmlelement, mode);
104
105        XMLPortParam(MetaPickup, "metaType", setMetaType, getMetaType, xmlelement, mode);
106
107        this->initializeIdentifier();
108    }
109
110    /**
111    @brief
112        Is called when the pickup has transited from used to unused or the other way around.
113        Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedUsed); to their changdeUsed method.
114    */
115    void MetaPickup::changedUsed(void)
116    {
117        SUPER(MetaPickup, changedUsed);
118
119        // If the MetaPickup transited to used, and the metaType is not none.
120        if(this->isUsed() && this->metaType_ != pickupMetaType::none)
121        {
122            PickupCarrier* carrier = this->getCarrier();
123            if(this->getMetaTypeDirect() != pickupMetaType::none && carrier != NULL)
124            {
125                // If the metaType is destroyCarrier, then the PickupCarrier is destroyed.
126                if(this->getMetaTypeDirect() == pickupMetaType::destroyCarrier)
127                {
128                    Pawn* pawn = orxonox_cast<Pawn*>(carrier);
129                    pawn->kill();
130                    return;
131                }
132                std::set<Pickupable*> pickups = carrier->getPickups();
133                // Iterate over all Pickupables of the PickupCarrier.
134                for(std::set<Pickupable*>::iterator it = pickups.begin(); it != pickups.end(); it++)
135                {
136                    Pickupable* pickup = (*it);
137                    if(pickup == NULL || pickup == this)
138                        continue;
139
140                    // If the metaType is use, then the Pickupable is set to used.
141                    if(this->getMetaTypeDirect() == pickupMetaType::use && !pickup->isUsed())
142                    {
143                        pickup->setUsed(true);
144                    }
145                    // If the metaType is drop, then the Pickupable is dropped.
146                    else if(this->getMetaTypeDirect() == pickupMetaType::drop)
147                    {
148                        pickup->drop();
149                    }
150                    // If the metaType is destroy, then the Pickupable is destroyed.
151                    else if(this->getMetaTypeDirect() == pickupMetaType::destroy)
152                    {
153                        pickup->Pickupable::destroy();
154                    }
155                }
156            }
157            this->Pickupable::destroy();
158        }
159    }
160
161    /**
162    @brief
163        Creates a duplicate of the input OrxonoxClass.
164    @param item
165        A pointer to the Orxonox class.
166    */
167    void MetaPickup::clone(OrxonoxClass*& item)
168    {
169        if(item == NULL)
170            item = new MetaPickup(this);
171
172        SUPER(MetaPickup, clone, item);
173
174        MetaPickup* pickup = dynamic_cast<MetaPickup*>(item);
175        pickup->setMetaTypeDirect(this->getMetaTypeDirect());
176
177        pickup->initializeIdentifier();
178    }
179
180    /**
181    @brief
182        Get the meta type of this MetaPickup.
183    @return
184        Returns a string with the meta type of the MetaPickup.
185    */
186    const std::string& MetaPickup::getMetaType(void) const
187    {
188        switch(this->getMetaTypeDirect())
189        {
190            case pickupMetaType::none:
191                return MetaPickup::metaTypeNone_s;
192            case pickupMetaType::use:
193                return MetaPickup::metaTypeUse_s;
194            case pickupMetaType::drop:
195                return MetaPickup::metaTypeDrop_s;
196            case pickupMetaType::destroy:
197                return MetaPickup::metaTypeDestroy_s;
198            case pickupMetaType::destroyCarrier:
199                return MetaPickup::metaTypeDestroyCarrier_s;
200            default:
201                return BLANKSTRING;
202        }
203    }
204
205    /**
206    @brief
207        Set the meta type of this MetaPickup.
208    @param type
209        A string with the type to be set.
210    */
211    void MetaPickup::setMetaType(const std::string& type)
212    {
213        if(type == MetaPickup::metaTypeNone_s)
214        {
215            this->setMetaTypeDirect(pickupMetaType::none);
216        }
217        else if(type == MetaPickup::metaTypeUse_s)
218        {
219            this->setMetaTypeDirect(pickupMetaType::use);
220        }
221        else if(type == MetaPickup::metaTypeDrop_s)
222        {
223            this->setMetaTypeDirect(pickupMetaType::drop);
224        }
225        else if(type == MetaPickup::metaTypeDestroy_s)
226        {
227            this->setMetaTypeDirect(pickupMetaType::destroy);
228        }
229        else if(type == MetaPickup::metaTypeDestroyCarrier_s)
230        {
231            this->setMetaTypeDirect(pickupMetaType::destroyCarrier);
232        }
233        else
234            orxout(internal_warning, context::pickups) << "Invalid metaType '" << type << "' in MetaPickup." << endl;
235    }
236
237}
Note: See TracBrowser for help on using the repository browser.