Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 30, 2010, 3:19:49 PM (14 years ago)
Author:
scheusso
Message:

merged rocket2 branch back into presentation3 branch

Location:
code/branches/presentation3/src/modules/weapons
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation3/src/modules/weapons/RocketController.cc

    r7013 r7018  
    11/*
    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  */
     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*/
    2828
    2929#include "RocketController.h"
     
    3939    /**
    4040    @brief
    41         Constructor.
     41    Constructor.
    4242    */
    4343    RocketController::RocketController(BaseObject* creator) : Controller(creator)
     
    4646        COUT(5)<< "RocketController constructed\n";
    4747
    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;
    5353    }
    5454
     
    5656    /**
    5757    @brief
    58         The controlling happens here. This method defines what the controller has to do each tick.
     58    The controlling happens here. This method defines what the controller has to do each tick.
    5959    @param dt
    60         The duration of the tick.
     60    The duration of the tick.
    6161    */
    6262    void RocketController::tick(float dt)
    6363    {
    64         haha++;
     64        counter_++;
    6565
    66         //if (haha<30)this->rocket->setVelocity(rocket->getVelocity()*1.03);
    67         if (this->target_) {
     66        if (this->target_ && this->rocket_->hasFuel()) {
    6867            this->setTargetPosition();
    6968            this->moveToTargetPosition();
    7069        }
    71         if (haha>500) rocket->setDestroy();;
    72 
     70       
     71       
    7372    }
    7473
     
    8180    void RocketController::setTargetPosition()
    8281    {
    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());
    8584    }
    8685    void RocketController::moveToTargetPosition()
     
    10099        if (!this->getControllableEntity())
    101100            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";*/
    113101        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);
    134111    }
    135112
  • code/branches/presentation3/src/modules/weapons/RocketController.h

    r6951 r7018  
    4141    /**
    4242    @brief
    43         Controller for the Drone of the PPS tutorial.
     43        Controller for the Rocket (targetseeking)
    4444    @author
    4545        Gabriel Nadler, Originalfile: Oli Scheuss
     
    5252           
    5353            virtual void tick(float dt);
    54                         SimpleRocket* getRocket(){return this->rocket;};
     54                        SimpleRocket* getRocket(){return this->rocket_;};
    5555                        void setTarget(WorldEntity* target);
    5656        protected:
     
    6060
    6161        private:
    62                         SimpleRocket* rocket;
     62                        SimpleRocket* rocket_;
    6363                        Vector3 targetPosition_;
    6464                        WeakPtr<PlayerInfo> player_;
    65                                                 int haha;
     65                                               
    6666                        WeakPtr<WorldEntity> target_;
     67            int counter_;
    6768
    6869
  • code/branches/presentation3/src/modules/weapons/projectiles/Rocket.cc

    r6964 r7018  
    8787            this->defSndWpnEngine_->setLooping(true);
    8888            this->defSndWpnEngine_->setSource("sounds/Rocket_engine.ogg");
     89            this->defSndWpnEngine_->setVolume(100);
    8990            this->attach(defSndWpnEngine_);
    9091
     
    9293            this->defSndWpnLaunch_->setLooping(false);
    9394            this->defSndWpnLaunch_->setSource("sounds/Rocket_launch.ogg");
     95            this->defSndWpnLaunch_->setVolume(100);
    9496            this->attach(defSndWpnLaunch_);
    9597        }
  • code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.cc

    r6951 r7018  
    5858        this->localAngularVelocity_ = 0;
    5959        this->bDestroy_ = false;
    60         this->lifetime_ = 100;
     60        this->lifetime_ = 120;
     61        this->setMass(15);
    6162        COUT(4) << "simplerocket constructed\n";
    62 
     63        this->maxLife_=90;
    6364
    6465        if (GameMode::isMaster())
    6566       {
    66            this->setCollisionType(WorldEntity::Kinematic);
    67             this->setVelocity(0,0,100);
     67            this->setCollisionType(WorldEntity::Kinematic);
     68            this->fuel_=true;
    6869
    6970            Model* model = new Model(this);
     
    7273            this->attach(model);
    7374
    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");
    7980            this->enableCollisionCallback();
    8081            this->setCollisionResponse(false);
     
    8384            // TODO: fix the orientation and size of this collision shape to match the rocket
    8485            ConeCollisionShape* collisionShape = new ConeCollisionShape(this);
    85             collisionShape->setRadius(3);
     86            collisionShape->setOrientation(this->getOrientation());
     87            collisionShape->setRadius(1.5f);
    8688            collisionShape->setHeight(5);
    8789            this->attachCollisionShape(collisionShape);
    88 
    8990            this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&SimpleRocket::destroyObject, this)));
    9091        }
    9192
    9293    }
    93    
     94   
     95
     96
     97
    9498    void SimpleRocket::tick(float dt)
    9599    {
     100
    96101        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       
    97104
    98105            this->setAngularVelocity(this->getOrientation() * this->localAngularVelocity_);
     
    100107            this->localAngularVelocity_ = 0;
    101108
     109           
     110            if (this->fuel_) {
     111                if (this->destroyTimer_.getRemainingTime()<  this->lifetime_-this->maxLife_ )
     112                    this->fuel_=false;
     113            } else this->disableFire();
     114
    102115            if( this->bDestroy_ )
    103116                this->destroy();
    104        
     117               
     118    }
     119
     120    void SimpleRocket::disableFire(){
     121        this->setAcceleration(0,0,0);       
     122        this->fire_->detachFromParent();
     123
    105124    }
    106125
     
    134153        this->player_ = this->owner_->getPlayer();
    135154    }
     155
    136156
    137157
     
    185205    }
    186206   
    187     void SimpleRocket::setDestroy()
    188     {
    189         this->bDestroy_=true;
    190         CCOUT(4)<<"trying to destroy";
    191     }
    192207
    193208    void SimpleRocket::fired(unsigned int firemode)
  • code/branches/presentation3/src/modules/weapons/projectiles/SimpleRocket.h

    r6951 r7018  
    3434#include "tools/Timer.h"
    3535#include "worldentities/ControllableEntity.h"
     36#include "graphics/ParticleSpawner.h"
    3637
    3738namespace orxonox
     
    5657            virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
    5758            void destroyObject();
     59
     60            void disableFire();
    5861
    5962            virtual void moveFrontBack(const Vector2& value){}
     
    9699            */
    97100            inline void rotatePitch(float value)
    98             {   COUT(0)<<"rotated rocket yaw";
     101            {   
    99102                                this->rotatePitch(Vector2(value, 0)); }
    100103            /**
     
    104107            inline void rotateRoll(float value)
    105108            {
    106                                 COUT(0)<<"rotated rocket roll";
    107109                                this->rotateRoll(Vector2(value, 0)); }
    108110
     
    110112            inline Pawn* getOwner() const
    111113                { return this->owner_; }
     114            inline bool hasFuel()
     115            { return this->fuel_;}
     116
     117            inline void fuelRefill()
     118            {this->fuel_=true;}
    112119
    113120            inline void setDamage(float damage)
     
    123130            float damage_;
    124131            bool bDestroy_;
     132            bool fuel_;
    125133
    126134
     
    128136            Timer destroyTimer_;
    129137            float lifetime_;
     138            float maxLife_;
     139
     140            ParticleEmitter* fire_;
     141
     142
     143
    130144
    131145    };
  • code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.cc

    r6951 r7018  
    4646        RegisterObject(SimpleRocketFire);
    4747
    48         this->reloadTime_ = 0.20f;
     48        this->reloadTime_ = 4;
    4949        this->bParallelReload_ = false;
    5050        this->damage_ = 100;
    51         this->speed_ = 100;
     51        this->speed_ = 300;
    5252
    5353        this->setMunitionName("LaserMunition");
     
    6464        SimpleRocket* rocket = con->getRocket();
    6565        this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
    66 //      rocket->setOrientation(this->getMuzzleOrientation());
    6766        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());
    7168        rocket->setVelocity(this->getMuzzleDirection()*this->speed_);
    7269        rocket->setOwner(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
    7370        rocket->setDamage(this->damage_);
    7471        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);
    7973    }
    8074}
  • code/branches/presentation3/src/modules/weapons/weaponmodes/SimpleRocketFire.h

    r6951 r7018  
    4040            SimpleRocketFire(BaseObject* creator);
    4141            virtual ~SimpleRocketFire();
    42 
     42            void deactivateFire();
    4343            virtual void fire();
    4444
    4545        private:
    4646            float speed_;
     47
    4748    };
    4849}
Note: See TracChangeset for help on using the changeset viewer.