Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/3DPacman_FS18/src/modules/pacman/PacmanGhost.cc @ 11925

Last change on this file since 11925 was 11925, checked in by dreherm, 6 years ago

Disk quota test 6

  • Property svn:executable set to *
File size: 16.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 *      Oli Scheuss
24 *   Co-authors:
25 *      Damian 'Mozork' Frick
26 *
27 */
28
29#include "PacmanGhost.h"
30
31#include "core/CoreIncludes.h"
32#include "BulletDynamics/Dynamics/btRigidBody.h"
33
34namespace orxonox
35{
36    RegisterClass(PacmanGhost);
37
38    /**
39    @brief
40        Constructor. Registers the object and initializes some default values.
41    @param creator
42        The creator of this object.
43    */
44    PacmanGhost::PacmanGhost(Context* context) : ControllableEntity(context)
45    {
46        RegisterObject(PacmanGhost);
47
48       /* this->velocity = Vector3(0, 0, 0);
49
50        this->setCollisionType(CollisionType::Dynamic);
51
52        this->resetposition = this->getPosition(); //Set Default start position
53       
54        this->actuelposition = this->getPosition();
55       
56        this->target_x = actuelposition.x;
57        this->target_z = actuelposition.z; */
58
59    }
60
61    /**
62    @brief
63        Destructor. Destroys controller, if present.
64    */
65    PacmanGhost::~PacmanGhost()
66    {
67        // Deletes the controller if the object was initialized and the pointer to the controller is not NULL.
68    }
69
70    /**
71    @brief
72        Method for creating a AutonomousDrone through XML.
73    */
74    void PacmanGhost::XMLPort(Element& xmlelement, XMLPort::Mode mode)
75    {
76        SUPER(PacmanGhost, XMLPort, xmlelement, mode);
77    }
78
79
80
81    Vector3 possibleposition[] = {Vector3(20,10,245),Vector3(215,10,245),Vector3(215,10,195),Vector3(185,10,195),Vector3(135,10,195), //0-4
82        Vector3(185,10,150),Vector3(135,10,150),Vector3(215,10,150),Vector3(215,10,105),Vector3(135,10,105), //5-9
83        Vector3(135,10,15),Vector3(135,10,-85),Vector3(215,10,-85),Vector3(135,10,-135),Vector3(215,10,-135), //10-14
84        Vector3(215,10,-195),Vector3(135,10,-195),Vector3(20,10,195),Vector3(-20,10,195),Vector3(-20,10,245), //15-19
85        Vector3(-215,10,245),Vector3(-215,10,195),Vector3(-185,10,195),Vector3(-135,10,195),Vector3(-70,10,195), //20-24
86        Vector3(70,10,195),Vector3(70,10,150),Vector3(20,10,150),Vector3(-20,10,150),Vector3(-70,10,150), //25-29
87        Vector3(-135,10,150),Vector3(-185,10,150),Vector3(-215,10,150),Vector3(-215,10,105),Vector3(-135,10,105) //30-34
88        Vector3(-70,10,105),Vector3(-20,10,105),Vector3(20,10,105),Vector3(70,10,105),Vector3(70,10,60), //35-39
89        Vector3(0,10,60),Vector3(-70,10,60),Vector3(-135,10,15),Vector3(-70,10,60),Vector3(0,10,15), //40-44
90        Vector3(70,10,15),Vector3(-70,10,-35),Vector3(-20,10,-35),Vector3(20,10,-35),Vector3(70,10,-35), //45-49
91        Vector3(70,10,-85),Vector3(20,10,-85),Vector3(-20,10,-85),Vector3(-70,10,-85),Vector3(-135,10,-85), //50-54
92        Vector3(-215,10,-85),Vector3(-215,10,-135),Vector3(-135,10,-135),Vector3(-70,10,-135),Vector3(-20,10,-135), //55-59
93        Vector3(20,10,-135),Vector3(70,10,-135),Vector3(20,10,-195),Vector3(-20,10,-195),Vector3(-135,10,-195), //60-64
94        Vector3(-215,10,-195),Vector3(0,10,-35)}; //65-66
95
96    /**
97    @brief
98        Defines which actions the AutonomousDrone has to take in each tick.
99    @param dt
100        The length of the tick.
101    */
102    void PacmanGhost::tick(float dt)
103    {
104        SUPER(PacmanGhost, tick, dt);
105
106        //setorientation
107/*
108        this->actuelposition = this->getPosition();
109       
110        //Stop, if target arrived
111        if((abs(this->actuelposition.x - this->target_x)<0.5) && (abs(this->actuelposition.z - this->target_z)<0.5)){
112                 this->ismoving = false;
113        }
114
115        //Move, if ghost hasn't arrived yet
116        if(this->ismoving){
117            if(!(abs(this->actuelposition.z-target_z)<0.5)) {
118                velocity = Vector3(0,0,-sgn(this->actuelposition.z-this->target_z)*2);
119                move(dt, actuelposition, velocity);
120            }   
121            if(!(abs(this->actuelposition.x-target_x)<0.5)){
122                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x)*2,0,0);
123                move(dt, actuelposition, velocity);
124            }
125        }
126
127        //Check on which position ghost has arrived and set new target
128         else{
129            if(findpos(actuelposition,possibleposition[0])){
130                setnewTarget(1,17,19);
131            }
132            else if(findpos(actuelposition,possibleposition[1])){
133                setnewTarget(0,2);
134            }
135            else if(findpos(actuelposition,possibleposition[2])){
136                        setnewTarget(1,3);
137            }
138            else if(findpos(actuelposition,possibleposition[3])){
139                            setnewTarget(2,4,5);
140            }
141            else if(findpos(actuelposition,possibleposition[4])){
142                                setnewTarget(3,6);
143            }
144            else if(findpos(actuelposition,possibleposition[5])){
145                setnewTarget(3,7);
146            }
147            else if(findpos(actuelposition,possibleposition[6])){
148                setnewTarget(4,9,26);
149            }
150            else if(findpos(actuelposition,possibleposition[7])){
151                setnewTarget(5,8);
152            }
153            else if(findpos(actuelposition,possibleposition[8])){
154                setnewTarget(7,9);
155            }
156            else if(findpos(actuelposition,possibleposition[9])){
157                setnewTarget(6,8,10,38);
158            }
159            else if(findpos(actuelposition,possibleposition[10])){
160                setnewTarget(9,11,45);
161            }
162            else if(findpos(actuelposition,possibleposition[11])){
163                setnewTarget(10,12,13);
164            }
165            else if(findpos(actuelposition,possibleposition[12])){
166                setnewTarget(11,14);
167            }
168            else if(findpos(actuelposition,possibleposition[13])){
169                setnewTarget(11,14,16,61);
170            }
171            else if(findpos(actuelposition,possibleposition[14])){
172                setnewTarget(12,13,15);
173            }
174            else if(findpos(actuelposition,possibleposition[15])){
175                setnewTarget(14,16);
176            }
177            else if(findpos(actuelposition,possibleposition[16])){
178                setnewTarget(13,15,62);
179            }
180            else if(findpos(actuelposition,possibleposition[17])){
181                setnewTarget(0,25);
182            }
183            else if(findpos(actuelposition,possibleposition[18])){
184                setnewTarget(19,24);
185            }
186            else if(findpos(actuelposition,possibleposition[19])){
187                setnewTarget(0,18,20);
188            }
189            else if(findpos(actuelposition,possibleposition[20])){
190                setnewTarget(19,21);
191            }
192            else if(findpos(actuelposition,possibleposition[21])){
193                setnewTarget(20,22);
194            }
195            else if(findpos(actuelposition,possibleposition[22])){
196                setnewTarget(21,23,31);
197            }
198            else if(findpos(actuelposition,possibleposition[23])){
199                setnewTarget(22,30);
200            }
201            else if(findpos(actuelposition,possibleposition[24])){
202                setnewTarget(18,29);
203            }
204            else if(findpos(actuelposition,possibleposition[25])){
205                setnewTarget(17,26);
206            }
207            else if(findpos(actuelposition,possibleposition[26])){
208                setnewTarget(6,25,27);
209            }
210            else if(findpos(actuelposition,possibleposition[27])){
211                setnewTarget(26,28,37);
212            }
213            else if(findpos(actuelposition,possibleposition[28])){
214                setnewTarget(27,29,36);
215            }
216            else if(findpos(actuelposition,possibleposition[29])){
217                setnewTarget(24,28,30);
218            }
219            else if(findpos(actuelposition,possibleposition[30])){
220                setnewTarget(23,29,34);
221            }
222            else if(findpos(actuelposition,possibleposition[31])){
223                setnewTarget(22,32);
224            }
225            else if(findpos(actuelposition,possibleposition[32])){
226                setnewTarget(31,33);
227            }
228            else if(findpos(actuelposition,possibleposition[33])){
229                setnewTarget(32,34);
230            }
231            else if(findpos(actuelposition,possibleposition[34])){
232                setnewTarget(30,33,35,42);
233            }
234            else if(findpos(actuelposition,possibleposition[35])){
235                setnewTarget(34,36,41);
236            }
237            else if(findpos(actuelposition,possibleposition[36])){
238                setnewTarget(28,35);
239            }
240            else if(findpos(actuelposition,possibleposition[37])){
241                setnewTarget(27,38);
242            }
243            else if(findpos(actuelposition,possibleposition[38])){
244                setnewTarget(9,37,39);
245            }
246            else if(findpos(actuelposition,possibleposition[39])){
247                setnewTarget(38,40,45);
248            }
249            else if(findpos(actuelposition,possibleposition[40])){
250                setnewTarget(39,41); //Shouldn't be able to return in center
251            }
252            else if(findpos(actuelposition,possibleposition[41])){
253                setnewTarget(35,43);
254            }
255            else if(findpos(actuelposition,possibleposition[42])){
256                setnewTarget(34,43,54);
257            }
258            else if(findpos(actuelposition,possibleposition[43])){
259                setnewTarget(41,46);
260            }
261            else if(findpos(actuelposition,possibleposition[44])){
262                setnewTarget(40,66);
263            }
264            else if(findpos(actuelposition,possibleposition[45])){
265                setnewTarget(10,39,49);
266            }
267            else if(findpos(actuelposition,possibleposition[46])){
268                setnewTarget(43,47);
269            }
270            else if(findpos(actuelposition,possibleposition[47])){
271                setnewTarget(46,52,66);
272            }
273            else if(findpos(actuelposition,possibleposition[48])){
274                setnewTarget(49,51,66);
275            }
276            else if(findpos(actuelposition,possibleposition[49])){
277                setnewTarget(45,48);
278            }
279            else if(findpos(actuelposition,possibleposition[50])){
280                setnewTarget(51,61);
281            }
282            else if(findpos(actuelposition,possibleposition[51])){
283                setnewTarget(48,50);
284            }
285            else if(findpos(actuelposition,possibleposition[52])){
286                setnewTarget(47,53);
287            }
288            else if(findpos(actuelposition,possibleposition[53])){
289                setnewTarget(52,58);
290            }
291            else if(findpos(actuelposition,possibleposition[54])){
292                setnewTarget(42,55,57);
293            }
294            else if(findpos(actuelposition,possibleposition[55])){
295                setnewTarget(54,56);
296            }
297            else if(findpos(actuelposition,possibleposition[56])){
298                setnewTarget(55,57,65);
299            }
300            else if(findpos(actuelposition,possibleposition[57])){
301                setnewTarget(54,56,58,64);
302            }
303            else if(findpos(actuelposition,possibleposition[58])){
304                setnewTarget(53,57,59);
305            }
306            else if(findpos(actuelposition,possibleposition[59])){
307                setnewTarget(58,59,63);
308            }
309            else if(findpos(actuelposition,possibleposition[60])){
310                setnewTarget(59,61,62);
311            }
312            else if(findpos(actuelposition,possibleposition[61])){
313                setnewTarget(13,50,60);
314            }
315            else if(findpos(actuelposition,possibleposition[62])){
316                setnewTarget(16,60);
317            }
318            else if(findpos(actuelposition,possibleposition[63])){
319                setnewTarget(59,64);
320            }
321            else if(findpos(actuelposition,possibleposition[64])){
322                setnewTarget(57,63,65);
323            }
324            else if(findpos(actuelposition,possibleposition[65])){
325                setnewTarget(56,64);
326            }
327
328            else{
329                this->resetGhost(); //Shouldn't happen...
330            } //End of Position table
331            }
332*/
333    }
334
335    void PacmanGhost::setnewTarget(int firstdec){
336       
337          decision = rand()%1;
338            switch(decision){
339                case 0:
340                    this->target_x = possibleposition[firstdec].x;
341                    this->target_z = possibleposition[firstdec].z; 
342                    this->ismoving = true;
343                    break;
344                }
345    }
346
347    void PacmanGhost::setnewTarget(int firstdec, int seconddec){ /*
348           decision = rand()%2;
349            switch(decision){
350                case 0:
351                    this->target_x = possibleposition[firstdec].x;
352                    this->target_z = possibleposition[firstdec].z;
353                    this->ismoving = true;
354                    break;
355                case 1:
356                    this->target_x = possibleposition[seconddec].x;
357                    this->target_z = possibleposition[seconddec].z;
358                    this->ismoving = true;
359                    break; 
360            }
361            */
362    }
363
364    void PacmanGhost::setnewTarget(int firstdec, int seconddec, int thirddec){
365        /*
366           decision = rand()%3;
367            switch(decision){
368                case 0:
369                    this->target_x = possibleposition[firstdec].x;
370                    this->target_z = possibleposition[firstdec].z;
371                    this->ismoving = true;
372                    break;
373                case 1:
374                    this->target_x = possibleposition[seconddec].x;
375                    this->target_z = possibleposition[seconddec].z;
376                    this->ismoving = true;
377                    break;
378                case 2:
379                    this->target_x = possibleposition[thirddec].x;
380                    this->target_z = possibleposition[thirddec].z;
381                    this->ismoving = true;
382                    break;   
383                }
384            */
385        }
386
387    void PacmanGhost::setnewTarget(int firstdec, int seconddec, int thirddec, int fourthdec){
388        /*
389           decision = rand()%4;
390            switch(decision){
391                case 0:
392                    this->target_x = possibleposition[firstdec].x;
393                    this->target_z = possibleposition[firstdec].z;
394                    this->ismoving = true;
395                    break;
396                case 1:
397                    this->target_x = possibleposition[seconddec].x;
398                    this->target_z = possibleposition[seconddec].z;
399                    this->ismoving = true;
400                    break;
401                case 2:
402                    this->target_x = possibleposition[thirddec].x;
403                    this->target_z = possibleposition[thirddec].z;
404                    this->ismoving = true;
405                    break;
406                case 3:
407                        this->target_x = possibleposition[fourthdec].x;
408                    this->target_z = possibleposition[fourthdec].z;
409                    this->ismoving = true;
410                    break;   
411                }
412            */
413        }
414
415
416
417    void PacmanGhost::move(float dt, Vector3 actuelposition, Vector3 velocity){
418        this->setPosition(Vector3(actuelposition.x+20*velocity.x*dt,10,actuelposition.z+20*velocity.z*dt));
419    }
420
421    bool PacmanGhost::findpos(Vector3 one, Vector3 other){
422       if((abs(one.x - other.x)<0.5) && (abs(one.z - other.z)<0.5)) return true;
423        return false;
424    }
425
426    void PacmanGhost::resetGhost(){
427        /*
428        this->setPosition(this->resetposition);
429        this->ismoving = false;
430        this->actuelposition = this->getPosition();
431       
432        this->target_x = actuelposition.x;
433        this->target_z = actuelposition.z;
434        */
435    }
436}
Note: See TracBrowser for help on using the repository browser.