Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/output/src/orxonox/gametypes/UnderAttack.cc @ 8829

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

enhanced chat system. chat related code is now separated into network-side code (located in Host, Client, Server) and client-side code (located in ChatManager).
note that there are now two chat related listeners: NetworkChatListener, which is used to send chat from the network to ChatManager, and ChatListener, which is used to send online and offline chat from ChatManager to the actual chat interfaces (ChatOverlay, ChatInputHandler, …).
the "chat" console command now supports a second argument which is the clientID of the receiver. this allows private messages (or gameplay messages directed to only one specific player).

  • Property svn:eol-style set to native
File size: 5.7 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 *      Matthias Mock
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "UnderAttack.h"
30
31#include "util/Convert.h"
32#include "core/CoreIncludes.h"
33#include "core/ConfigValueIncludes.h"
34#include "chat/ChatManager.h"
35#include "worldentities/pawns/Destroyer.h"
36#include "infos/PlayerInfo.h"
37
38namespace orxonox
39{
40    CreateUnloadableFactory(UnderAttack);
41
42    UnderAttack::UnderAttack(BaseObject* creator) : TeamDeathmatch(creator)
43    {
44        RegisterObject(UnderAttack);
45        this->gameTime_ = 180;
46        this->teams_ = 2;
47        this->destroyer_ = 0;
48        this->destroyer_.setCallback(createFunctor(&UnderAttack::killedDestroyer, this));
49        this->gameEnded_ = false;
50
51        this->setHUDTemplate("UnderAttackHUD");
52
53        this->setConfigValues();
54        this->timesequence_ = static_cast<int>(this->gameTime_);
55    }
56
57    void UnderAttack::setConfigValues()
58    {
59        SetConfigValue(gameTime_, 180);
60    }
61
62    void UnderAttack::addDestroyer(Destroyer* destroyer)
63    {
64        this->destroyer_ = destroyer;
65    }
66
67
68    void UnderAttack::killedDestroyer()
69    {
70        this->end(); //end gametype
71        std::string message("Ship destroyed! Team 0 has won!");
72        ChatManager::message(message);
73        this->gameEnded_ = true;
74
75        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
76        {
77            if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
78                continue;
79
80            if (it->second == 0)
81                this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
82            else
83                this->gtinfo_->sendAnnounceMessage("You have lost the match!", it->first->getClientID());
84        }
85    }
86
87    bool UnderAttack::allowPawnHit(Pawn* victim, Pawn* originator)
88    {
89        if (victim == this->destroyer_)
90        {
91            if (originator && originator->getPlayer() && !gameEnded_)
92            {
93                if (this->getTeam(originator->getPlayer()) == 0)
94                    return true;
95                else
96                    return false;
97            }
98
99            return false;
100        }
101
102        return TeamDeathmatch::allowPawnHit(victim, originator);
103    }
104
105    bool UnderAttack::allowPawnDamage(Pawn* victim, Pawn* originator)
106    {
107        if (victim == this->destroyer_)
108        {
109            if (originator && originator->getPlayer() && !gameEnded_)
110            {
111                if (this->getTeam(originator->getPlayer()) == 0)
112                    return true;
113                else
114                    return false;
115            }
116
117            return false;
118        }
119
120        return TeamDeathmatch::allowPawnDamage(victim, originator);
121    }
122
123    bool UnderAttack::allowPawnDeath(Pawn* victim, Pawn* originator)
124    {
125        if (victim == this->destroyer_)
126        {
127            if (originator && originator->getPlayer() && !gameEnded_)
128            {
129                if (this->getTeam(originator->getPlayer()) == 0)
130                    return true;
131                else
132                    return false;
133            }
134
135            return false;
136        }
137
138        return TeamDeathmatch::allowPawnDeath(victim, originator);
139    }
140
141
142    void UnderAttack::tick(float dt)
143    {
144        SUPER(UnderAttack, tick, dt);
145
146        if (this->hasStarted() && !gameEnded_)
147        {
148            gameTime_ = gameTime_ - dt;
149            if (gameTime_<= 0)
150            {
151                this->gameEnded_ = true;
152                this->end();
153                std::string message("Time is up! Team 1 has won!");
154                ChatManager::message(message);
155
156                for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
157                {
158                    if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
159                        continue;
160
161                    if (it->second == 1)
162                        this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
163                    else
164                        this->gtinfo_->sendAnnounceMessage("You have lost the match!", it->first->getClientID());
165                }
166            }
167
168             //prints gametime
169            if ( gameTime_ <= timesequence_ && gameTime_ > 0)
170            {
171                const std::string& message = multi_cast<std::string>(timesequence_) + " seconds left!";
172/*
173                ChatManager::message(message);
174*/
175                this->gtinfo_->sendAnnounceMessage(message);
176
177                if (timesequence_ >= 30 && timesequence_ <= 60)
178                {
179                    timesequence_ = timesequence_ - 10;
180                }
181                else if (timesequence_ <= 30)
182                {
183                    timesequence_ = timesequence_ - 5;
184                }
185                else
186                {
187                    timesequence_ = timesequence_ - 30;
188                }
189            }
190        }
191    }
192}
Note: See TracBrowser for help on using the repository browser.