Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 8858 was 8858, checked in by landauf, 13 years ago

merged output branch back to trunk.

Changes:

  • you have to include util/Output.h instead of util/Debug.h
  • COUT(x) is now called orxout(level)
  • output levels are now defined by an enum instead of numbers. see util/Output.h for the definition
  • it's possible to use output contexts with orxout(level, context). see util/Output.h for some common contexts. you can define more contexts
  • you must use 'endl' at the end of an output message, '\n' does not flush the message

Output levels:

  • instead of COUT(0) use orxout()
  • instead of COUT(1) use orxout(user_error) or orxout(internal_error)
  • instead of COUT(2) use orxout(user_warning) or orxout(internal_warning)
  • instead of COUT(3) use orxout(user_status/user_info) or orxout(internal_status/internal_info)
  • instead of COUT(4) use orxout(verbose)
  • instead of COUT(5) use orxout(verbose_more)
  • instead of COUT(6) use orxout(verbose_ultra)

Guidelines:

  • user_* levels are for the user, visible in the console and the log-file
  • internal_* levels are for developers, visible in the log-file
  • verbose_* levels are for debugging, only visible if the context of the output is activated

Usage in C++:

  • orxout() << "message" << endl;
  • orxout(level) << "message" << endl;
  • orxout(level, context) << "message" << endl;

Usage in Lua:

  • orxout("message")
  • orxout(orxonox.level.levelname, "message")
  • orxout(orxonox.level.levelname, "context", "message")

Usage in Tcl (and in the in-game-console):

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