Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/3DPacman_FS19/src/modules/pacman/PacmanRed.cc @ 12324

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

continued brown

File size: 5.2 KB
RevLine 
[12304]1#include "PacmanRed.h"
2//#include "Pacman.h"
3
4#include "core/CoreIncludes.h"
5#include "BulletDynamics/Dynamics/btRigidBody.h"
6
[12316]7
8
[12304]9        namespace orxonox{
10
11                RegisterClass(PacmanRed);
12
13                PacmanRed::PacmanRed(Context* context) : PacmanGhost(context){
14
15        RegisterObject(PacmanRed);
[12316]16        this->target_x=0;
17        this->target_z=15;
[12322]18        this->lastPlayerPassedPoint=Vector3(0,0,0); //Vector3(70,10,-135);
[12318]19        this->isNearPlayer=false;
[12304]20         
21    }
22
23
24    /**
25    @brief
26        Method for creating a ghost through XML.
27    */
28    void PacmanRed::XMLPort(Element& xmlelement, XMLPort::Mode mode)
29    {
30        SUPER(PacmanRed, XMLPort, xmlelement, mode);
31    }
32
[12316]33    /*void PacmanRed::setPlayerPos(Vector3 _playerPos)
34    {
35        this->playerPos = _playerPos;
36    }*/
37
38
[12304]39    void PacmanRed::tick(float dt)
40    {
[12319]41        //std::cout<<"LemanExpress5"<<endl;
[12304]42        SUPER(PacmanGhost, tick, dt);
43
44        this->actuelposition = this->getPosition();
[12316]45
46        for(int u=0; u < 67; u++){//always check if player passed a point
[12323]47            //if(possibleposition[u]!=Vector3(0,10,15)){
48                if(jeanfindpos(this->getPlayerPos(), possibleposition[u])){
49                    //if(!findpos(possibleposition[u],Vector3(0,10,15))){
50                this->lastPlayerPassedPoint=possibleposition[u];
51                            }
52                        //}
53                //}
[12316]54            }
55
[12318]56
57        /*if((playerFindPos(this->actuelposition, this->getPlayerPos()))&&(isNearPlayer==false)){
58            isNearPlayer=true;
59            setNewTargetRed(this->getPlayerPos());
60        }
61        else if (!(playerFindPos(this->actuelposition, this->getPlayerPos())&&(isNearPlayer==true))){
62            isNearPlayer=false;
63            setNewTargetRed(this->pointInFrontOfPlayer);
64        }*/
65
66
67
68
[12304]69        //Stop, if target arrived
70        if((abs(this->actuelposition.x - this->target_x)<0.5) && (abs(this->actuelposition.z - this->target_z)<0.5)){
[12319]71            //std::cout<<"LemanExpress1"<<endl;
[12304]72                 this->ismoving = false;
73        }
74
75        //Move, if ghost hasn't arrived yet
76        if(this->ismoving){
[12319]77            //std::cout<<"LemanExpress2"<<endl;
[12304]78            if(!(abs(this->actuelposition.z-target_z)<0.5)) {
79                velocity = Vector3(0,0,-sgn(this->actuelposition.z-this->target_z));
80                move(dt, actuelposition, velocity);
81            }   
82            if(!(abs(this->actuelposition.x-target_x)<0.5)){
83                velocity = Vector3(-sgn(this->actuelposition.x-this->target_x),0,0);
84                move(dt, actuelposition, velocity);
85            }
[12319]86            //std::cout<<"LemanExpress4"<<endl;
[12304]87        }
[12322]88        else if(this->lastPlayerPassedPoint==Vector3(0,0,0)){
89            //as long as the player has not started the game,
90            //i.e. lastPlayerPastPoint is (0,0,0), red pacman
91            //cannot possibly move, because it needs the position
92            //of the player to move accordingly
[12318]93
[12322]94            this->ismoving=false;
95        }
96
[12304]97        //Check on which position the ghost has arrived and set new target
98        else{
[12318]99            std::cout<<"LemanExpress3"<<endl;
[12304]100
101            while(lockmove){};
102            lockmove = true;
103
104                //do red behavior
[12316]105            //Use target_x and target_z for position of red pacman
[12304]106
[12316]107            Vector3 redPos=Vector3(this->target_x, 10, this->target_z);
108            //nextMove(this->getPlayerPos(), redPos);
[12304]109
[12317]110            int directionV = findPlayerTravDir (lastPlayerPassedPoint, this->getPlayerPos());
[12318]111            this->pointInFrontOfPlayer=getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
[12304]112
[12317]113
[12318]114            if(!findpos(this->actuelposition, lastPlayerPassedPoint)){
[12317]115               
[12319]116                /*std::cout<<this->getPlayerPos()<<endl;
[12316]117                std::cout<<this->lastPlayerPassedPoint<<endl;
[12318]118                std::cout<<this->pointInFrontOfPlayer<<endl;
[12319]119                std::cout<<this->actuelposition<<endl;*/
[12316]120            nextMove(redPos, lastPlayerPassedPoint);
[12318]121            std::cout<<"hiuddi"<<endl;
[12317]122            }
[12318]123            else if(findpos(this->actuelposition, lastPlayerPassedPoint)){// red pacman is at lastPlayerPassedPoint
[12316]124
[12319]125                /*std::cout<<"dhdidjop"<<endl;
[12318]126                std::cout<<this->getPlayerPos()<<endl;
127                std::cout<<this->lastPlayerPassedPoint<<endl;
128                std::cout<<this->pointInFrontOfPlayer<<endl;
[12319]129                std::cout<<this->actuelposition<<endl;*/
[12316]130
[12323]131                //if(!findpos(pointInFrontOfPlayer, Vector3(0,10,15))){
[12318]132                nextMove(lastPlayerPassedPoint, pointInFrontOfPlayer);
[12323]133                    //}
[12318]134                std::cout<<"ogslodm"<<endl;
[12317]135            }
136
137
[12316]138            lockmove=false; //NEVER FORGET THIS ONE !!!!!!!
[12304]139        }
140       
141    }
142
143
[12316]144        void PacmanRed::nextMove( Vector3 redPosP, Vector3 playerPos){
145       
146        Vector3 nextTarget;
[12304]147
[12316]148           nextTarget = getShortestPath(redPosP, playerPos);
[12304]149       
[12319]150           setNewTargetGhost(nextTarget);
[12304]151        }
152
153
154
155    //save last checkpoint crossed by player
156    /*
157        void PacmanGelb::tick(float dt){ //last passed point of player
158            for(int u=0; u < 67; u++){
159            if(findpos(this->getPosition(), possibleposition[u])){
160            this->lastPassedPoint=possibleposition[u];
161                    }
162                }
163        }
164    */
165
166}
Note: See TracBrowser for help on using the repository browser.