Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/world_entities/weapons/test_gun.cc @ 4836

Last change on this file since 4836 was 4836, checked in by bensch, 19 years ago

orxonox/trunk: renamed all the \param → @param and so on in Doxygen tags.
Thanks a lot to the kDevelop team. this took since the last commit :)

File size: 6.6 KB
Line 
1
2
3/*
4   orxonox - the future of 3D-vertical-scrollers
5
6   Copyright (C) 2004 orx
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   ### File Specific
14   main-programmer: Patrick Boenzli
15   co-programmer:
16
17
18   @todo: direction in which the projectile flights
19   @todo: a target to set/hit
20*/
21
22
23#include "test_gun.h"
24
25#include "world_entity.h"
26#include "model.h"
27#include "test_bullet.h"
28
29#include "state.h"
30#include "vector.h"
31#include "list.h"
32#include "animation3d.h"
33#include "sound_engine.h"
34
35#include "object_manager.h"
36
37using namespace std;
38
39
40/**
41 *  standard constructor
42
43   creates a new weapon
44*/
45TestGun::TestGun (PNode* parent, const Vector& coordinate,
46                  const Quaternion& direction, int leftRight)
47  :  Weapon (parent, coordinate, direction)
48{
49  this->setClassID(CL_TEST_GUN, "TestGun");
50
51  this->model = (Model*)ResourceManager::getInstance()->load("models/test_gun.obj", OBJ, RP_CAMPAIGN);
52  this->idleTime = 0.2f;
53  this->leftRight = leftRight;
54
55  this->objectComponent1 = new PNode();
56  this->animation1 = new Animation3D(this->objectComponent1);
57  this->animation2 = new Animation3D(this);
58  this->animation3 = new Animation3D(this);
59  //parent->addChild(this->objectComponent1, PNODE_ALL);
60  this->addChild(this->objectComponent1, PNODE_ALL);
61
62  this->animation1->setInfinity(ANIM_INF_CONSTANT);
63  this->animation2->setInfinity(ANIM_INF_CONSTANT);
64  this->animation3->setInfinity(ANIM_INF_CONSTANT);
65  if( this->leftRight == W_LEFT)
66    {
67      this->projectileOffset = Vector(1.0, 0.0, -0.35);
68
69      this->animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
70      this->animation1->addKeyFrame(Vector(-0.4, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
71      this->animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
72
73      this->animation2->addKeyFrame(Vector(-2.6, 0.1, 2.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
74      this->animation2->addKeyFrame(Vector(-2.6, 0.1, 3.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
75
76      this->animation3->addKeyFrame(Vector(-2.6, 0.1, 3.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
77      this->animation3->addKeyFrame(Vector(-2.6, 0.1, 2.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
78    }
79  else if( this->leftRight == W_RIGHT)
80    {
81      this->projectileOffset = Vector(1.0, 0.0, 0.5);
82
83      this->objectComponent1->setRelCoor(Vector(0,0,0.35));
84      this->animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
85      this->animation1->addKeyFrame(Vector(-0.4, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
86      this->animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
87
88      this->animation2->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
89      this->animation2->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
90
91      this->animation3->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
92      this->animation3->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
93    }
94
95  this->fireSound = (SoundBuffer*)ResourceManager::getInstance()->load("sound/shot1.wav", WAV);
96  this->weaponSource = new SoundSource(this->fireSound, this);
97  this->weaponSource->setRolloffFactor(.1);
98  Projectile* p = new TestBullet(this);
99//  ObjectManager::getInstance()->cache(CL_TEST_BULLET, 100, p);
100  //ObjectManager::getInstance()->debug();
101}
102
103
104/**
105 *  standard deconstructor
106*/
107TestGun::~TestGun ()
108{
109  // model will be deleted from WorldEntity-destructor
110}
111
112
113/**
114 *  this activates the weapon
115
116   This is needed, since there can be more than one weapon on a ship. the
117   activation can be connected with an animation. for example the weapon is
118   been armed out.
119*/
120void TestGun::activate()
121{
122  this->animation2->replay();
123}
124
125
126/**
127 *  this deactivates the weapon
128
129   This is needed, since there can be more than one weapon on a ship. the
130   activation can be connected with an animation. for example the weapon is
131   been armed out.
132*/
133void TestGun::deactivate()
134{
135  this->animation3->replay();
136}
137
138
139/**
140 *  fires the weapon
141
142   this is called from the player.cc, when fire-button is been pushed
143   @todo: the ObjectManager deliveres Projectiles not TestBullets! this should be diffrent
144*/
145void TestGun::fire()
146{
147  if( !this->hasWeaponIdleTimeElapsed())
148    {
149      this->weaponIdle();
150      return;
151    }
152
153    Projectile* pj =  new TestBullet(this);//dynamic_cast<Projectile*>(ObjectManager::getInstance()->getFromDeadList(CL_TEST_BULLET & CL_MASK_LOWLEVEL_CLASS));
154  weaponSource->play();
155
156  pj->setAbsCoor(this->getAbsCoor() + this->projectileOffset);
157  pj->setAbsDir(this->getAbsDir());
158  pj->setVelocity(this->getVelocity());
159  State::getWorldEntityList()->add(pj);
160  this->localTime = 0;
161
162  this->animation1->replay();
163}
164
165
166/**
167 *  is called, when the weapon gets hit (=collide with something)
168 * @param from which entity it is been hit
169 * @param where it is been hit
170
171   this may not be used, since it would make the game relay complicated when one
172   can destroy the weapons of enemies or vice versa.
173*/
174void TestGun::hit (WorldEntity* entity, Vector* position)
175{}
176
177
178/**
179 *  is called, when the weapon is destroyed
180
181   this is in conjunction with the hit function, so when a weapon is able to get
182   hit, it can also be destoryed.
183*/
184void TestGun::destroy ()
185{}
186
187
188/**
189 *  tick signal for time dependent/driven stuff
190*/
191void TestGun::tick (float time)
192{
193  this->localTime += time;
194}
195
196
197/**
198 *  is called, when there is no fire button pressed
199*/
200void TestGun::weaponIdle()
201{}
202
203
204/**
205 *  this will draw the weapon
206*/
207void TestGun::draw ()
208{
209  /* draw gun body */
210  glMatrixMode(GL_MODELVIEW);
211  glPushMatrix();
212  float matrix[4][4];
213  glTranslatef (this->getAbsCoor ().x,
214                this->getAbsCoor ().y,
215                this->getAbsCoor ().z);
216  this->getAbsDir ().matrix (matrix);
217  glMultMatrixf((float*)matrix);
218  if( this->leftRight == W_RIGHT)
219    glScalef(1.0, 1.0, -1.0);
220  this->model->draw(1);
221  glPopMatrix();
222
223  /* draw objectComponent1: gun coil - animated stuff */
224  glMatrixMode(GL_MODELVIEW);
225  glPushMatrix();
226  glTranslatef (this->objectComponent1->getAbsCoor ().x,
227                this->objectComponent1->getAbsCoor ().y,
228                this->objectComponent1->getAbsCoor ().z);
229  this->objectComponent1->getAbsDir ().matrix (matrix);
230  glMultMatrixf((float*)matrix);
231  this->model->draw(0);
232  glPopMatrix();
233}
234
Note: See TracBrowser for help on using the repository browser.