Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: resurection of shoots works perfectly… now it is the question of how to recollect them… most probably the GarbageCollector… this will be one step deeper then..

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
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 =  this->bulletFactory->resurect();//new TestBullet();//dynamic_cast<Projectile*>(ObjectManager::getInstance()->getFromDeadList(CL_TEST_BULLET & CL_MASK_LOWLEVEL_CLASS));
161//  weaponSource->play();
162
163  pj->setAbsCoor(this->getEmissionPoint());
164  pj->setAbsDir(this->getAbsDir());
165  pj->setVelocity(this->getVelocity());
166  State::getWorldEntityList()->add(pj);
167}
168
169
170/**
171 *  is called, when the weapon gets hit (=collide with something)
172 * @param from which entity it is been hit
173 * @param where it is been hit
174
175   this may not be used, since it would make the game relay complicated when one
176   can destroy the weapons of enemies or vice versa.
177*/
178void TestGun::hit (WorldEntity* entity, Vector* position)
179{}
180
181
182/**
183 *  is called, when the weapon is destroyed
184
185   this is in conjunction with the hit function, so when a weapon is able to get
186   hit, it can also be destoryed.
187*/
188void TestGun::destroy ()
189{}
190
191/**
192 *  this will draw the weapon
193*/
194void TestGun::draw ()
195{
196  /* draw gun body */
197  glMatrixMode(GL_MODELVIEW);
198  glPushMatrix();
199  float matrix[4][4];
200  glTranslatef (this->getAbsCoor ().x,
201                this->getAbsCoor ().y,
202                this->getAbsCoor ().z);
203  this->getAbsDir ().matrix (matrix);
204  glMultMatrixf((float*)matrix);
205  if( this->leftRight == W_RIGHT)
206    glScalef(1.0, 1.0, -1.0);
207  this->model->draw(1);
208  glPopMatrix();
209
210  /* draw objectComponent1: gun coil - animated stuff */
211  glMatrixMode(GL_MODELVIEW);
212  glPushMatrix();
213  glTranslatef (this->objectComponent1->getAbsCoor ().x,
214                this->objectComponent1->getAbsCoor ().y,
215                this->objectComponent1->getAbsCoor ().z);
216  this->objectComponent1->getAbsDir ().matrix (matrix);
217  glMultMatrixf((float*)matrix);
218  this->model->draw(0);
219  glPopMatrix();
220}
221
Note: See TracBrowser for help on using the repository browser.