Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/3DPacman_FS19/src/modules/pacman/PacmanPink.cc @ 12373

Last change on this file since 12373 was 12357, checked in by peterf, 6 years ago

Improved formatting and added some comments to make the code more precise

File size: 3.3 KB
Line 
1       
2#include "PacmanPink.h"
3
4#include "core/CoreIncludes.h"
5#include "BulletDynamics/Dynamics/btRigidBody.h"
6
7       
8namespace orxonox{
9
10        RegisterClass(PacmanPink);
11
12                PacmanPink::PacmanPink(Context* context) : PacmanGhost(context){
13
14        RegisterObject(PacmanPink);
15
16        this->target_x=0;
17        this->target_z=15;
18        this->lastPlayerPassedPoint=Vector3(0,0,0); 
19        this->pointInFrontOfPlayer=Vector3(0,0,0);
20         
21    }
22
23    /**
24    @brief
25        Method for creating a ghost through XML.
26    */
27    void PacmanPink::XMLPort(Element& xmlelement, XMLPort::Mode mode)
28    {
29        SUPER(PacmanPink, XMLPort, xmlelement, mode);
30    }
31
32
33    void PacmanPink::tick(float dt)
34    {
35        SUPER(PacmanGhost, tick, dt);
36        this->actuelposition = this->getPosition();
37
38        for(int u=0; u < 67; u++){//always check if player passed a point
39            if(jeanfindpos(this->getPlayerPos(), possibleposition[u])){ 
40                    this->lastPlayerPassedPoint=possibleposition[u];       
41                }
42            }
43
44        this->pointInFrontOfPlayer=frontPosition(); 
45        Vector3 pinkPos=Vector3(this->target_x, 10, this->target_z);
46       
47        //Stop, if target arrived
48        if((abs(this->actuelposition.x - this->target_x)<0.5) && (abs(this->actuelposition.z - this->target_z)<0.5)){
49                 this->ismoving = false;
50        }
51
52        //Move, if ghost hasn't arrived yet
53        if(this->ismoving){
54            if(!(abs(this->actuelposition.z-target_z)<0.5)) {
55                velocity = Vector3(0,0,-sgn(this->actuelposition.z-this->target_z));
56                move(dt, actuelposition, velocity);
57            }   
58            if(!(abs(this->actuelposition.x-target_x)<0.5)){
59                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),0,0);
60                move(dt, actuelposition, velocity);
61            }
62        }
63        else if(this->lastPlayerPassedPoint==Vector3(0,0,0)){
64            //as long as the player has not started the game,
65            //i.e. lastPlayerPastPoint is (0,0,0), pink pacman
66            //cannot possibly move, because it needs the position
67            //of the player to move accordingly
68
69            this->ismoving=false;
70        }
71        else if(this->pointInFrontOfPlayer==Vector3(0,0,0)){
72
73            Vector3 pinkPos=Vector3(this->target_x, 10, this->target_z);
74            setNewTargetGhost(getShortestPath(pinkPos, this->lastPlayerPassedPoint));
75
76        }
77        //Check on which position the ghost has arrived and set new target
78         else{
79            while(lockmove){};
80            lockmove = true;
81            nextMove(pinkPos, pointInFrontOfPlayer, lastPlayerPassedPoint);
82            lockmove=false;
83        }
84        }
85
86
87
88    void PacmanPink::nextMove( Vector3 pinkPosP, Vector3 playerPos, Vector3 pointToAvoidP11){
89   
90        Vector3 nextTarget;
91
92        if(playerPos==pointToAvoidP11){ //SIGSEV if playerPos==pointToAvoidP11 otherwise
93            nextTarget = getShortestPath(pinkPosP, playerPos);
94        }
95        else if(playerPos==Vector3(-70,10,-35)){
96           
97        nextTarget=getShortestPath(pinkPosP, Vector3(-70,10,-35));
98       
99        }
100        else{   
101       
102        nextTarget = getShortestPath(pinkPosP, playerPos, pointToAvoidP11);
103        }
104       
105       setNewTargetGhost(nextTarget);
106    }
107
108}
109
110       
111
112       
Note: See TracBrowser for help on using the repository browser.