Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 26, 2010, 4:28:14 PM (15 years ago)
Author:
gnadler
Message:

now rocket slows and then finally stops after a given number of ticks (aka fuel).
rocket speeds up if distance is greater than x (right now 1000 but can be changed).
collisionShape not yet fixed.

Location:
code/branches/rocket2/src/modules/weapons
Files:
6 edited

Legend:

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

    r6956 r6966  
    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
     
    9493    {
    9594        this->target_ = target;
    96         CCOUT(4) << "got target" << endl;
    9795    }
    9896
     
    10199        if (!this->getControllableEntity())
    102100            return;
    103         float dx = target.x-this->getControllableEntity()->getPosition().x;
    104         float dy = target.y-this->getControllableEntity()->getPosition().y;
    105         COUT(4)<<"\n diff: ";
    106         COUT(4)<<target-this->getControllableEntity()->getPosition() << endl;
    107         //COUT(0)<<"\n 2D view: ";
    108         /* COUT(0)<<this->getControllableEntity()->getPosition().x;
    109         COUT(0)<<" ";
    110         COUT(0)<<this->getControllableEntity()->getPosition().y;
    111         COUT(0)<<" ";
    112         COUT(0)<<this->getControllableEntity()->getPosition().z;
    113         COUT(0)<<"\n";*/
     101     
    114102        Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
    115         float distance = (target - this->getControllableEntity()->getPosition()).length();
    116         //Vector3D diff =target-this->rocket->getPosition();
    117         COUT(4) << "viewdirection: "<< coord << endl;
    118         //COUT(0)<<"  ";
    119         //COUT(0)<<coord.y;
     103        float distance = (target - this->getControllableEntity()->getWorldPosition()).length();
     104
     105
     106        if (distance > 1000&&this->getControllableEntity()->getVelocity().squaredLength()<160000)
     107            this->getControllableEntity()->setAcceleration(this->rocket_->getOrientation()*Vector3(-20,-20,-20));
     108        if (distance <1000) this->rocket_->setAcceleration(0,0,0);
     109       
    120110        this->getControllableEntity()->rotateYaw(-sgn(coord.x)*coord.x*coord.x);
    121111        this->getControllableEntity()->rotatePitch(sgn(coord.y)*coord.y*coord.y);
    122 //         this->getControllableEntity()->rotateYaw(10);
    123 //         this->getControllableEntity()->rotatePitch(0);
    124         //this->getControllableEntity()->rotatePitch(rotation.getPitch().valueRadians());
    125         //this->getControllableEntity()->rotateYaw(rotation.getYaw().valueRadians());
    126         //this->getControllableEntity()->moveUpDown(coord.y);
    127         //this->getControllableEntity()->moveRightLeft(coord.x);
    128         //this->getControllableEntity()->rotatePitch(coord);
    129    //     if (this->target_ || distance > 10)
    130    //     {
    131    //         // Multiply with 0.8 to make them a bit slower
    132             //this->getControllableEntity()->rotateYaw(coord.x );
    133    //         this->getControllableEntity()->rotatePitch(coord.y);
    134    //     }
    135112    }
    136113
  • code/branches/rocket2/src/modules/weapons/RocketController.h

    r6951 r6966  
    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/rocket2/src/modules/weapons/projectiles/SimpleRocket.cc

    r6956 r6966  
    5959        this->bDestroy_ = false;
    6060        this->lifetime_ = 100;
     61        this->setMass(15);
    6162        COUT(4) << "simplerocket constructed\n";
    62 
     63        this->counter_=0;
     64        this->slowing_=false;
    6365
    6466        if (GameMode::isMaster())
    6567       {
    6668            this->setCollisionType(WorldEntity::Kinematic);
    67             //this->setVelocity(0,0,100);
     69            this->fuel_=true;
    6870
    6971            Model* model = new Model(this);
     
    7274            this->attach(model);
    7375
    74             ParticleEmitter* fire = new ParticleEmitter(this);
    75             this->attach(fire);
    76             fire->setOrientation(this->getOrientation());
    77             fire->setSource("Orxonox/rocketfire2");
    78 
     76            this->fire_ = new ParticleEmitter(this);
     77            this->attach(this->fire_);
     78           
     79            this->fire_->setOrientation(this->getOrientation());
     80            this->fire_->setSource("Orxonox/simplerocketfire");
    7981            this->enableCollisionCallback();
    8082            this->setCollisionResponse(false);
     
    8385            // TODO: fix the orientation and size of this collision shape to match the rocket
    8486            ConeCollisionShape* collisionShape = new ConeCollisionShape(this);
    85             collisionShape->setRadius(3);
    86             collisionShape->setHeight(5);
     87            collisionShape->setOrientation(this->getOrientation());
     88            collisionShape->setRadius(1.5f);
     89            collisionShape->setHeight(200);
    8790            this->attachCollisionShape(collisionShape);
     91           
    8892
    8993            this->destroyTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&SimpleRocket::destroyObject, this)));
     
    9195
    9296    }
    93    
     97   
     98    void SimpleRocket::disableFire(){
     99        this->setAcceleration(0,0,0);
     100        this->setVelocity(Vector3(0,0,0));
     101       
     102        this->fire_->detachFromParent();
     103        //this->fire_->setVisible(false);
     104
     105    }
     106
     107
    94108    void SimpleRocket::tick(float dt)
    95109    {
     110
    96111        SUPER(SimpleRocket, tick, dt);
     112        counter_++;
     113        if (this->getVelocity().squaredLength() >130000 && !slowing_) counter_++; //if Velocity bigger than about 360, uses a lot more "fuel" :)
    97114
    98115            this->setAngularVelocity(this->getOrientation() * this->localAngularVelocity_);
     
    100117            this->localAngularVelocity_ = 0;
    101118
     119           
     120            if (this->fuel_) {
     121                COUT(0)<<this->getVelocity().length()<<endl;
     122                if (this->counter_>1000 && counter_%12==0)
     123                   
     124                    if (!this->slowing_) {
     125                        this->setAcceleration(this->getOrientation()*Vector3(10,10,10));
     126                        this->slowing_=true;
     127                    }
     128
     129                if (this->counter_ > 1800)
     130                    this->fuel_=false;
     131            }
    102132            if( this->bDestroy_ )
    103133                this->destroy();
     134            if (!this->fuel_)
     135                this->disableFire();
     136       
     137           
     138           
    104139       
    105140    }
     
    134169        this->player_ = this->owner_->getPlayer();
    135170    }
     171
    136172
    137173
  • code/branches/rocket2/src/modules/weapons/projectiles/SimpleRocket.h

    r6951 r6966  
    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_;
     133            bool slowing_;
     134            int counter_;
    125135
    126136
     
    128138            Timer destroyTimer_;
    129139            float lifetime_;
     140            ParticleEmitter* fire_;
     141
    130142
    131143    };
  • code/branches/rocket2/src/modules/weapons/weaponmodes/SimpleRocketFire.cc

    r6956 r6966  
    4646        RegisterObject(SimpleRocketFire);
    4747
    48         this->reloadTime_ = 0.20f;
     48        this->reloadTime_ = 4;
    4949        this->bParallelReload_ = false;
    5050        this->damage_ = 100;
     
    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/rocket2/src/modules/weapons/weaponmodes/SimpleRocketFire.h

    r6951 r6966  
    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.