Changeset 7018 for code/branches/presentation3/src/modules/weapons
- Timestamp:
- May 30, 2010, 3:19:49 PM (14 years ago)
- Location:
- code/branches/presentation3/src/modules/weapons
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentation3/src/modules/weapons/RocketController.cc
r7013 r7018 1 1 /* 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 * ORXONOX - the hottest 3D action shooter ever to exist 3 * > www.orxonox.net < 4 * 5 * 6 * License notice: 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 2 11 * of the License, or (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 21 * 22 * Author: 23 * Gabriel Nadler, Originalfile: Oli Scheuss 24 * Co-authors: 25 * ... 26 * 27 */ 28 28 29 29 #include "RocketController.h" … … 39 39 /** 40 40 @brief 41 41 Constructor. 42 42 */ 43 43 RocketController::RocketController(BaseObject* creator) : Controller(creator) … … 46 46 COUT(5)<< "RocketController constructed\n"; 47 47 48 49 this->rocket = new SimpleRocket(this);50 this->rocket ->setController(this);51 this->setControllableEntity(dynamic_cast<ControllableEntity*> ( rocket));52 this-> haha=0;48 49 this->rocket_ = new SimpleRocket(this); 50 this->rocket_->setController(this); 51 this->setControllableEntity(dynamic_cast<ControllableEntity*> (this->rocket_)); 52 this->counter_=0; 53 53 } 54 54 … … 56 56 /** 57 57 @brief 58 58 The controlling happens here. This method defines what the controller has to do each tick. 59 59 @param dt 60 60 The duration of the tick. 61 61 */ 62 62 void RocketController::tick(float dt) 63 63 { 64 haha++;64 counter_++; 65 65 66 //if (haha<30)this->rocket->setVelocity(rocket->getVelocity()*1.03); 67 if (this->target_) { 66 if (this->target_ && this->rocket_->hasFuel()) { 68 67 this->setTargetPosition(); 69 68 this->moveToTargetPosition(); 70 69 } 71 if (haha>500) rocket->setDestroy();;72 70 71 73 72 } 74 73 … … 81 80 void RocketController::setTargetPosition() 82 81 { 83 //this->targetPosition_=this->target_->getWorldPosition();84 this->targetPosition_ = getPredictedPosition(this->getControllableEntity()->getWorldPosition(),this->getControllableEntity()->getVelocity().length() , this->target_->getWorldPosition(), this->target_->getVelocity());82 this->targetPosition_=this->target_->getWorldPosition(); //don't really note a difference in the rocket behaviour xD 83 //this->targetPosition_ = getPredictedPosition(this->getControllableEntity()->getWorldPosition(),this->getControllableEntity()->getVelocity().length() , this->target_->getWorldPosition(), this->target_->getVelocity()); 85 84 } 86 85 void RocketController::moveToTargetPosition() … … 100 99 if (!this->getControllableEntity()) 101 100 return; 102 //float dx = target.x-this->getControllableEntity()->getPosition().x;103 //float dy = target.y-this->getControllableEntity()->getPosition().y;104 COUT(4)<<"\n diff: ";105 COUT(4)<<target-this->getControllableEntity()->getPosition() << endl;106 //COUT(0)<<"\n 2D view: ";107 /* COUT(0)<<this->getControllableEntity()->getPosition().x;108 COUT(0)<<" ";109 COUT(0)<<this->getControllableEntity()->getPosition().y;110 COUT(0)<<" ";111 COUT(0)<<this->getControllableEntity()->getPosition().z;112 COUT(0)<<"\n";*/113 101 Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target); 114 //float distance = (target - this->getControllableEntity()->getPosition()).length(); 115 //Vector3D diff =target-this->rocket->getPosition(); 116 COUT(4) << "viewdirection: "<< coord << endl; 117 //COUT(0)<<" "; 118 //COUT(0)<<coord.y; 119 this->getControllableEntity()->rotateYaw(-0.8f*sgn(coord.x)*coord.x*coord.x); 120 this->getControllableEntity()->rotatePitch(0.8f*sgn(coord.y)*coord.y*coord.y); 121 // this->getControllableEntity()->rotateYaw(10); 122 // this->getControllableEntity()->rotatePitch(0); 123 //this->getControllableEntity()->rotatePitch(rotation.getPitch().valueRadians()); 124 //this->getControllableEntity()->rotateYaw(rotation.getYaw().valueRadians()); 125 //this->getControllableEntity()->moveUpDown(coord.y); 126 //this->getControllableEntity()->moveRightLeft(coord.x); 127 //this->getControllableEntity()->rotatePitch(coord); 128 // if (this->target_ || distance > 10) 129 // { 130 // // Multiply with 0.8 to make them a bit slower 131 //this->getControllableEntity()->rotateYaw(coord.x ); 132 // this->getControllableEntity()->rotatePitch(coord.y); 133 // } 102 float distance = (target - this->getControllableEntity()->getWorldPosition()).length(); 103 104 105 if (distance > 1000&&this->getControllableEntity()->getVelocity().squaredLength()<160000) 106 this->getControllableEntity()->setAcceleration(this->rocket_->getOrientation()*Vector3(-20,-20,-20)); 107 if (distance <1000) this->rocket_->setAcceleration(0,0,0); 108 109 this->getControllableEntity()->rotateYaw(-sgn(coord.x)*coord.x*coord.x); 110 this->getControllableEntity()->rotatePitch(sgn(coord.y)*coord.y*coord.y); 134 111 } 135 112 -
code/branches/presentation3/src/modules/weapons/RocketController.h
r6951 r7018 41 41 /** 42 42 @brief 43 Controller for the Drone of the PPS tutorial.43 Controller for the Rocket (targetseeking) 44 44 @author 45 45 Gabriel Nadler, Originalfile: Oli Scheuss … … 52 52 53 53 virtual void tick(float dt); 54 SimpleRocket* getRocket(){return this->rocket ;};54 SimpleRocket* getRocket(){return this->rocket_;}; 55 55 void setTarget(WorldEntity* target); 56 56 protected: … … 60 60 61 61 private: 62 SimpleRocket* rocket ;62 SimpleRocket* rocket_; 63 63 Vector3 targetPosition_; 64 64 WeakPtr<PlayerInfo> player_; 65 int haha;65 66 66 WeakPtr<WorldEntity> target_; 67 int counter_; 67 68 68 69 -
code/branches/presentation3/src/modules/weapons/projectiles/Rocket.cc
r6964 r7018 87 87 this->defSndWpnEngine_->setLooping(true); 88 88 this->defSndWpnEngine_->setSource("sounds/Rocket_engine.ogg"); 89 this->defSndWpnEngine_->setVolume(100); 89 90 this->attach(defSndWpnEngine_); 90 91 … … 92 93 this->defSndWpnLaunch_->setLooping(false); 93 94 this->defSndWpnLaunch_->setSource("sounds/Rocket_launch.ogg"); 95 this->defSndWpnLaunch_->setVolume(100); 94 96 this->attach(defSndWpnLaunch_); 95 97 } -
code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.cc
r6951 r7018 58 58 this->localAngularVelocity_ = 0; 59 59 this->bDestroy_ = false; 60 this->lifetime_ = 100; 60 this->lifetime_ = 120; 61 this->setMass(15); 61 62 COUT(4) << "simplerocket constructed\n"; 62 63 this->maxLife_=90; 63 64 64 65 if (GameMode::isMaster()) 65 66 { 66 this->setCollisionType(WorldEntity::Kinematic);67 this-> setVelocity(0,0,100);67 this->setCollisionType(WorldEntity::Kinematic); 68 this->fuel_=true; 68 69 69 70 Model* model = new Model(this); … … 72 73 this->attach(model); 73 74 74 ParticleEmitter* fire= new ParticleEmitter(this);75 this->attach( fire);76 fire->setOrientation(this->getOrientation());77 fire->setSource("Orxonox/rocketfire2");78 75 this->fire_ = new ParticleEmitter(this); 76 this->attach(this->fire_); 77 78 this->fire_->setOrientation(this->getOrientation()); 79 this->fire_->setSource("Orxonox/simplerocketfire"); 79 80 this->enableCollisionCallback(); 80 81 this->setCollisionResponse(false); … … 83 84 // TODO: fix the orientation and size of this collision shape to match the rocket 84 85 ConeCollisionShape* collisionShape = new ConeCollisionShape(this); 85 collisionShape->setRadius(3); 86 collisionShape->setOrientation(this->getOrientation()); 87 collisionShape->setRadius(1.5f); 86 88 collisionShape->setHeight(5); 87 89 this->attachCollisionShape(collisionShape); 88 89 90 this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&SimpleRocket::destroyObject, this))); 90 91 } 91 92 92 93 } 93 94 95 96 97 94 98 void SimpleRocket::tick(float dt) 95 99 { 100 96 101 SUPER(SimpleRocket, tick, dt); 102 if (this->getVelocity().squaredLength() >130000) this->maxLife_-=dt; //if Velocity bigger than about 360, uses a lot more "fuel" :) 103 97 104 98 105 this->setAngularVelocity(this->getOrientation() * this->localAngularVelocity_); … … 100 107 this->localAngularVelocity_ = 0; 101 108 109 110 if (this->fuel_) { 111 if (this->destroyTimer_.getRemainingTime()< this->lifetime_-this->maxLife_ ) 112 this->fuel_=false; 113 } else this->disableFire(); 114 102 115 if( this->bDestroy_ ) 103 116 this->destroy(); 104 117 118 } 119 120 void SimpleRocket::disableFire(){ 121 this->setAcceleration(0,0,0); 122 this->fire_->detachFromParent(); 123 105 124 } 106 125 … … 134 153 this->player_ = this->owner_->getPlayer(); 135 154 } 155 136 156 137 157 … … 185 205 } 186 206 187 void SimpleRocket::setDestroy()188 {189 this->bDestroy_=true;190 CCOUT(4)<<"trying to destroy";191 }192 207 193 208 void SimpleRocket::fired(unsigned int firemode) -
code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.h
r6951 r7018 34 34 #include "tools/Timer.h" 35 35 #include "worldentities/ControllableEntity.h" 36 #include "graphics/ParticleSpawner.h" 36 37 37 38 namespace orxonox … … 56 57 virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint); 57 58 void destroyObject(); 59 60 void disableFire(); 58 61 59 62 virtual void moveFrontBack(const Vector2& value){} … … 96 99 */ 97 100 inline void rotatePitch(float value) 98 { COUT(0)<<"rotated rocket yaw";101 { 99 102 this->rotatePitch(Vector2(value, 0)); } 100 103 /** … … 104 107 inline void rotateRoll(float value) 105 108 { 106 COUT(0)<<"rotated rocket roll";107 109 this->rotateRoll(Vector2(value, 0)); } 108 110 … … 110 112 inline Pawn* getOwner() const 111 113 { return this->owner_; } 114 inline bool hasFuel() 115 { return this->fuel_;} 116 117 inline void fuelRefill() 118 {this->fuel_=true;} 112 119 113 120 inline void setDamage(float damage) … … 123 130 float damage_; 124 131 bool bDestroy_; 132 bool fuel_; 125 133 126 134 … … 128 136 Timer destroyTimer_; 129 137 float lifetime_; 138 float maxLife_; 139 140 ParticleEmitter* fire_; 141 142 143 130 144 131 145 }; -
code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
r6951 r7018 46 46 RegisterObject(SimpleRocketFire); 47 47 48 this->reloadTime_ = 0.20f;48 this->reloadTime_ = 4; 49 49 this->bParallelReload_ = false; 50 50 this->damage_ = 100; 51 this->speed_ = 100;51 this->speed_ = 300; 52 52 53 53 this->setMunitionName("LaserMunition"); … … 64 64 SimpleRocket* rocket = con->getRocket(); 65 65 this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition()); 66 // rocket->setOrientation(this->getMuzzleOrientation());67 66 rocket->setOrientation(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getWorldOrientation()); 68 Vector3 pos = this->getMuzzlePosition(); 69 rocket->setPosition(pos); 70 // rocket->setAcceleration(20*rocket->getOrientation() * WorldEntity::FRONT); 67 rocket->setPosition(this->getMuzzlePosition()); 71 68 rocket->setVelocity(this->getMuzzleDirection()*this->speed_); 72 69 rocket->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()); 73 70 rocket->setDamage(this->damage_); 74 71 WorldEntity* pawnn=static_cast<ControllableEntity*>(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn())->getTarget(); 75 if (pawnn) 76 { 77 con->setTarget(pawnn); 78 } 72 if (pawnn) con->setTarget(pawnn); 79 73 } 80 74 } -
code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.h
r6951 r7018 40 40 SimpleRocketFire(BaseObject* creator); 41 41 virtual ~SimpleRocketFire(); 42 42 void deactivateFire(); 43 43 virtual void fire(); 44 44 45 45 private: 46 46 float speed_; 47 47 48 }; 48 49 }
Note: See TracChangeset
for help on using the changeset viewer.