Changeset 11529 for code/branches/FlappyOrx_HS17/src
- Timestamp:
- Nov 6, 2017, 12:52:38 PM (7 years ago)
- Location:
- code/branches/FlappyOrx_HS17/src/modules/flappyorx
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/FlappyOrx_HS17/src/modules/flappyorx/CMakeLists.txt
r11503 r11529 7 7 FlappyOrxWeaponEnemy.cc 8 8 FlappyOrxHUDinfo.cc 9 FlappyOrxAsteroid.cc 9 10 END_BUILD_UNIT 10 11 ) -
code/branches/FlappyOrx_HS17/src/modules/flappyorx/FlappyOrx.cc
r11521 r11529 47 47 #include "FlappyOrxCenterPoint.h" 48 48 #include "FlappyOrxShip.h" 49 #include "FlappyOrxAsteroid.h" 49 50 50 51 #include "core/command/ConsoleCommand.h" … … 67 68 multiplier = 1; 68 69 b_combo = false; 69 70 this->spawnDistance=300; 71 this->tubeOffsetX=500; 70 72 this->setHUDTemplate("FlappyOrxHUD"); 71 73 } 72 74 75 void FlappyOrx::updatePlayerPos(int x){ 76 if(this->tubes.size()==0||x-this->tubes.back()-tubeOffsetX>spawnDistance){ 77 spawnTube(); 78 this->tubes.push(x+tubeOffsetX); 79 } 80 if(this->tubes.size()!=0&&x>this->tubes.front()){ 81 this->tubes.pop(); 82 levelUp(); 83 } 84 } 85 73 86 void FlappyOrx::levelUp() 74 87 { 75 88 level++; 76 if (getPlayer() != nullptr) 77 { 78 for (int i = 0; i < 7; i++) 79 { 80 81 WeakPtr<ExplosionPart> chunk5 = new ExplosionPart(this->center_->getContext()); 82 chunk5->setPosition(this->center_->getPosition()); 83 chunk5->setVelocity(Vector3(1000, 0, 0)); //player->getVelocity() 84 chunk5->setScale(10); 85 chunk5->setEffect1("Orxonox/explosion2b"); 86 chunk5->setEffect2("Orxonox/smoke6"); 87 chunk5->setMinSpeed(0); 88 chunk5->setMaxSpeed(0); 89 chunk5->Explode(); 90 91 } 92 } 93 addPoints(multiplier * 42); 94 multiplier *= 2; 95 toggleShowLevel(); 96 showLevelTimer.setTimer(1.0f, false, createExecutor(createFunctor(&FlappyOrx::toggleShowLevel, this))); 89 //toggleShowLevel(); 90 //showLevelTimer.setTimer(3.0f, false, createExecutor(createFunctor(&FlappyOrx::toggleShowLevel, this))); 97 91 } 98 92 … … 108 102 } 109 103 110 104 void FlappyOrx::spawnTube() 105 { 106 int space = 90; 107 int height = (float(rand())/RAND_MAX-0.5)*(280-space); 108 109 if (getPlayer() == nullptr) 110 return; 111 112 Vector3 pos = player->getPosition(); 113 114 asteroidField(pos.x+tubeOffsetX,height-space/2,0.8); 115 asteroidField(pos.x+tubeOffsetX,height+space/2,-0.8); 116 } 117 118 void FlappyOrx::asteroidField(int x, int y, float slope){ 119 int r = 20; 120 int noadd = 0; 121 122 ClearAsteroids(); 123 Circle newAsteroid = Circle(); 124 while(r>0){ 125 if(slope>0) 126 newAsteroid.y=float(rand())/RAND_MAX*(150+y)-150; 127 else 128 newAsteroid.y=float(rand())/RAND_MAX*(150-y)+y; 129 130 newAsteroid.x=x+(float(rand())/RAND_MAX-0.5)*(y-newAsteroid.y)/slope; 131 newAsteroid.r=r; 132 133 int i = addIfPossible(newAsteroid); 134 if(i==0) 135 noadd++; 136 else if(i==2) 137 r=0; 138 if(noadd>=5){ 139 noadd=0; 140 r-=5; 141 } 142 } 143 } 144 145 void FlappyOrx::createAsteroid(Circle &c){ 146 orxout() << "created Asteroid at x="<<c.x<<" y="<<c.y << std::endl; 147 MovableEntity* newAsteroid = new MovableEntity(this->center_->getContext()); 148 if(c.r<=5) 149 newAsteroid->addTemplate(Asteroid5[rand()%6]); 150 else if(c.r<=10) 151 newAsteroid->addTemplate(Asteroid10[rand()%6]); 152 else if(c.r<=15) 153 newAsteroid->addTemplate(Asteroid15[rand()%6]); 154 else 155 newAsteroid->addTemplate(Asteroid20[rand()%6]); 156 157 newAsteroid->setPosition(Vector3(c.x, 0, c.y)); 158 newAsteroid->setOrientation(Vector3::UNIT_Z, Degree(rand()%360)); 159 newAsteroid->setOrientation(Vector3::UNIT_Y, Degree(rand()%360)); 160 161 } 111 162 112 163 void FlappyOrx::setCenterpoint(FlappyOrxCenterPoint* center) -
code/branches/FlappyOrx_HS17/src/modules/flappyorx/FlappyOrx.h
r11503 r11529 41 41 #include "tools/Timer.h" 42 42 43 43 44 namespace orxonox 44 45 { 46 47 struct Circle{ 48 int r; 49 int x; 50 int y; 51 Circle(int new_r, int new_x, int new_y){ 52 r=new_r; 53 x=new_x; 54 y=new_y; 55 } 56 Circle(){ 57 r=0; 58 x=0; 59 y=0; 60 } 61 }; 45 62 46 63 class _FlappyOrxExport FlappyOrx : public Deathmatch … … 53 70 virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command 54 71 55 void spawnEnemy(); 56 72 void updatePlayerPos(int x); 73 void createAsteroid(Circle &c); 74 void asteroidField(int x, int y, float slope); 75 void spawnTube(); 76 57 77 void setCenterpoint(FlappyOrxCenterPoint* center); 58 78 … … 71 91 bool bEndGame; 72 92 bool bShowLevel; 93 std::queue<int> tubes; 94 int spawnDistance; 95 int tubeOffsetX; 73 96 private: 74 97 void toggleShowLevel(){bShowLevel = !bShowLevel;} 98 99 const static int nAst = 7; 100 Circle Asteroids[nAst]; 101 102 void ClearAsteroids(){ 103 for(int i = 0; i<this->nAst; i++){ 104 Asteroids[i].r=0; 105 } 106 } 107 108 109 bool Collision(Circle &c1, Circle &c2){ 110 if(c1.r==0 || c2.r==0) 111 return false; 112 int x = c1.x - c2.x; 113 int y = c1.y - c2.y; 114 int r = c1.r + c2.r; 115 116 return x*x+y*y<r*r*1.5; 117 } 118 119 int addIfPossible(Circle c){ 120 int i; 121 for(i=0; i<this->nAst && this->Asteroids[i].r!=0;i++){ 122 if(Collision(c,this->Asteroids[i])){ 123 return 0; 124 } 125 } 126 if(i==nAst) 127 return 2; 128 this->Asteroids[i].x=c.x; 129 this->Asteroids[i].y=c.y; 130 this->Asteroids[i].r=c.r; 131 createAsteroid(c); 132 return 1; 133 } 134 135 136 75 137 FlappyOrxShip* getPlayer(); 76 138 WeakPtr<FlappyOrxCenterPoint> center_; … … 84 146 int point; 85 147 bool b_combo; 148 std::string Asteroid5[6] = {"Asteroid3_1","Asteroid3_2","Asteroid3_3","Asteroid3_4","Asteroid3_5","Asteroid3_6"}; 149 std::string Asteroid10[6] = {"Asteroid6_1","Asteroid6_2","Asteroid6_3","Asteroid6_4","Asteroid6_5","Asteroid6_6"}; 150 std::string Asteroid15[6] = {"Asteroid9_1","Asteroid9_2","Asteroid9_3","Asteroid9_4","Asteroid9_5","Asteroid9_6"}; 151 std::string Asteroid20[6] = {"Asteroid12_1","Asteroid12_2","Asteroid12_3","Asteroid12_4","Asteroid12_5","Asteroid12_6"}; 152 153 154 86 155 }; 87 156 } -
code/branches/FlappyOrx_HS17/src/modules/flappyorx/FlappyOrxShip.cc
r11521 r11529 73 73 } 74 74 Vector3 pos = getPosition(); 75 velocity.y += gravity; 75 76 getGame()->updatePlayerPos(pos.x); 77 78 79 velocity.y += gravity*dt; 76 80 if(isFlapping){ 77 81 isFlapping = false; 78 velocity.y = -UpwardThrust; 82 if(pos.z > -150) 83 velocity.y = -UpwardThrust; 79 84 } 80 85 81 86 pos += Vector3(speed + velocity.x, 0, velocity.y) * dt; 82 87 83 if(pos.z < -150 || pos.z> 150){88 if(pos.z > 150){ 84 89 pos.z=0; 85 90 velocity.y = 0; … … 94 99 } 95 100 101 96 102 // Camera 97 103 Camera* camera = this->getCamera(); … … 102 108 } 103 109 110 104 111 setPosition(pos); 105 112 setOrientation(Vector3::UNIT_Y, Degree(270));
Note: See TracChangeset
for help on using the changeset viewer.