Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/TixyTaxyTorxy_HS18/src/modules/TixyTaxyTorxy/TixyTaxyTorxyField.cc @ 12064

Last change on this file since 12064 was 12064, checked in by sastocke, 6 years ago

second initial setup

File size: 9.2 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 *      ...
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @file TixyTaxyTorxy
31TixyTaxyTorxyField.cc
32    @brief Implementation of the TixyTaxyTorxy
33TixyTaxyTorxyField class.
34*/
35
36#include "TixyTaxyTorxyField.h"
37#include "core/CoreIncludes.h"
38#include "core/XMLPort.h"
39#include "TixyTaxyTorxy.h"
40
41namespace orxonox
42{
43    RegisterClass(TixyTaxyTorxyField);
44
45    /**
46    @brief
47        Constructor. Registers and initializes the object and checks whether the gametype is actually TixyTaxyTorxy
48TixyTaxyTorxy.
49    */
50TixyTaxyTorxyField::TixyTaxyTorxyField(Context* context) : MovableEntity(context)
51    {
52        RegisterObject(TixyTaxyTorxyField);
53
54        tower_ = nullptr;
55        type_ = TixyTaxyTorxyFieldType::FREE;
56        center_ = nullptr;
57        upgrade_ = 0;
58        setPosition(0,0,0);                           
59        modelGround_ = new Model(getContext());
60        modelGround_->setScale(25);
61        modelGround_->pitch(Degree(90));
62        attach(modelGround_);
63        modelObject_ = new Model(getContext());
64        modelObject_->setScale(25);
65        modelObject_->pitch(Degree(90));
66        attach(modelObject_);
67        setAngle(0);
68    }
69
70    /**
71    @brief
72        Method to create a TixyTaxyTorxy
73TixyTaxyTorxyField through XML.
74    */
75    void TixyTaxyTorxyField::XMLPort(Element& xmlelement, XMLPort::Mode mode)
76    {
77        SUPER(TixyTaxyTorxyField, XMLPort, xmlelement, mode);
78
79        //XMLPortParam(TixyTaxyTorxyField, "width", setWidth, getWidth, xmlelement, mode);
80
81    }
82
83    void TixyTaxyTorxyField::setCenterpoint(TixyTaxyTorxyCenterpoint* center)
84    {
85        center_ = center;
86    }
87
88    void TixyTaxyTorxyField::upgrade()
89    {
90        if (canUpgrade() == true)
91        {
92            destroyTower();
93            createTower(getUpgrade() + 1);
94        }
95    }
96
97    int TixyTaxyTorxyField::getUpgrade()
98    {
99        return upgrade_;
100    }
101
102    TixyTaxyTorxyFieldType TixyTaxyTorxyField::getType()
103    {
104        return type_;
105    }
106
107    void TixyTaxyTorxyField::setUpgrade(int upgrade)
108    {
109        if (upgrade < 0)
110        {
111            upgrade_ = 0;
112        }   
113        else if (upgrade > 5)
114        {
115            upgrade = 5;
116        }
117        else
118        {
119            upgrade_ = upgrade;
120        }                           
121    }
122
123    bool TixyTaxyTorxyField::canUpgrade()
124    {
125        if (tower_ != nullptr && upgrade_ < 5)
126        {
127            return true;
128        }
129
130        return false;
131    }
132
133    void TixyTaxyTorxyField::setAngle(int newAngle)
134    {
135        if (modelGround_ != nullptr)
136        {
137            switch (newAngle)
138            {
139            case 0:
140                modelGround_->yaw(Degree(0));
141                angle_ = 0;
142                break;
143            case 1:
144                modelGround_->yaw(Degree(90));
145                angle_ = 1;
146                break;   
147            case 2:
148                modelGround_->yaw(Degree(180));
149                angle_ = 2;
150                break;   
151            case 3:
152                modelGround_->yaw(Degree(270));
153                angle_ = 3;
154                break;                                           
155            }
156        }
157
158        if (modelObject_ != nullptr)
159        {
160            switch (newAngle)
161            {
162            case 0:
163                modelObject_->yaw(Degree(0));
164                angle_ = 0;
165                break;
166            case 1:
167                modelObject_->yaw(Degree(90));
168                angle_ = 1;
169                break;   
170            case 2:
171                modelObject_->yaw(Degree(180));
172                angle_ = 2;
173                break;   
174            case 3:
175                modelObject_->yaw(Degree(270));
176                angle_ = 3;
177                break;                                           
178            }
179        }
180       
181    }
182
183    int TixyTaxyTorxyField::getAngle()
184    {
185        return angle_;
186    }
187
188    void TixyTaxyTorxyField::createFree(int orientation)
189    {           
190        modelGround_->setMeshSource("TD_F1.mesh");
191        tower_ = nullptr;
192        type_ = TixyTaxyTorxyFieldType::FREE;
193        setUpgrade(0);
194        setAngle(orientation);
195    }
196
197    void TixyTaxyTorxyField::createStart(int orientation)
198    {     
199        modelGround_->setMeshSource("TD_S5.mesh");
200        tower_ = nullptr;
201        type_ = TixyTaxyTorxyFieldType::START;
202        setUpgrade(0);
203        setAngle(orientation);   
204    }
205
206
207    void TixyTaxyTorxyField::createEnd(int orientation)
208    {     
209        modelGround_->setMeshSource("TD_S4.mesh");
210        tower_ = nullptr;
211        type_ = TixyTaxyTorxyFieldType::END;
212        setUpgrade(0);
213        setAngle(orientation);
214    }   
215
216    void TixyTaxyTorxyField::createStraight(int orientation)
217    {     
218        modelGround_->setMeshSource("TD_S1.mesh");
219        tower_ = nullptr;
220        type_ = TixyTaxyTorxyFieldType::STREET;
221        setUpgrade(0);
222        setAngle(orientation);
223    } 
224
225    void TixyTaxyTorxyField::createRCurve(int orientation)
226    {     
227        modelGround_->setMeshSource("TD_S2.mesh");
228        tower_ = nullptr;
229        type_ = TixyTaxyTorxyFieldType::STREET;
230        setUpgrade(0);
231        setAngle(orientation);
232    } 
233
234    void TixyTaxyTorxyField::createLCurve(int orientation)
235    {   
236        modelGround_->setMeshSource("TD_S3.mesh");
237        tower_ = nullptr;
238        type_ = TixyTaxyTorxyFieldType::STREET;
239        setUpgrade(0);
240        setAngle(orientation);
241    } 
242
243    void TixyTaxyTorxyField::createObstacle(int orientation)
244    {   
245        modelGround_->setMeshSource("TD_F1.mesh");
246        modelObject_->setMeshSource("TD_O1.mesh");
247        tower_ = nullptr;
248        type_ = TixyTaxyTorxyFieldType::OBSTACLE;
249        setUpgrade(0);
250        setAngle(orientation);
251    }
252
253    void TixyTaxyTorxyField::createTower(int upgrade)
254    {       
255        if (tower_ == nullptr)
256        {
257            modelGround_->setMeshSource("TD_F1.mesh");
258            tower_ = new TixyTaxyTorxyTower(center_->getContext());
259            attach(tower_);
260            type_ = TixyTaxyTorxyFieldType::TOWER;
261            setUpgrade(upgrade);
262            if (upgrade_ > 0 && modelObject_ != nullptr)
263            {
264                switch (upgrade_)
265                {
266                    case 1:
267                        modelObject_->setMeshSource("TD_T1.mesh");                   
268                        tower_->addTemplate(center_->getTower1Template());
269                        break;
270                    case 2:
271                        modelObject_->setMeshSource("TD_T2.mesh");
272                        tower_->addTemplate(center_->getTower2Template());
273                        break;
274                    case 3:
275                        modelObject_->setMeshSource("TD_T3.mesh");
276                        tower_->addTemplate(center_->getTower3Template());
277                        break;
278                    case 4:
279                        modelObject_->setMeshSource("TD_T4.mesh");
280                        tower_->addTemplate(center_->getTower4Template());
281                        break;
282                    case 5:
283                        modelObject_->setMeshSource("TD_T5.mesh");
284                        tower_->addTemplate(center_->getTower5Template());
285                        break;
286                }
287            }
288        }                           
289    }
290
291    void TixyTaxyTorxyField::destroyTower()
292    {
293        if (tower_ != nullptr)
294        {
295            tower_->destroy();
296            tower_ = nullptr;
297        }
298    }
299
300    void TixyTaxyTorxyField::create(char object, char param)
301    {
302        int paramInt = atoi(&param);
303        switch (object)
304        {
305            case 'F':
306                createFree(paramInt);
307                break;
308            case 'I':               
309                createStraight(paramInt);
310                break;
311            case 'R':               
312                createRCurve(paramInt);
313                break; 
314            case 'L':               
315                createLCurve(paramInt);
316                break;
317            case 'X':               
318                createStart(paramInt);
319                break;     
320            case 'O':               
321                createEnd(paramInt);
322                break;
323            case 'Y':               
324                createObstacle(paramInt);
325                break;                 
326            case 'T':                               
327                createTower(paramInt);               
328                break;                                                                                                         
329        }
330    }
331}
Note: See TracBrowser for help on using the repository browser.