Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/main_reto/src/OrxonoxShip.cpp @ 141

Last change on this file since 141 was 141, checked in by rgrieder, 16 years ago

RunManager.cpp completely commented in Doxygen style.
One or two comments are yet inappropriate since a few changes to the code have to be made anyway. coming soon.

File size: 3.0 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software: you can redistribute it and/or modify
8 *   it under the terms of the GNU General Public License as published by
9 *   the Free Software Foundation, either version 3 of the License, or
10 *   (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 *
20 *
21 *   Author:
22 *      Reto Grieder
23 *   Co-authors:
24 *      ...
25 *
26 */
27
28#include "OrxonoxShip.h"
29
30
31OrxonoxShip::OrxonoxShip(SceneManager *mSceneMgr, SceneNode *mNode)
32            : mSceneMgr(mSceneMgr), mRootNode(mNode), speed(Vector3(0, 0, 0)),
33      baseThrust(1000), thrust(0), sideThrust(0), n(0),
34        bulletSpeed(400)
35{
36}
37
38
39OrxonoxShip::~OrxonoxShip()
40{
41}
42
43
44bool OrxonoxShip::initialise()
45{
46        // load all the resources needed (no resource groups yet,
47  // so the allInit is not executed!)
48        // ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
49
50        // create the "space ship" (currently a fish..)
51        // TODO: names must be unique!
52        mShip = mSceneMgr->createEntity("Ship", "fish.mesh");
53        SceneNode *fishNode = mRootNode->createChildSceneNode("fishNode");
54        fishNode->yaw(Degree(-90));
55        fishNode->attachObject(mShip);
56        fishNode->setScale(Vector3(10, 10, 10));
57
58        return true;
59}
60
61
62void OrxonoxShip::setThrust(const Real value)
63{
64        thrust = value * baseThrust;
65}
66
67void OrxonoxShip::setSideThrust(const Real value)
68{
69        sideThrust = value * baseThrust;
70}
71
72void OrxonoxShip::setYaw(const Radian value)
73{
74        mRootNode->yaw(value);
75}
76
77void OrxonoxShip::setPitch(const Radian value)
78{
79        mRootNode->pitch(value);
80}
81
82void OrxonoxShip::setRoll(const Radian value)
83{
84        mRootNode->roll(value);
85}
86
87Real OrxonoxShip::getThrust()
88{
89        return thrust;
90}
91
92Bullet* OrxonoxShip::fire()
93{
94        // TODO: Names must be unique!
95        SceneNode *temp = mRootNode->getParentSceneNode()->createChildSceneNode(
96        "BulletNode" + StringConverter::toString(n));
97        temp->setOrientation(mRootNode->getOrientation());
98        temp->setPosition(mRootNode->getPosition());
99        temp->setScale(Vector3(1, 1, 1) * 10);
100        temp->yaw(Degree(-90));
101        return new Bullet(temp, mSceneMgr->createEntity("bullet"
102        + StringConverter::toString(n++), "Barrel.mesh"), speed
103        + (mRootNode->getLocalAxes() * Vector3(0, 0, -1)).normalisedCopy()
104        * bulletSpeed);
105}
106
107bool OrxonoxShip::tick(unsigned long time, Real deltaTime)
108{
109  Quaternion quad = mRootNode->getOrientation();
110  quad.normalise();
111  speed += quad * Vector3(0, 0, -1) * thrust * deltaTime;
112        speed += quad * Vector3(-1, 0,  0) * sideThrust * deltaTime;
113
114        mRootNode->translate(speed * deltaTime);
115
116        return true;
117}
Note: See TracBrowser for help on using the repository browser.