Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

Pink Bug Workaround

File size: 4.5 KB
RevLine 
[12304]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);
[12319]15
16        this->target_x=0;
17        this->target_z=15;
[12322]18        this->lastPlayerPassedPoint=Vector3(0,0,0); //Vector3(70,10,-135);
[12324]19        this->pointInFrontOfPlayer=Vector3(0,0,0);
[12304]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();
[12326]38        //std::cout<<this->actuelposition<<endl;
[12319]39
40
41        for(int u=0; u < 67; u++){//always check if player passed a point
[12324]42            if(jeanfindpos(this->getPlayerPos(), possibleposition[u])){ 
43                    this->lastPlayerPassedPoint=possibleposition[u];       
44                }
[12319]45            }
46
[12325]47        this->pointInFrontOfPlayer=frontPosition(); //getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
[12326]48
49        Vector3 pinkPos=Vector3(this->target_x, 10, this->target_z);
[12304]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        }
[12322]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        }
[12324]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        }
[12304]84        //Check on which position the ghost has arrived and set new target
85         else{
86            while(lockmove){};
87            lockmove = true;
88
[12324]89            //this->pointInFrontOfPlayer=getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
[12319]90           
91            nextMove(pinkPos, pointInFrontOfPlayer, lastPlayerPassedPoint);
92
93
94            lockmove=false;
[12304]95
96        }
97
98
99
100
[12319]101
[12304]102        }
103
104
105
[12319]106    void PacmanPink::nextMove( Vector3 pinkPosP, Vector3 playerPos, Vector3 pointToAvoidP11){
107   
108        Vector3 nextTarget;
[12304]109
[12338]110        /*std::cout<<this->actuelposition<<endl;
[12326]111        std::cout<<pinkPosP<<endl;
112        std::cout<<playerPos<<endl;
113        std::cout<<pointToAvoidP11<<endl;
[12338]114        std::cout<<this->getPlayerPos()<<endl;*/
115        std::cout<<playerPos<<endl;
116        std::cout<<"kok"<<endl;
[12326]117
[12325]118        if(playerPos==pointToAvoidP11){ //SIGSEV if playerPos==pointToAvoidP11 otherwise
[12324]119            nextTarget = getShortestPath(pinkPosP, playerPos);
120        }
[12326]121        /*else if(pinkPosP==pointToAvoidP11){
122            nextTarget=getShortestPath(pinkPosP, playerPos);
123        }*/
[12338]124        else if((playerPos==Vector3(-70,10,-35))/*||(playerPos==Vector3(-20,10,-35))||(playerPos==Vector3(0,10,-35))*/){
125            //nextTarget=pinkPosP;
126        nextTarget=getShortestPath(pinkPosP, Vector3(-70,10,-35));
127        std::cout<<"ChaillyVillage"<<endl;
128        }
129        /*else if((playerPos==Vector3(-70,10,-35))&&(pinkPosP==Vector3(-70,10,60))/*||(playerPos==Vector3(-20,10,-35))||(playerPos==Vector3(0,10,-35))){
130            //nextTarget=pinkPosP;
131        nextTarget=getShortestPath(pinkPosP, Vector3(-70,10,-35));
132        std::cout<<"ChaillyVillage"<<endl;
133        }*/
[12324]134        else{
[12326]135            //bugs here
[12338]136            std::cout<<pinkPosP<<endl;
[12324]137        nextTarget = getShortestPath(pinkPosP, playerPos, pointToAvoidP11);
138        }
[12338]139        std::cout<<nextTarget<<endl;
[12319]140       setNewTargetGhost(nextTarget);
141    }
[12304]142
[12319]143}
[12304]144
145       
146
147       
Note: See TracBrowser for help on using the repository browser.