Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: doxygen tags.

File size: 6.4 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
37
38using namespace std;
39
40
41/**
42 *  standard constructor
43
44   creates a new weapon
45*/
46TestGun::TestGun (PNode* parent, const Vector& coordinate,
47                  const Quaternion& direction, int leftRight)
48  :  Weapon (parent, coordinate, direction)
49{
50  this->setClassID(CL_TEST_GUN, "TestGun");
51
52  this->model = (Model*)ResourceManager::getInstance()->load("models/test_gun.obj", OBJ, RP_CAMPAIGN);
53  this->leftRight = leftRight;
54
55  this->objectComponent1 = new PNode();
56  Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this->objectComponent1);
57  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
58  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
59  //parent->addChild(this->objectComponent1, PNODE_ALL);
60  this->addChild(this->objectComponent1, PNODE_ALL);
61
62  animation1->setInfinity(ANIM_INF_CONSTANT);
63  animation2->setInfinity(ANIM_INF_CONSTANT);
64  animation3->setInfinity(ANIM_INF_CONSTANT);
65  if( this->leftRight == W_LEFT)
66    {
67      this->setEmissionPoint(1.0, 0.0, -0.35);
68
69      animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
70      animation1->addKeyFrame(Vector(-0.4, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
71      animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
72
73      animation2->addKeyFrame(Vector(-2.6, 0.1, 2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
74      animation2->addKeyFrame(Vector(-2.6, 0.1, 3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
75
76      animation3->addKeyFrame(Vector(-2.6, 0.1, 3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
77      animation3->addKeyFrame(Vector(-2.6, 0.1, 2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
78    }
79  else if( this->leftRight == W_RIGHT)
80    {
81      this->setEmissionPoint(1.0, 0.0, 0.5);
82
83      this->objectComponent1->setRelCoor(Vector(0,0,0.35));
84      animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
85      animation1->addKeyFrame(Vector(-0.4, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
86      animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
87
88      animation2->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
89      animation2->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
90
91      animation3->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
92      animation3->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.3, 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();
99
100  //  ObjectManager::getInstance()->cache(CL_TEST_BULLET, 100, p);
101  //ObjectManager::getInstance()->debug();
102
103  this->setStateDuration(WS_SHOOTING, .4);
104  this->setStateDuration(WS_RELOADING, 1);
105  this->setStateDuration(WS_ACTIVATING, .4);
106  this->setStateDuration(WS_DEACTIVATING, .4);
107
108  this->setMaximumEnergy(1000, 10);
109  this->increaseEnergy(100);
110  //this->minCharge = 2;
111
112  this->setActionSound(WA_SHOOT, "sound/shot1.wav");
113
114  this->bulletFactory = tFastFactory<TestBullet>::getFastFactory(CL_TEST_BULLET, "TestBullet");
115  this->bulletFactory->prepare(100);
116}
117
118
119/**
120 *  standard deconstructor
121*/
122TestGun::~TestGun ()
123{
124  // model will be deleted from WorldEntity-destructor
125}
126
127
128/**
129 *  this activates the weapon
130
131   This is needed, since there can be more than one weapon on a ship. the
132   activation can be connected with an animation. for example the weapon is
133   been armed out.
134*/
135void TestGun::activate()
136{
137}
138
139
140/**
141 *  this deactivates the weapon
142
143   This is needed, since there can be more than one weapon on a ship. the
144   activation can be connected with an animation. for example the weapon is
145   been armed out.
146*/
147void TestGun::deactivate()
148{
149}
150
151
152/**
153 *  fires the weapon
154
155   this is called from the player.cc, when fire-button is been pushed
156   @todo: the ObjectManager deliveres Projectiles not TestBullets! this should be diffrent
157*/
158void TestGun::fire()
159{
160  Projectile* pj =  dynamic_cast<Projectile*>(this->bulletFactory->resurrect());
161
162  pj->setAbsCoor(this->getEmissionPoint());
163  pj->setAbsDir(this->getAbsDir());
164  pj->setVelocity(this->getVelocity());
165  State::getWorldEntityList()->add(pj);
166}
167
168
169/**
170 *  is called, when the weapon gets hit (=collide with something)
171 * @param from which entity it is been hit
172 * @param where it is been hit
173
174   this may not be used, since it would make the game relay complicated when one
175   can destroy the weapons of enemies or vice versa.
176*/
177void TestGun::hit (WorldEntity* entity, Vector* position)
178{}
179
180
181/**
182 *  is called, when the weapon is destroyed
183
184   this is in conjunction with the hit function, so when a weapon is able to get
185   hit, it can also be destoryed.
186*/
187void TestGun::destroy ()
188{}
189
190/**
191 *  this will draw the weapon
192*/
193void TestGun::draw ()
194{
195  /* draw gun body */
196  glMatrixMode(GL_MODELVIEW);
197  glPushMatrix();
198  float matrix[4][4];
199  glTranslatef (this->getAbsCoor ().x,
200                this->getAbsCoor ().y,
201                this->getAbsCoor ().z);
202  this->getAbsDir ().matrix (matrix);
203  glMultMatrixf((float*)matrix);
204  if( this->leftRight == W_RIGHT)
205    glScalef(1.0, 1.0, -1.0);
206  this->model->draw(1);
207  glPopMatrix();
208
209  /* draw objectComponent1: gun coil - animated stuff */
210  glMatrixMode(GL_MODELVIEW);
211  glPushMatrix();
212  glTranslatef (this->objectComponent1->getAbsCoor ().x,
213                this->objectComponent1->getAbsCoor ().y,
214                this->objectComponent1->getAbsCoor ().z);
215  this->objectComponent1->getAbsDir ().matrix (matrix);
216  glMultMatrixf((float*)matrix);
217  this->model->draw(0);
218  glPopMatrix();
219}
220
Note: See TracBrowser for help on using the repository browser.