Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/modules/questsystem/LocalQuest.cc @ 7538

Last change on this file since 7538 was 7456, checked in by dafrick, 14 years ago

Reviewing documentation fo Questsystem, moving documentation fully into doxygen.
Added some files to modules they belong to.

  • Property svn:eol-style set to native
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/**
30    @file LocalQuest.cc
31    @brief Implementation of the LocalQuest class.
32*/
33
34#include "LocalQuest.h"
35
36#include "core/CoreIncludes.h"
37#include "core/XMLPort.h"
38
39#include "QuestEffect.h"
40
41namespace orxonox
42{
43    CreateFactory(LocalQuest);
44
45    /**
46    @brief
47        Constructor. Registers and initializes the object.
48    */
49    LocalQuest::LocalQuest(BaseObject* creator) : Quest(creator)
50    {
51        RegisterObject(LocalQuest);
52    }
53
54    /**
55    @brief
56        Destructor.
57    */
58    LocalQuest::~LocalQuest()
59    {
60
61    }
62
63    /**
64    @brief
65        Method for creating a LocalQuest object through XML.
66    */
67    void LocalQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode)
68    {
69        SUPER(LocalQuest, XMLPort, xmlelement, mode);
70
71        COUT(4) << "New LocalQuest {" << this->getId() << "} created." << std::endl;
72    }
73
74    /**
75    @brief
76        Fails the Quest for a given player.
77        Invokes all the failEffects on the player.
78    @param player
79        The player.
80    @return
81        Returns true if the Quest could be failed, false if not.
82    */
83    bool LocalQuest::fail(PlayerInfo* player)
84    {
85        if(!this->isFailable(player)) // Checks whether the quest can be failed.
86        {
87            COUT(4) << "A non-failable quest was trying to be failed." << std::endl;
88            return false;
89        }
90
91        Quest::fail(player);
92
93        QuestEffect::invokeEffects(player, this->getFailEffectList()); // Invoke the failEffects.
94        return true;
95    }
96
97    /**
98    @brief
99        Completes the Quest for a given player.
100    Invokes all the complete QuestEffects on the player.
101    @param player
102        The player.
103    @return
104        Returns true if the Quest could be completed, false if not.
105    */
106    bool LocalQuest::complete(PlayerInfo* player)
107    {
108        if(!this->isCompletable(player)) // Checks whether the Quest can be completed.
109        {
110            COUT(4) << "A non-completable quest was trying to be completed." << std::endl;
111            return false;
112        }
113
114        Quest::complete(player);
115
116        QuestEffect::invokeEffects(player, this->getCompleteEffectList()); // Invoke the complete QuestEffects.
117        return true;
118    }
119
120    /**
121    @brief
122        Checks whether the Quest can be started.
123    @param player
124        The player for whom is to be checked.
125    @return
126        Returns true if the Quest can be started, false if not.
127    @throws
128        Throws an exception if isInactive(PlayerInfo*) throws one.
129    */
130    bool LocalQuest::isStartable(const PlayerInfo* player) const
131    {
132        if(!(this->getParentQuest() == NULL || this->getParentQuest()->isActive(player)))
133            return false;
134
135        return this->isInactive(player);
136    }
137
138    /**
139    @brief
140        Checks whether the Quest can be failed.
141    @param player
142        The player for whom is to be checked.
143    @return
144        Returns true if the Quest can be failed, false if not.
145    @throws
146        Throws an exception if isActive(PlayerInfo*) throws one.
147    */
148    bool LocalQuest::isFailable(const PlayerInfo* player) const
149    {
150        return this->isActive(player);
151    }
152
153    /**
154    @brief
155        Checks whether the Quest can be completed.
156    @param player
157        The player for whom is to be checked.
158    @return
159        Returns true if the Quest can be completed, false if not.
160    @throws
161        Throws an exception if isInactive(PlayerInfo*) throws one.
162    */
163    bool LocalQuest::isCompletable(const PlayerInfo* player) const
164    {
165        return this->isActive(player);
166    }
167
168    /**
169    @brief
170        Returns the status of the Quest for a specific player.
171    @param player
172        The player.
173    @return
174        Returns the status of the Quest for the input player.
175    @throws
176        Throws an Exception if player is NULL.
177    */
178    QuestStatus::Value LocalQuest::getStatus(const PlayerInfo* player) const
179    {
180        //TODO: Replace with assert.
181        if(player == NULL) // No player has no defined status.
182            ThrowException(Argument, "The input PlayerInfo* is NULL.");
183
184        std::map<const PlayerInfo*, QuestStatus::Value>::const_iterator it = this->playerStatus_.find(player);
185        if (it != this->playerStatus_.end()) // If there is a player in the map.
186            return it->second;
187
188        return QuestStatus::Inactive; // If the player is not yet in the map, that means the status of the quest form him is 'inactive'.
189    }
190
191    /**
192    @brief
193        Sets the status for a specific player.
194        But be careful wit this one, the status will just be set without checking for its validity. You have to know what you're doing. Really!
195    @param player
196        The player the status should be set for.
197    @param status
198        The status to be set.
199    @return
200        Returns false if player is NULL.
201    */
202    bool LocalQuest::setStatus(PlayerInfo* player, const QuestStatus::Value & status)
203    {
204        //TODO: Replace with assert.
205        if(player == NULL) // We can't set a status for no player.
206            return false;
207
208        this->playerStatus_[player] = status;
209        return true;
210    }
211
212}
Note: See TracBrowser for help on using the repository browser.