Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 12325 was 12325, checked in by peterf, 5 years ago

Red and Pink seem to work better

File size: 3.8 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); //Vector3(70,10,-135);
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
37        this->actuelposition = this->getPosition();
38
39
40        for(int u=0; u < 67; u++){//always check if player passed a point
41            if(jeanfindpos(this->getPlayerPos(), possibleposition[u])){ 
42                    this->lastPlayerPassedPoint=possibleposition[u];       
43                }
44            }
45
46        int directionV = findPlayerTravDir (lastPlayerPassedPoint, this->getPlayerPos());
47        this->pointInFrontOfPlayer=frontPosition(); //getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
48        std::cout<<this->pointInFrontOfPlayer<<endl;
49        std::cout<<this->lastPlayerPassedPoint<<endl;
50       
51        //Stop, if target arrived
52        if((abs(this->actuelposition.x - this->target_x)<0.5) && (abs(this->actuelposition.z - this->target_z)<0.5)){
53                 this->ismoving = false;
54        }
55
56        //Move, if ghost hasn't arrived yet
57        if(this->ismoving){
58            if(!(abs(this->actuelposition.z-target_z)<0.5)) {
59                velocity = Vector3(0,0,-sgn(this->actuelposition.z-this->target_z));
60                move(dt, actuelposition, velocity);
61            }   
62            if(!(abs(this->actuelposition.x-target_x)<0.5)){
63                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),0,0);
64                move(dt, actuelposition, velocity);
65            }
66        }
67        else if(this->lastPlayerPassedPoint==Vector3(0,0,0)){
68            //as long as the player has not started the game,
69            //i.e. lastPlayerPastPoint is (0,0,0), pink pacman
70            //cannot possibly move, because it needs the position
71            //of the player to move accordingly
72
73            this->ismoving=false;
74        }
75        else if(this->pointInFrontOfPlayer==Vector3(0,0,0)){
76            std::cout<<"arheeuuuu"<<endl;
77
78            Vector3 pinkPos=Vector3(this->target_x, 10, this->target_z);
79
80            setNewTargetGhost(getShortestPath(pinkPos, this->lastPlayerPassedPoint));
81
82
83        }
84        //Check on which position the ghost has arrived and set new target
85         else{
86            while(lockmove){};
87            lockmove = true;
88
89            Vector3 pinkPos=Vector3(this->target_x, 10, this->target_z);
90
91            //int directionV = findPlayerTravDir (lastPlayerPassedPoint, this->getPlayerPos());
92            //this->pointInFrontOfPlayer=getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
93           
94            //std::cout<<this->lastPlayerPassedPoint<<endl;
95
96            //std::cout<<this->pointInFrontOfPlayer<<endl;
97            nextMove(pinkPos, pointInFrontOfPlayer, lastPlayerPassedPoint);
98
99
100            lockmove=false;
101
102        }
103
104
105
106
107
108        }
109
110
111
112    void PacmanPink::nextMove( Vector3 pinkPosP, Vector3 playerPos, Vector3 pointToAvoidP11){
113   
114        Vector3 nextTarget;
115
116        if(playerPos==pointToAvoidP11){ //SIGSEV if playerPos==pointToAvoidP11 otherwise
117            nextTarget = getShortestPath(pinkPosP, playerPos);
118        }
119        else{
120        nextTarget = getShortestPath(pinkPosP, playerPos, pointToAvoidP11);
121        }
122   
123       setNewTargetGhost(nextTarget);
124    }
125
126}
127
128       
129
130       
Note: See TracBrowser for help on using the repository browser.