Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/modules/weapons/RocketController.cc @ 12039

Last change on this file since 12039 was 11071, checked in by landauf, 9 years ago

merged branch cpp11_v3 back to trunk

  • Property svn:eol-style set to native
File size: 3.5 KB
RevLine 
[7129]1/*
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:
[8855]23*     Gabriel Nadler
[7129]24*   Co-authors:
25*      ...
26*
27*/
28
[8855]29/**
30    @file BasicProjectile.h
31    @brief Implementation of the BasicProjectile class.
32*/
33
[7129]34#include "RocketController.h"
[8855]35
[7129]36#include "util/Math.h"
37#include "worldentities/pawns/Pawn.h"
[8855]38#include "projectiles/SimpleRocket.h"
39#include "weaponmodes/SimpleRocketFire.h"
[11071]40#include "core/CoreIncludes.h"
[7129]41
42namespace orxonox
43{
[10258]44    RegisterClass(RocketController);
45
[7129]46    /**
47    @brief
[8855]48        Constructor.
[7129]49    */
[9667]50    RocketController::RocketController(Context* context) : Controller(context)
[7129]51    {
52        RegisterObject(RocketController);
[8858]53//        orxout() << "RocketController constructed" << endl;
[7129]54
[8855]55        // Create a rocket for the controller.
[9667]56        this->rocket_ = new SimpleRocket(this->getContext());
[7129]57        this->rocket_->setController(this);
[9348]58        this->setControllableEntity(orxonox_cast<ControllableEntity*>(this->rocket_));
[7129]59    }
60
61
62    /**
63    @brief
[8855]64        The controlling happens here. This method defines what the controller has to do each tick.
[7129]65    @param dt
[8855]66        The duration of the tick.
[7129]67    */
68    void RocketController::tick(float dt)
69    {
70        if (this->target_ && this->rocket_->hasFuel()) {
[8855]71            this->updateTargetPosition();
72            this->moveToPosition(this->targetPosition_);
[7129]73        }
74    }
75
76    RocketController::~RocketController()
77    {
[8858]78//        orxout() << "RocketController destroyed" << endl;
[7129]79    }
80
[8855]81    /**
82    @brief
83        Update the position of the target.
84    */
85    void RocketController::updateTargetPosition()
[7129]86    {
[8855]87        this->targetPosition_ = this->target_->getWorldPosition(); //don't really note a difference in the rocket behaviour xD
[7129]88        //this->targetPosition_ = getPredictedPosition(this->getControllableEntity()->getWorldPosition(),this->getControllableEntity()->getVelocity().length() , this->target_->getWorldPosition(), this->target_->getVelocity());
89    }
90
91    void RocketController::moveToPosition(const Vector3& target)
92    {
93        if (!this->getControllableEntity())
94            return;
95
96        Vector2 coord = get2DViewdirection(this->rocket_->getPosition(), this->rocket_->getOrientation() * WorldEntity::FRONT, this->rocket_->getOrientation() * WorldEntity::UP, target);
97        float distance = (target - this->rocket_->getWorldPosition()).length();
98
99
100        if (distance > 1000 && this->rocket_->getVelocity().squaredLength()<160000)
101            this->rocket_->setAcceleration(this->rocket_->getOrientation()*Vector3(-20,-20,-20));
[10258]102        if (distance < 1000) this->rocket_->setAcceleration(0,0,0);
[7129]103
104        this->rocket_->rotateYaw(-sgn(coord.x)*coord.x*coord.x);
105        this->rocket_->rotatePitch(sgn(coord.y)*coord.y*coord.y);
106    }
107
108}
Note: See TracBrowser for help on using the repository browser.